■過去ログ置き場に戻る■ 1- 前250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

【C++】 DirectX初心者質問スレ Part2【C++】
751 名前:デフォルトの名無しさん :05/02/08 13:06:58
すみません、質問なんですが、これまでDirectX8.0を入れてプレイしていたゲームを、
新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。

752 名前:デフォルトの名無しさん :05/02/08 13:08:35
すみません、質問なんですが、これまでDirectX8.0を入れてプレイしていたゲームを、
新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。

753 名前:デフォルトの名無しさん :05/02/08 13:12:19
おっしゃる通り、スレ違いなのでお引き取り下さい。

754 名前:752 :05/02/08 13:14:02
やはりそうでしたか、大変失礼しました。どちらのスレに行けばよいでしょうか?

755 名前:デフォルトの名無しさん :05/02/08 13:22:34
http://pc5.2ch.net/test/read.cgi/pcqa/1107780143/

756 名前:デフォルトの名無しさん :05/02/08 14:37:53
>>753
スレ違いというか DirectX関連の質問なんだから答えてあげりゃいいじゃんよ
わからないんだったらしょうがないが

>>751
新しいDirectXから古いDirectXに戻ることはできないよ
でも新しいDirectXには古いDirectXが入っている
通常ゲームでは決められたバージョンが使用されているので、
DirectX8でゲームができたならDirectX9.0cを入れても
動作は変わらないはず

問題がありそうなところは、ディスプレイの解像度の設定
ゲームがフルスクリーンだと思われるので、そのときの解像度に
設定してみて、画面がはみでるかたしかめるのがいいと思う

757 名前:デフォルトの名無しさん :05/02/08 20:25:33
何こいつ

758 名前:デフォルトの名無しさん :05/02/08 21:07:45
DirectMusic のInitAudioに設定する IDirectSound** は
IDirectSound8 から取得することってできないんですか?

Music と Sound を共存させる方法がよくわかりません


759 名前:デフォルトの名無しさん :05/02/09 08:36:25
>>758
>IDirectSound8 から取得することってできないんですか?
ヘルプに書いてあるでしょ。

>Music と Sound を共存させる方法がよくわかりません
そのまま使えば共存できるでしょ。

760 名前:デフォルトの名無しさん :05/02/09 17:00:21
質問宜しいですか?
CSSから呼び出せるDirectX Transformを作ろうとしてます。
<body style="filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=50);">
みたいに使うやつです。
で、とりあえず動くものはできたんですが、上の例でいうOpacity=50みたいに
引数を渡す場合の、トランスフォーム側での値の取得の仕方が分かりません。
詳しい方ご教示下さい。

761 名前:デフォルトの名無しさん :05/02/10 02:35:58
http://pcweb.mycom.co.jp/column/winxp/151/

Longhornが割と早く出てくるとか。
WGFに早く乗り換えたい。

762 名前:デフォルトの名無しさん :05/02/10 14:53:57
>>759

いやできないんどすよ?
でなければInitAudioの引数の意味がないんですが。

763 名前:デフォルトの名無しさん :05/02/10 15:39:54
DECLARE_INTERFACE_(IDirectSound8, IDirectSound)


764 名前:752 :05/02/10 16:10:55
>>756
丁寧なレスありがとうございます。
解像度を設定しなおしてもやはりはみ出るので、ディスプレイの水平方向の設定を変えたところ、
最も見たかった部分はなんとか画面の中に収まるようになりました。
スレ違いなのに回答してくださってありがとうございました。

765 名前:デフォルトの名無しさん :05/02/10 20:28:24
左手座標系の任意にあるポリゴンを位置を変えずにこっちを向かせるためには
どうすればいいのでしょうか?

正方形のポリゴンを構成するは4点全てz = 0です。
x,y = (-1,-1), (1, -1), (-1, 1), (1, 1)

1. 4点を任意の位置に平行移動させる
2. 4点にViewの逆行列を掛ける
3. 描画 (DrawPrimitive)

としてみたのですが、うまく行きませんでした。


766 名前:765 :05/02/10 21:01:45
正直意味不明ですが…

1. 4点に逆行列を掛ける
2. 4点のxyzそれぞれに視点の座標xyzを引く
3. 4点を任意の位置に平行移動
4. 描画

で解決しました。

767 名前:142 :05/02/10 22:15:59
http://ime.nu/www.sun-inet.or.jp/~yaneurao/rsp/rsp40to47.html

768 名前:デフォルトの名無しさん :05/02/11 04:02:04
誰かDirectSoudでOggを使ったストリーミングサンプルUPしてください

どうやったらWaveでもOggでも利用できるスレッド管理を作れるのか
わかりません

もう・・ストリーミング疲れてきた・・・助けて・・・(;´Д`)

769 名前:デフォルトの名無しさん :05/02/11 07:40:16
>>768
で き な い な ら あ き ら め れ ば

770 名前:デフォルトの名無しさん :05/02/11 09:17:53
丸投げすんな馬鹿。
自分の実装したコードで気に入らない部分を具体的に列挙せよ。

771 名前:デフォルトの名無しさん :05/02/11 10:43:46
>>770
してねーだろ サンプルほしいっていってるだけだっつの。
参考にするだけ

772 名前:デフォルトの名無しさん :05/02/11 11:38:38
相変わらず心の狭いやつ多いな・・・

773 名前:デフォルトの名無しさん :05/02/11 11:50:11
>>771
結果的に同じだろ…アフォか

774 名前:デフォルトの名無しさん :05/02/11 13:01:45
「サンプルないと作れません」

今までずっとパクってきたからそうなるんだよ
自分のことプログラマって思ってるんだろうけど
おまえさんはキーパンチャー

775 名前:デフォルトの名無しさん :05/02/11 16:47:12
そういうあんたはちゃんと作れるのかと小1時間

776 名前:デフォルトの名無しさん :05/02/11 18:05:23
まー結局まともにプログラミングできるやつはこーいうところこないわけで

777 名前:デフォルトの名無しさん :05/02/11 18:19:04
まともに出来ないので書き込みします。

3Dのフライトシューティングを作っているのですが、空と地面の描画(表現の仕方)についてアドバイスをお願いします。

地面についてですが、とりあえず全て平ら(又は水面)を表示してみようと思います。
現在1万x1万の四角形のポリゴンを10x10分用意して、2DのRPGのマップみたいに表示しています。
□□□
□□□ こんな感じです
□□□
高度0なら特に問題はありませんが、高高度では地面の端が見えてしまいます。

次に空についてですが、半球の内側に青色のテクスチャを貼り付けると言うのをやってみました。
半球が小さいと閉塞感があり、逆に大きいと処理が・・・。

2つともある程度の距離感があり、地面は距離が離れていても広範囲が見渡せるようなテクニックがあればアドバイスをお願いします。
検索したり本屋にいったりして調べてみましたが、この手の解説をしているところがさっぱり。
やはりほとんど限りない空間を動き回るようなゲームは難しいのでしょうか。

778 名前:デフォルトの名無しさん :05/02/11 18:24:18
フォグ

779 名前:デフォルトの名無しさん :05/02/11 18:36:03
>>777

FF11はマップ別にフィールドがあるけど
話によるとドラクエ8は 世界がすべて同じ空間上にあるらしい
(洞窟などは別として)
なのでできない問題ではないみたいですね

処理としてはやっぱり マップを複数のチップで構成して
視点の位置からRだけ離れている範囲のみを表示するといった感じに作り、
なおかつフォグでぼやかせれば うまくいくんじゃないかと。

780 名前:777 :05/02/11 18:38:48
フォグを使うと高高度では真っ白になって地面が全く見えなくなってしまいます。
霧が濃いステージという設定なら有効かもしれませんが・・・。

781 名前:デフォルトの名無しさん :05/02/11 18:53:34
>>780
それはフォグを調整すればいいだけだし・・・・・・・。

782 名前:デフォルトの名無しさん :05/02/11 19:44:48
>777
フォグとカメラのfovyあたりを調整しる
このあたりのパラメータの設定はテクニックじゃなくて
感性の問題になってくると思われ
被写界深度なんかはこの場合効果なさそうだな

783 名前:777 :05/02/11 19:50:05
ありがとうございます。
微調整を繰り返しましたがやはり高高度での遠方(地面)が見えないのですが、これは性能上の問題なのである程度は我慢するしかなさそうですね。

あとは空の描画なのですが、真上が青で地平線近くが水色のグラデーションをかけたいです。
これは半球のポリゴンに画像を貼り付けて〜といった形じゃなさそうなのですがこれでいいのでしょうか?
いいのでしょうか?って期待した結果は得られてませんが。。

784 名前:デフォルトの名無しさん :05/02/11 20:00:19
>>783

自分で返答していてなんだけど、結局2chで質問しても
まともな技術持った人のアドバイスじゃないからハッキリ言って役に立たないと思うよ
ここで質問してずいぶん論議よんだ内容が、MicrosoftのDirectXのページいって
すぐに解決したことがあったし

誰かを蹴落とすような言い方しかできないやつや、自分の力を誇示したい輩の
下手なアドバイスくらうよりは、本とかまともなWEBサイトみたほうがいいと思われ

おもしろ半分で書き込んでみるとそれなりに、にぎわって楽しいかもしれないけどw


785 名前:デフォルトの名無しさん :05/02/11 20:19:15
知ったかするから仕様的なことは聞かない方がいいけど
手法的なことは2chのが参考になると思う

786 名前:777 :05/02/11 20:43:00
アルゴリズムに正解は無いから、自分が考えている以外の考えがでると良し悪しに関係なく役立つよ。
でもここに来るのは最終手段ですが。

787 名前:デフォルトの名無しさん :05/02/11 20:44:54
>783
グラデーションがかかるように頂点カラー設定しる

788 名前:デフォルトの名無しさん :05/02/11 21:07:43
>>787
{ 0.0, Pos.y+100000.0, 0.0, 0xff0000ff },
{ 0.0, 0.0, Pos.z+100000.0, 0xffaaaaff },
{ Pos.x+100000.0, 0.0, 0.0, 0xffaaaaff },
以下略

まだ試してないけど処理落ちしそうなんですが

789 名前:デフォルトの名無しさん :05/02/11 21:21:04
グラフィックカードのレジスタに直接値を書き込むにはどうしたらいいですか?

790 名前:デフォルトの名無しさん :05/02/11 21:24:28
出刃どら各

791 名前:デフォルトの名無しさん :05/02/11 21:24:53
>789
ttp://www.geocities.co.jp/playtown/2004/psx/hw1f80j.htm

792 名前:デフォルトの名無しさん :05/02/11 21:35:23
>788
頂点バッファ使ってないの?
まぁ処理オチが気になってから頂点バッファを使うように変更してもいいと思う

793 名前:デフォルトの名無しさん :05/02/11 21:42:51
>>784
BBX荒らされてるしMS公式はネイティブの質問不可能だから
今はここしか質問するところがない。

794 名前:デフォルトの名無しさん :05/02/11 21:46:56
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄|         
 | ヤンマーニ! | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |__| ̄ ̄ ̄ ̄ ̄ ̄ ̄|マーニ! |
    ∧| ヤンマーニ! |____| ̄ ̄ ̄ ̄ ̄ ̄ ̄|     ぞろぞろ・・・・・
. . ( ゚ |_______|. ||    | ヤンマーニ! |
  / づΦ∧∧ ||  ( ゚д゚)||    |_______|ぞろぞろ・・・・・
.       ( ゚д゚)||  / づΦ     ∧∧ ||
 ̄ ̄ ̄|  / づΦ ぞろぞろ・・・・・ ( ゚д゚)||       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
ー| ̄ ̄ ̄ ̄ ̄ ̄ ̄|          / づΦ  .   | ヤンマーニ! |
_| ヤンマーニ! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄|    |_______|
  |_______|    | ヤンマーニ! |       ∧∧ ||
.    ∧∧ ||    .     |_______|   .   ( ゚д゚)||
   ( ゚д゚)||      .       ∧∧ ||           / づΦ
   / づΦ           ( ゚д゚)||
         ぞろぞろ・・・・・ / づΦ

795 名前:デフォルトの名無しさん :05/02/11 21:47:59
ごばtt

796 名前:777 :05/02/11 22:04:14
>>792
頂点バッファを直接使う機会がなかったから全てXファイルからのポリゴンでした。
頂点バッファを直接使うのってあまり重くならないのでしょうか。

・・・地面を描画する前に空を描画しちゃえば10万離れた位置に描画しなくてもよかったか('A`)

797 名前:デフォルトの名無しさん :05/02/11 22:13:18
>796
あぁD3DXMesh(だっけ?)使ってんのか
じゃ内部で頂点バッファつかってると思う
気にスンナ
それよりたしかMesh内部の頂点バッファをロックしてアクセスできたはずだから
ロックして、そこで頂点カラーを書き換えた方がいい
計算でちょちょいとできるし
最大の高さ(Y座標) maxH
最小の高さ(Y座標) minH
maxHでの色 maxC
minHでの色 minC
として、書き換えたい頂点のY座標をHとした場合
その頂点の頂点カラーCは

range = maxH - minH
h = (H - minH) / range
C = (maxC - minC) * h + minC
みたいな感じで
これそのままソースに書くなよ
あくまでも考え方として式を書いてるだけだから

まぁやりかたがよくわからんかったら空のメッシュだけライトの設定を変えたり、
テクスチャで色つけたり、マルチテクスチャでグラデ専用のテクスチャ重ねて張ったり
方法はいくらでもある
自分のできる方法でやればいい

798 名前:777 :05/02/11 22:32:52
>>797
ありがとうございます。
その頂点の座標は
         ・
    ・        ・
        |\___
 ・     .└―――`   ・    (自分がやっている方法)
           
・                  ・  こうではなく


         ・
              ・
        |\___
       .└―――`   ・
           
              ・
         ・            こういうことでしょうか?

自分がやっているのは乳首が常に上にありますが、797の方法では期待(視点)の前方に乳首がある。
んでその高さにあわせて各頂点の色を変化させていく。



799 名前:797 :05/02/11 22:46:32
いや、>797で書いたのは同じように半球を上からかぶせたのを考えてる
まぁメッシュの形が何であれ縦にグラデを入れる計算なんだが
         ・    <- Y座標maxH 色maxC
    ・        ・
        |\___
 ・     .└―――`   ・
           
・                  ・ <- Y座標minH 色minC
まぁこう指定するるんだが

800 名前:777 :05/02/11 22:51:26
ああ、リアルタイムで変えるんじゃなくて初期設定でやるんですか。
了解です〜

801 名前:デフォルトの名無しさん :05/02/11 22:58:02
>800
そうそうw
ちゃんと書いてなかった漏れも悪かた

802 名前:デフォルトの名無しさん :05/02/12 17:23:48
基本だが、天球を描くなら、
クリアするのはZとステンシルバッファのみにして、
Zバッファ無効で最初に描く。

これで少しスピードアップ。

803 名前:777 :05/02/12 19:33:17
そんな技術があるのですか、ちょいと調べてみます。

SDKのDirect3Dサンプルで400fpsやものによっては2000fpsを突破しているんですが、
自分のはせいぜい60fpsを維持するのが精一杯で・・・どうやればここまで高速化できるのかt
70個の小さなスプライトの表示だけなのに窓モードで60fpsから50fpsに落ちたり・・

804 名前:デフォルトの名無しさん :05/02/12 19:42:53
>803
最初はあまり気にするな
ずぶの初心者が作ったものがプロの作ったサンプルと同じように動作するわけがないんだから
自分なりにやっていきながら、たまにはヘルプよんだり、ネットに落ちている
ソースコードつきのサンプルを眺めたり、SDKサンプルのソース読んだりしながら
少しずつテクニックを上乗せしていけばいいだけ

805 名前:デフォルトの名無しさん :05/02/12 20:00:17
>>803
>60fpsから50fpsに落ちたり・・
どれは同期とってるからでは?

806 名前:デフォルトの名無しさん :05/02/12 20:07:12
Presentを使ってるからだと思うけど、同期を取らない描画方法ってあるのでしょうか?

807 名前:デフォルトの名無しさん :05/02/12 20:14:03
>>806
PresentationIntervalメンバだよん。

808 名前:デフォルトの名無しさん :05/02/12 20:26:09
>>807
ありがとうございます。
でもVSYNCを無視しても60〜65fps(ノ∀`)

809 名前:デフォルトの名無しさん :05/02/12 20:36:58
>>808
・・・・・・・・・・・・・・・・・・・・。

810 名前:デフォルトの名無しさん :05/02/12 21:15:52
ちゅーかVSYNCは無視するなよ

811 名前:デフォルトの名無しさん :05/02/12 21:35:17
もともと窓モードではVSYNCはかからないよ

812 名前:デフォルトの名無しさん :05/02/12 21:56:03
ああ、ごめん
サンプルが窓モードだと強制的に
D3DPRESENT_INTERVAL_IMMEDIATE
にしてただけだった。

813 名前:デフォルトの名無しさん :05/02/12 22:09:21
>>777
400fpsとか2000fpsは理論値なんで、実際にそのスピードで
描画してるわけじゃない。
モニタのリフレッシュレート以上には描画できないよ。

天空を最初にZバッファ無効で描画すると、ファープレーンを
遠くに設定しなくてすむので、Zバッファの精度も良くなる。
GeForce系はZバッファの精度がイマイチだしね。

814 名前:デフォルトの名無しさん :05/02/13 00:09:46
>>813
>400fpsとか2000fpsは理論値なんで、実際にそのスピードで
いや、そう設定すればそう動かすこともできるじゃんw
とか、言わなくていい場面であえて言って混乱するのを狙ってみる鬼。

815 名前:777 :05/02/13 01:29:46
>>814
見なきゃ良かったorz

Zバッファを有効にした状態で、座標を変えたり視点を変えたりして
SetMaterial・SetTexture・DrawSubsetをやっています。
(あと光の設定)
遠くに行こうが画面外に行こうが特別な処理をしていないのが重い原因・・?

ステンシルバッファについては使ったことが無いから今猛勉強中ですが、
1つの点に対して2重以上の描画をしないようにする手段の1つとして考えていいのでしょうか。
視覚的には何も変わらないが、余分な描画をしない分早い、と。

816 名前:デフォルトの名無しさん :05/02/13 01:56:45
>>777
ステンシルバッファは現状のキミの目的からすると、使わなくていいんでは。
まずはZバッファの有効無効と、クリッピングプレーンの調整をするのが良い。


817 名前:777 :05/02/13 02:02:40
ラジャー(`・ω・´)ゝ .oO(クリッピングレーン・・・(´・ω:;.:...  )

818 名前:デフォルトの名無しさん :05/02/13 02:27:51
>70個の小さなスプライトの表示だけなのに窓モードで60fpsから50fpsに落ちたり・・

遅くなる原因としては、
・70個ばらばらにDrawしている
・余計なレンダーステートの変更をしている
・DirectXがデバッグモード
・VCのビルドがデバッグモード
なんてゆーのが考えられます。
まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。

819 名前:デフォルトの名無しさん :05/02/13 02:46:30
>・VCのビルドがデバッグモード
これ結構ありえるよなー

820 名前:777 :05/02/13 03:00:14
> ・70個ばらばらにDrawしている
アチャ━━━━(ノ∀`)━━━━!!!!
目がつぶれてきたので後日後日。

9.0bでDrawは(画像 , rect , Scale , 回転の中心 , 回転の度合い , 描画位置 , ARGB)ですが、9.0cでは何か変わったのかな?
DrawPrimitiveUPが9.0bの形で使えればいいのですが。


821 名前:デフォルトの名無しさん :05/02/13 03:54:09
これからVisualC++7を使って、DirectXのプログラミングをするに当たって、二点質問があります。
1.2Dのゲームを作ろうとしている場合でもDirectX9.0ベースで考えるべきなのでしょうか。
  それともDirectX7.0のライブラリを使ってDirectDrawを使用すべきなのでしょうか?
2.良い参考書はありますか? 店頭ではI/O別冊が目立ちますが、どうも内容が薄いようです。
  オンラインは調べ物にはいいですが、読み物としては最悪なので紙ベースの資料(日本語)が欲しいのです。

822 名前:デフォルトの名無しさん :05/02/13 04:41:43
基本的にはご自由に。
1.Direct3Dの方が主流だから書籍とか情報源が多い。
今からわざわざDirectDraw使う必要は無いと思う。
2.王道的にDirectXのヘルプのチュートリアルで
デバイス作成から一つずつ地道に。

と大衆的意見(推測)。

823 名前:デフォルトの名無しさん :05/02/13 04:47:30
>821
>それともDirectX7.0のライブラリを使ってDirectDrawを使用すべきなのでしょうか?
DirectX9(というか8以降)ではポリゴンを使うことになるが2Dの表現は可能
ということで必ずしも2Dをやる=DirectDrawという図式にはならない

>店頭ではI/O別冊が目立ちますが、どうも内容が薄いようです。
おそらく「DirectX9実践プログラミング」あたりのことと思われるが、たしかにこれは内容が薄い
I/O別冊でもDirectX Graphicsのみを取り扱ったものがあった気がしたのだが忘れた
お勧めできる書籍がぱっとでないため、書籍選びの際のアドバイスだけ
DirectXが初めてなら
・Graphicsの比重の高い書籍
・頂点バッファ(VertexBuffer)とインデックスバッファ(IndexBuffer)の説明がある
・できれば頂点シェーダ、ピクセルシェーダの説明あり
・2Dの表示方法も説明されている、ただしD3DXSPRITEをつかわない方法の説明があること
Xファイルの表示に関してはあってもなくてもいい
とりあえずこのあたりを基準が満たされていると最初のハードルは楽に越えられるはず
しかし本選びに時間がかかって、いつまでも開始できないのは本末転倒なので
ある程度探してなければ妥協してI/O別冊でもいいのではじめた方がいい

DirectXの学習を始める前に必要な確認は自分の学習環境のPCのOS、グラボが
これから学習するバージョンのDirectXに対応できているかどうか
DirectX9なら推奨環境は、OSはWindowsXP、グラボはVertex/PixelShader 2.0対応

>822
漏れはちょっと意見が違う
ずぶの初心者はチュートリアルの前、もしくは平行して初心者向けの書籍を読んだほうが学習効率がいいと思う

824 名前:デフォルトの名無しさん :05/02/13 05:31:35
>>821
洋書だがManagedDirectX0KickStart。 samspublishingからです。

825 名前:デフォルトの名無しさん :05/02/13 05:35:22
>>823
もちろん他の情報源も必要ということが前提。


826 名前:デフォルトの名無しさん :05/02/13 05:36:24
825=822(名前欄忘れ

827 名前:デフォルトの名無しさん :05/02/13 05:43:09
最初は本買わずにSDKのTutorialやったほうがいいと思う。
極限まで簡略化してて学びやすいし分かりやすい。
んで、Tutorialを全部見終わってからレベルに見合った
本を買っていけばいいと思う。

828 名前:デフォルトの名無しさん :05/02/13 06:59:56
チュートリアルを全部やっても2Dができるようになるわけじゃない。

829 名前:デフォルトの名無しさん :05/02/13 10:27:19
2DやるならまずはSDLから入りなはれ。

http://pc5.2ch.net/test/read.cgi/gamedev/1005469181/

830 名前:821 :05/02/13 12:06:27
皆さん、お答えありがとうございます。

>>822,825
確かにDirect3Dを使った方が回転とか出来て便利みたいですね。
チュートリアルはやってみます。

>>823
DirectX9実践プログラミングだったと思います。
ひとまず、DirectGraphics主体の本を店頭で探してみようと思います。
環境周りはちょっと微妙です。Windows2000+FX5200だから・・・。
次のハード更新はPCI Expressの動向を見極めて、M/Bから一括で更新を、と思ってるんです。

>>824
これですね。
ttp://www.amazon.co.jp/exec/obidos/ASIN/0672325969/qid%3D1108263256/250-2922171-9128251
内容は分かりやすそうですね。Laoxザコンや三省堂本店で手に入らなければ、
立ち読みせずに取り寄せかamazonでいきなり購入、になってしまうのが難点ですが、検討してみます。

>>827
チュートリアルを最初にやってみようと思いますが、書籍も脇に一冊置こうと思います。
オンラインとは違って、必要なところにマークしたり出来て便利なので・・・。

>>828
当然そうだとは思いますが、HelloWorldの延長のつもりでやってみます。

>>829
便利なライブラリのようですね。


831 名前:821 :05/02/13 12:09:00
途中で送信してしまいました。
>>829
便利なライブラリは急いで成果を上げる際には良いのですが、
理解を深めるのにはあまり向かないと思うので、
他のプラットフォームを意識する必要が出てきてから
汎用的な機能を切り出すよう考えてみて、その上でライブラリの適用を考えたいと思います。

832 名前:デフォルトの名無しさん :05/02/13 12:35:57
Direct3D(今はDirectGraphicsか)の学習の仕方としては、
まず最初に三次元空間と3DCGの基礎理論を知っておいたほうが
いいんではないだろうか。いきなりカメラ座標が〜とか、
視野が〜とか言われてもワケわからんと思う。基礎を知ってると、
ヘルプのチュートリアルは分かりやすい。

本のオススメは、DirectX9シェーダプログラミングブック。
シェーダの本だけど、前半1/3くらいはDirect3D基礎と数学理論。
結構丁寧に書かれている。

833 名前:821 :05/02/13 12:51:11
>>832
カメラや照明の考え方は、3DCGツールを使っていた関係で大丈夫かな、と思います。
数学理論ですが・・・
ベクトルや行列なら問題無いですが、統計の概念が入ってくると辛いかもしれません。
ゲームを作るのが目的なのに、単純なレイトレーシングでどうにかなる物じゃないですしねえ。


834 名前:デフォルトの名無しさん :05/02/13 16:17:57
>1.2Dのゲームを作ろうとしている場合でもDirectX9.0ベースで考えるべきなのでしょうか。

2DだとスプライトをDrawPrimitiveでうまくまとめるならいいけど個別に
DrawするならDirectXじゃなくてOpenGLのほうがいいかも。
DirectXはドライバモデルが不出来でDrawにもの凄くオーバーヘッドがある。
だけどOpenGLはビデオカードメーカーがチューンし易いのでかなり高速。
DirectXではこの問題を解決するためにインスタンシングを付けたけど
nVidiaによればOpenGLはこの様な仕組みに頼らなくても高速らしい。
なのでOpenGLとキー入力やサウンド用にSDLを組み合わせるのがお勧めかも。

835 名前:777 :05/02/13 16:49:23
頭が大フィーバー状態なんですが
複数のスプライト画像を同時に表示させる場合は、
ここ(ttp://miiko0909.hp.infoseek.co.jp/program/directx/directgraphics/FVF/directgraphics_03.html)のサンプルだと
2次元配列にして
     lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,&v[0],sizeof(VERTEX));
     lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,&v[1],sizeof(VERTEX));
                              :
としないといけないのでしょうか?
あとDrawPrimitiveUPで透過色の指定の方法がどこのサイトにも書かれていないのですが、他に方法があるのでしょうか?
Drawを使っている現状ではD3DXCreateTextureFromFileExのカラーキーで指定しています(結果はpTextureに)。

836 名前:デフォルトの名無しさん :05/02/13 16:56:37
>>835
3Dには透過色の概念がない。アルファチャネルを使う。
ところで、ID3DXSpriteを使う方法はどうだい?

837 名前:777 :05/02/13 17:18:06
>>836
それだと元に戻ってるのでは。
>>818
> ・70個ばらばらにDrawしている
>まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。
という理由からDrawPrimitiveUPを使おうとしているので。

838 名前:デフォルトの名無しさん :05/02/13 17:32:40
>>835

☆3.DrawPrimitiveUPで描画☆
はスプライト毎にDrawPrimitiveUPを呼んで描くやり方

☆4.インデックスバッファ(DrawIndexedPrimitive)で描画☆
が、一回のDrawIndexedPrimitive呼び出しで全部描くやり方


プリミティブタイプ、
D3DPT_TRIANGLESTRIPとD3DPT_TRIANGLELISTの違いに注意。

839 名前:デフォルトの名無しさん :05/02/13 17:49:32
簡単にいくならTLVERTEXのvectorを用意して
そこにどんどんデータを詰めていって最後にDrawPrimitiveUP


840 名前:デフォルトの名無しさん :05/02/13 18:03:30
Meshを使うのは邪道なんでしょうか?

841 名前:777 :05/02/13 19:10:23
これって複数種類(数字0〜9など)の画像も1回で描画できるのでしょうか。
SetTextureとDrawIndexedPrimitiveを画像分繰り返さないといけないし、透過色・アルファ値の設定も入れるとDrawより処理が重くなりそう・・・。

842 名前:デフォルトの名無しさん :05/02/13 20:00:42
重くならねーっつの。ウダウダ考えてる暇があるならとにかくコードを書いて自分で試せ。

>これって複数種類(数字0〜9など)の画像も1回で描画できるのでしょうか
違う数字を表示したいなら一枚の画像に0-9の数字を入れて頂点のUV座標ずらせばいいの。

>画像ごとにSetTextureとDrawPrimitiveを繰り返さなければいけない
これは仕方が無い。マルチテクスチャでも使わない限り解決法はない。
そんなことするよりも上の方法と同様になるべく同じ画像に詰め込んだ方がいい。

>透過色・アルファ値
ちゃんと理解してるけ? テクスチャのアルファ値とそれを貼り付ける頂点のアルファ値、そして
テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?

843 名前:デフォルトの名無しさん :05/02/13 20:08:53
うーん、そこまで初心者だとOpenGL使ったほうがいいかも。
DrawPrimitive1回で4頂点分しかDrawしないなんて使い方だと
DirectXでは最悪なパフォーマンスになるよ。
それだけDirectXはAPI発行にオーバーヘッドがあるって事。
だからDrawの前にスプライトを1つにまとめるような事をしても
1回で全部描画出きるなら高速化できるってわけ。

844 名前:デフォルトの名無しさん :05/02/13 21:10:49
初心者から2D Drawの方法を奪って3Dで代用させるマイクロソフトの流儀には腹立たしい。

845 名前:デフォルトの名無しさん :05/02/13 21:39:39
>>843
え?測ったことあるの?
少なくとも俺の環境では
DrawPrimitive1回で描画しても分割して描画しても
速度に大した差は無かったよ。

>>818の人ってホントに詳しく勉強したことがあるのか怪しい。
>・70個ばらばらにDrawしている
>・余計なレンダーステートの変更をしている
普通に考えてたかだか70個程度でオーバーヘッドなんてあるわけない。
別の理由を考えたほうがいい。
レンダーステートはいくら変更しても結局DrawPrimitiveが呼ばれるまで
グラフィックボードには情報は送られない。
好きなだけ変更すればいい。

846 名前:777 :05/02/13 22:09:21
>>842
ごめんなさいorz
試しているけどDrawと配置場所が同じになるようにするのが精一杯で。
とりあえず画像を1つにまとめてます。


透明色を指定することは出来ましたが

赤赤白白 青青青青 (白は透明色)
赤赤白白 青青青青 この2つの画像を同じ位置に描画すれば、
赤赤赤赤 白白青青 赤と青の画像が表示されると思ったのですが、
赤赤赤赤 白白青青

理想      現実
赤赤青青 赤赤黒黒 (黒は背景色)
赤赤青青 赤赤黒黒 と表示されてしまいます。 
赤赤赤赤 赤赤赤赤 赤のZ値を上げて奥に表示させると青と黒(背景色)の画像しか表示されません。
赤赤赤赤 赤赤赤赤

>テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?
初めて目にした言葉なんですが、これを使わないといけないのでしょうか?

847 名前:デフォルトの名無しさん :05/02/13 22:11:47
>>845
マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
バッチ処理に関してモロに書かれてるから。
レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
十分にボトルネックになりうる。これは絶対。

ただ、>>777はID3DXSprite使ってるようなんだけど、インターフェイス見てみたら
ちゃんと内部でバッチ処理しるっぽい(9.0b以降)ので、もしかしたら
DrawXXX系の関数に変えたところで改善しないかもしんない気がしてきた。


848 名前:デフォルトの名無しさん :05/02/13 22:23:11
>>846
君さ、こんなところでくだらない質問するだけ無駄だから本買ってきなよ。
透過処理の方法ぐらい載っけてあるから。
http://www.amazon.co.jp/exec/obidos/ASIN/4875934610/

一度基本的な機能をざっと見ることも必要だよ。

849 名前:デフォルトの名無しさん :05/02/13 22:28:50
>>846
これをDrawPrimitiveの前に呼び出して逝ってみれ。(何か忘れてるかも……)

device->SetRenderState(D3DRS_LIGHTING, FALSE);
device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
device->SetRenderState(D3DRS_ZENABLE, FALSE);
device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);


850 名前:デフォルトの名無しさん :05/02/13 22:29:20
>>847
>レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
>十分にボトルネックになりうる。これは絶対。
なんねーよ。
70個程度でオーバーヘッドなんて出てたらゲーム作れねぇよ。

>マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
ああ、読んだことあるけど、実際やってみるとわかるが速度にほとんど違いは出ない。
昔書いたものを惰性でのっけてるだけと考えるのが普通だろう。

では70個で速度に差が出てしまうのはどこの部分かということだが、
俺はピクセルフィルレートが一番の原因だと思う。
70個で速度に影響がでる部分っつったらここぐらいしかない。
なぜならピクセルフィルレートに関しては昔からほとんど速度が上がっていない。


851 名前:777 :05/02/13 22:41:30
>>848
この本持ってたかも。
探してみます。

>>849
ありがとうございます。
ちゃんと透過できました。
ほんとお手数かけましたm( __ __ )m


852 名前:デフォルトの名無しさん :05/02/13 22:56:27
>70個程度でオーバーヘッドなんて出てたらゲーム作れねぇよ。

確かに70個でボトルネックにはならないかもしれんがDirectXでは
DrawPrimitiveのオーバーヘッドが異常に大きい事をマイクロソフトも
認めている。だから70個ならまだいいが数百個なら耐えられなくなる。
こんな事試した奴らならわかりきってるだろ?
それからたかが70個のスプライト程度でフィルレートが問題になる事はない。

853 名前:デフォルトの名無しさん :05/02/13 23:01:57
>>850
PC環境とパフォーマンスに対する考え方の違いかね。
バッチ処理でFPSが5も挙がればそりゃ十分にボトルネックだ。

バッチ処理を惰性で掲載してるってことはねえだろ。
NVIDIAの新めの資料にも言及されてるくらいだし。
むしろGPUの速度が上がるほどAPI発行の無駄は大きくなるはず。


854 名前:デフォルトの名無しさん :05/02/13 23:04:38
ROMってる初心者なのですがちと混乱してきたのでお聞きしたい。
皆さんが言ってる「Draw」ってID3DXSprinte::Drawのことですよね?
DrawとDrawPrimitiveUPは毎回ボードにデータを転送するやり方だから重い。
DrawPrimitiveは頂点バッファを使っているので転送のオーバヘッドがなく軽い。

DrawPrimitiveUP1回で描画しようと思ったらD3DPT_TRIANGLELISTで構造体に頂点を順番に格納して
複数のキャラクタを描画することができる だと思うのですが、Draw1回で複数分の描画って、どのようにやるのですか?

DrawPrimitive1回で済まそうと思うと、毎回バッファをLockUnLockするのですか?それはそれで重そうなのですけれども。

855 名前:デフォルトの名無しさん :05/02/13 23:10:14
ま、あれだ
本来順序良く学んでいけば解決できる問題も
「コレがしたい」と思って途中をおろそかにして、そればかり追っていくと実は遠回りになる
とりあえず機能全体を把握した上で、それらを応用してどうできないかを
考えた方がいいと思う
たとえ一見自分のやりたいことには関係のない機能も
応用したり組み合わせたりすればなにかに使えるかもしれないし


856 名前:デフォルトの名無しさん :05/02/13 23:11:28
>>852
なんだよDrawPrimitiveのオーバーヘッドって。
何と比べてどれくらい重いのか数字だしてから言えよ。

70個での話をしてるのに数百個の話もちだして馬鹿なのか?お前。

それにピクセルフィルレートに個数は関係ない。
例え5個のモデルしか描画しなくてもZバッファ無しでそれぞれのモデルが
全画面を覆いつくすような描画をしたら処理落ちは始まる。
こんなことも知らないのか?
お前、大丈夫か?

857 名前:デフォルトの名無しさん :05/02/13 23:13:59
>>854
そんなところ速度に関係ないって馬鹿だな。

858 名前:デフォルトの名無しさん :05/02/13 23:20:05
DirectXのDrawが重たい話については次のWindowsであるLonghornで
改善される予定になっている。しかしDirectXは9で最後なので
LonghornになったらWGFでプログラムし直し。
それを考えればDrawのオーバーヘッドが少ない高速なOpenGLで
設計しておいたほうが無駄がない。

859 名前:デフォルトの名無しさん :05/02/13 23:22:26
>例え5個のモデルしか描画しなくてもZバッファ無しでそれぞれのモデルが
>全画面を覆いつくすような描画をしたら処理落ちは始まる。

スプライトと言っている時点でそんなサイズで話する奴がいるかボケ。
普通に考えろよ?70個のスプライトでフィルレートが問題になるか?

860 名前:デフォルトの名無しさん :05/02/13 23:23:50
>>858
だからどれくらい差があるんだよ。

861 名前:デフォルトの名無しさん :05/02/13 23:26:39
>>859
だからその描画するときの画面に締めるスプライトのでかさによるだろ。
ホンっとアホだな。
腹が立ってくるよw

862 名前:デフォルトの名無しさん :05/02/13 23:31:21
>>854
あー違う違う。頂点バッファを使うかどうかはここでは関係無いよ。

ポリゴンを100個描画するのに、
DrawPrimitiveUPに1個のポリゴンデータを渡して100回呼び出すか、
DrawPrimitiveUPを100個のポリゴンデータを渡して1回呼び出すかの違い。

>>856
俺は>>852じゃなくて>>847なんだが、70回程度でボトルネックは言い過ぎだね。
GeForce2MXなんてショボイの使ってる俺が悪かった。
DrawPrimitiveのオーバヘッドに関しては、とりあえず君の環境でも
スプライトを1000個なり2000個なりで試してもらえないかな?
それでも考えを変えないようなら沈黙いたしますよ。

863 名前:777 :05/02/13 23:36:28
    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|  ・・・。
  |   ,,ノ(、_, )ヽ、,, .::::|    
.   |   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/    
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||

864 名前:デフォルトの名無しさん :05/02/13 23:37:43
>だからその描画するときの画面に締めるスプライトのでかさによるだろ。

だからそのスプライトのでかさが画面全体を占めるってのはお前の
勝手な妄想だろボケが。自分の都合のいい設定でしか話ができんのかお前は?
スプライト70個出して遅いって言ってる奴にフィルレートのせいだよって
言うバカはいねぇ。

865 名前:854 :05/02/13 23:40:07
>>862
d。理解力なくてスマソ

866 名前:デフォルトの名無しさん :05/02/13 23:43:23
>>863
なんだよ。
1000個も2000個も描かなきゃ差がでないオーバーヘッドの話を
なんで70個の話のときに出すんだ。だからお前はアホだっていうの。

>>864
そうかい?
俺は初心者のやったことだからてっきり画面にくまなくスプライトを
70個描画したと考えたんだけど。
もちろん画面全体とまではいかなくても1個1個のピクセルフィルレートはかなり大きいとみてるがね。

867 名前:デフォルトの名無しさん :05/02/13 23:53:57
>なんだよDrawPrimitiveのオーバーヘッドって。
>何と比べてどれくらい重いのか数字だしてから言えよ。

この人はオーバーヘッドという言葉の意味を誤解してるっぽい
だから「ボトルネック」の話をしてる人と会話が合わないんだと思う

868 名前:777 :05/02/13 23:55:52
数間違えてますた
60x2のビットマップを174個    (+他の画像や3Dの機体)
アスロン64 3200+  ゲフォ5950で有:平均90fps、無:平均109fps
製作しているマシンでは有:平均64fps 無:平均71fps    です。

869 名前:デフォルトの名無しさん :05/02/14 00:01:03
>>867
なんでそうやって人を無知扱いしたがるのか。
http://www.nifty.com/webapp/digitalword/word/009/00931.htm

どうして俺の発言よんで意味を知らないなんて発言に至ったのか是非聞きたい。

870 名前:デフォルトの名無しさん :05/02/14 00:03:45
少し遅いレスだが、
【書籍版】DirectX9実践プログラミング
はいい本だと俺は思ってる・・・・。

書物の話で、いままでそれなりの数見てきたがDirectX初期化が一番詳しく、頂点バッファ・インデックスバッファと
シェーダに関しても乗ってて、初心者がかじるには一番おいしい本だと思うのだが・・・

871 名前:デフォルトの名無しさん :05/02/14 00:07:34
やっぱり理解してないな・・・
そのページをあと100回良く読んでみろ

872 名前:デフォルトの名無しさん :05/02/14 00:08:20
>>871
説明できないからって意味ありげなレスつけて逃げないでね。
お願いだから。

873 名前:デフォルトの名無しさん :05/02/14 00:08:42
久しぶりにこのスレ盛り上がってるね。
いいよいいよ〜 (・∀・)

874 名前:デフォルトの名無しさん :05/02/14 00:08:57
クイズしたがる人ってうっとおしいよね

875 名前:777 :05/02/14 00:22:43
地震キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!

876 名前:デフォルトの名無しさん :05/02/14 00:24:15
オーバーヘッド
・頭上の. 転じて "頭上でのやり取り", "直接の目的以外で使われるもの" の意.
・コンピュータ用語として, 本来の目的以外の処理によるCPU負荷や, ネットワークで
バックグラウンドでのやり取りや変換処理等による転送負荷, 予定外の作業による人的負荷などの意味で使われる.
・元々オーバーヘッドという語は "裏での処理" 的な意味で, これによる負荷を言うなら,
正しくは "オーバーヘッドによる負荷" と表現すべきであるが, 実際のところ
オーバーヘッドな処理は大抵は負荷にしかなってないか, さもなくば負荷になるときしか
認識されないので, 負荷の意で捉える事自体は大きく間違っているわけではない.


877 名前:デフォルトの名無しさん :05/02/14 00:26:21
大阪、神戸

878 名前:デフォルトの名無しさん :05/02/14 00:35:24
>>842=847=849=853=862俺ね。
アンカーつけねえから話がこじれるんだな。

別に>>777のデモのパフォーマンスがDrawXXX系の呼び出し回数のせいでガタガタになっている、
というんじゃなくて、DrawXXX系の関数のオーバーヘッドを無視していいかのような>>845のレスに
反応しただけなのね。少なくとも俺の環境じゃ70回の呼び出しでも目に見えて遅くなるし。
たった1000回の発行で顕著になるオーバヘッドを本当に無視できんのか、というのが>>862の趣旨ね。


>>777
ごめんねえ。だから君のデモに関する良い知恵があるわけじゃないのね。
でもDrawPrimitiveの呼び出し回数は少なくするべきなのは憶えておいてね。
スプライト以外でもバッチ処理ってのは重要だから。

879 名前:デフォルトの名無しさん :05/02/14 00:49:05
オーバーヘッド。ヤバイ。超ヤバイ。
何がヤバイって、回数が増えると超増える。増えまくり。
でも、回数が少ないときは関係ない。わかるやつだ。

880 名前:デフォルトの名無しさん :05/02/14 00:52:19
>無視できんのか
できる、できないのどちらでも取れるような言葉使いはやめろとあれほど(ry

881 名前:777 :05/02/14 00:53:06
>>878
了解です

882 名前:デフォルトの名無しさん :05/02/14 01:16:30
http://www.t-pot.com/program/125_GlMesh/

OpenGLもVBOとかいう新機能で描画を高速に出来るらしい。
9でおしまいのDirectXから乗り換えるいい機会かも。

883 名前:777 :05/02/14 01:33:25
半端な知識に肉付けしていく段階だし、いっその事OpenGLを1から勉強しようかな・・・
DirectXからOpenGLに移行するにあたってデメリットってありますか?
関数が違うとかは除いて、3Dの描画が苦手とかフォグが使えないとか(これは大丈夫だと思うけど)

884 名前:デフォルトの名無しさん :05/02/14 01:40:01
>>878
はぁ?
1000回も呼び出さなきゃでねぇような違いがどうして重要なんだよ。
ホント、ハゲだなオメーはw
そんな馬鹿だから、70回でオーバーヘッド発生してるようなグラボつかまされんだぞ(笑)

885 名前:デフォルトの名無しさん :05/02/14 01:45:36
MSの担当に
「DrawPrimitiveファミリ呼び出しは100回に押さえろ」
と言われた。

いや、MMOでそりゃ無理だろ・・・

886 名前:885 :05/02/14 01:50:21
× 押さえろ
○ 抑えろ

恥ずかしい・・・

887 名前:デフォルトの名無しさん :05/02/14 01:52:42
>>883
お前も救いようがないなw
まず、観察眼が絶望的に足りない。
そもそも>>777でいっている閉塞感はプログラム的な問題じゃない。
すべての3Dゲームは処理的には箱庭しか作れない。
広大にみえるようにしてるだけ。
フライトシミュなんかで使われてるようなのは昔はスカイボックスとか
スカイドームとか呼ばれていたが今はぐぐってもまったく情報が出てこないな。
プログラム的にはスカイボックスorドームの親座標をカメラにするだけだ。
あとは箱庭とのつなぎ目をフォグ等で誤魔化すかしかない。
これで閉塞感があるならそりゃスカイボックスorドームの絵がショボイってただそれだけだろ。

888 名前:777 :05/02/14 01:55:02
空・地面の描画以前に機体2機+画像で60fpsギリギリなんですg orz

889 名前:821 :05/02/14 02:04:57
>>834
そういえば、OpenGLは選択肢にしてませんでした。
どんな機能があるのか、一切調べてないので、合わせて調査してみます。

890 名前:デフォルトの名無しさん :05/02/14 02:10:12
>>888
Zバッファ使ってちゃんと前から描いているか?
何度もいうけどPCではピクセルフィルレートが一番ネックになる。

機体2機はわかるけど画像は何を指しているの?
画面を占める割合でかなり重くなるよ。

891 名前:デフォルトの名無しさん :05/02/14 02:17:19
>DirectXからOpenGLに移行するにあたってデメリットってありますか?

そんなのどこがデメリットと思うかは個人差。GLSLをやるための資料が少ないとか
そんなのなら海外であされば出てくるしなんとでもなる。
それにゲーム業界で働く場合を考えたらDirectXなんてMSのゲーム機でしか
使わないし、PS3やその他のハードがOpenGLらしい事を考えるとメリットの
ほうがでかい。OpenGLならLonghornに乗り換えてもそのまま使える。

892 名前:777 :05/02/14 02:21:20
SetRenderState( D3DRS_ZENABLE, TRUE );
これですよね?
別にそれほど画面を占領しているわけではないけど、やはりDrawで200弱を画面内外関係なしで描いているからでしょうか。


893 名前:デフォルトの名無しさん :05/02/14 02:22:40
>>892
画面外ならDrawするなよ。バウンディング球でも使ってクリップしろ。

894 名前:デフォルトの名無しさん :05/02/14 02:23:33
DirectXだと3Dサウンドがそのまま使えるってところか。
音のミキシングできるのって結局DirectSoundしかねぇのに
わざわざOpenGL使って苦労してる奴ってやっぱりかっこ悪いじゃん。
これはまあPCで組む場合だけだけど。

895 名前:デフォルトの名無しさん :05/02/14 02:24:58
>>892
カメラに近い方からちゃんと描いているかどうかも重要だぞ。

896 名前:デフォルトの名無しさん :05/02/14 02:33:20
>音のミキシングできるのって結局DirectSoundしかねぇのに

SDLを使え。
http://www.tsg.ne.jp/text/2002/sdl-opengl/

897 名前:デフォルトの名無しさん :05/02/14 02:41:44
http://www.openal.org/

3Dサウンドはこんなのもあるらしい。

898 名前:777 :05/02/14 02:42:23
皆さんレスありがとうございます。
DirectXと並行にOpenGLも勉強してみたいと思います。

>>895
現状はスプライトDrawだからカメラとか関係ないぽ。
早いとこ変えないといけないんだけど、ビルボーディングのやり方をすっかり忘れたのd
(常に一定の位置・大きさ・形にするにはこの方法を使います・・よね?)

899 名前:デフォルトの名無しさん :05/02/14 02:46:42
>>898
いや、だからあるんだよ。
描画する限りないわけないの。
スプライトだって上になるものと下になるものがあんだろ?
これを描画の順序で決めちゃいけないのが3Dなんだよ。

しかし、αが使われてる物に関しては別でこれは後ろから描画しないといけない。

900 名前:777 :05/02/14 02:57:09
スプライトDrawのどこに3Dを扱っているのかが・・
スタンプ(貼り絵)みたいに下から(カメラから遠い?)ものから描画してます。

勝手に変数を入れてるけど
pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,RotationAngle,&vec2Position,ARGB);
これって2Dじゃなくて3D・・・?

901 名前:777 :05/02/14 03:13:00
画像全部とデバッグ用の文字を消したら、平均90fpsが平均670(一時的に1150)fpsまであがったよ、ママン(´・ω・`)

902 名前:777 :05/02/14 03:16:18
追記:20万四方の地面を消したら平均1050fps(´・ω・`)

903 名前:デフォルトの名無しさん :05/02/14 03:20:17
>>901
あははははははッ。それ9.0以前のSDKだろ。
そのころのID3DXSpriteとID3DXFontは糞遅いので有名。
文字列描画はサンプルフレームワークのCD3DFontを使いなはれ。
すっかり忘れてたけど、これスプライト実装の参考になるから。

904 名前:デフォルトの名無しさん :05/02/14 03:26:43
>>891
>OpenGLならLonghornに乗り換えてもそのまま使える。
ソースは?というか実装どこだ

905 名前:777 :05/02/14 03:30:33
9.0bだけどそこまで重いのか、って現にfpsに差があるわけで(´・ω・`)
> すっかり忘れてたけど、これスプライト実装の参考になるから。



906 名前:デフォルトの名無しさん :05/02/14 03:53:01
スプライトってHUDに使ってんじゃないの?
だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
画面座標で描けるし速い。

907 名前:デフォルトの名無しさん :05/02/14 04:27:18
てか、自前でいっぺん描写からやりなおしたほうがよくないか?

908 名前:デフォルトの名無しさん :05/02/14 10:40:32
D3DXに無駄に高レベルな関数が用意されているのがそもそもの問題。
Sprite系とXFile系は必要ない。

909 名前:デフォルトの名無しさん :05/02/14 10:46:25
>>901
GDI使ってたんじゃないの?それだと遅いよ。

910 名前:777 :05/02/14 22:21:28
この連休外に出ていないのにインフルエンザにかかった自分の体に小一時間問い詰めたい・・
なんか色々混乱してて質問死に来たけど何を質問しに来たのか忘れt
Googleがいつもと違うように見えるしもうだめp

911 名前:777 :05/02/14 23:06:12
すいません、思い出しました。
>>906
その通りです。
>だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
>画面座標で描けるし速い。
これは
┌――┐←適当な座標に描いて
|   |      
|   |      
└――┘
     _ ←ワールド・ビュー・射影トランスフォーム後
/ ̄ ̄/      機体などを描画してから頂点のスクリーン座標を取得。
 ̄ ̄ ̄       描画したいスクリーン座標に頂点を持ってくるのを画像数×4点行い、画像の描画  ということでしょうか?


912 名前:デフォルトの名無しさん :05/02/15 00:00:27
>>911
質問するのは最低限、チュートリアルを終わらせてからにしてくれ。
そんな質問をする必用が無くなるから。

913 名前:878 :05/02/15 00:23:40
なんかヘンなこと書いてるな俺。DrawPrimitiveのオーバヘッドが顕著になるのは
CPUとドライバのせいであってビデオカードが原因じゃねえや。
GPUの速度が上がるほど無駄が大きくなるって自分でも書いてるし、阿呆か。

わかりやすいグラフも追加ー。
ttp://mirror.ati.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf

914 名前:デフォルトの名無しさん :05/02/15 00:24:10
>>911
つか、マジでDirectX実践プログラミングを全部終わらせてくんね?
お前邪魔じゃん。マジで。
レベル低いとか高いじゃなくてお約束を知らない状態が面倒なんだよ。
1人でこつこつやる時期ってのも必要なんだよ。

お前、この状態→>>911じゃ駄目だろ。

915 名前:デフォルトの名無しさん :05/02/15 00:26:00
ID3DXSprinte::Draw・・・スプライトごとに呼ぶとすごいオーバーヘッド。しかも1回の描画で全スプライトを
                  描画できない。よって使うな。
DrawPrimitiveUP・・・・・プリミティブごとにすごいオーバヘッド。描画するなら構造体に詰め込んでD3DPT_TRIANGLELISTで
                  1回の呼び出しで全描画。

ってことですよね?DrawPrimitive・DrawIndexedPrimitiveは頂点バッファを使うので高速だが、
バッファのLockUnLockを頻繁に行うようだとパフォーマンスが低下する
という認識でいいのでしょうか?

916 名前:デフォルトの名無しさん :05/02/15 01:30:03
最新のDirectXがDown出来るけどとうとうWin2Kのサポート打ち切られた
らしい。しかもWinXPの正規ユーザーしか落とせない制限付き。
さらにDirectXは9で終わりでLonghornではWGFときては作り手としては
翻弄されまくり。

917 名前:デフォルトの名無しさん :05/02/15 02:07:57
リリースノート見たけど本当にWin2Kはサポート打ち切られてる。
あとWGFについてはspinに記事があった。
http://216.239.57.104/search?q=cache:Yo9Cbw6ZW4EJ:spin.s2c.ne.jp/news0406.html+WGF&hl=ja&lr=lang_ja
APIは大幅に変わりそう。

918 名前:デフォルトの名無しさん :05/02/15 02:08:08
>>914

すでに >>912 がいっている。
便乗して同じことをだらだらというやつも邪魔に感じるんだが。

919 名前:デフォルトの名無しさん :05/02/15 07:27:47
>>918
ふっ、俺みたいな翻訳機は初心者スレでは普段は重宝されるんだよ。
例えばチュートリアルなぞ初心者には普通に読めん。
>>912の内容だと初心者には「だからチュートリアルは難しいよ」って思わせるだけだ。
しかし、質問スレにいる奴等は馬鹿だからDirectXの入門書が売れる理由がわからないので
「初心者にDirectXのヘルプのチュートリアルが難しい」のが理解できない。
これを理解している俺がチュートリアルではなくDirectX実践プログラミングを勧めてるところを評価してほしいね。

920 名前:デフォルトの名無しさん :05/02/15 07:36:14
チュートリアルよりDirectX実践プログラミングのほうが難しいのですが。

921 名前:デフォルトの名無しさん :05/02/15 07:40:57
>>920
レアものだな。
しかし、日本は民主主義。
少数派にまわった奴へのサポートは充実してないんだよ。
まあ、諦めて吊っとけや。
今度生まれてくるときにはDirectX実践プログラムもわかりやすくなってると思うよ。

922 名前:デフォルトの名無しさん :05/02/15 08:14:35
一応、入門書5冊買って比べてるんだが。
ちなみに古い方な。緑色の。
新しいのはちょっとはまともになったのか?

923 名前:デフォルトの名無しさん :05/02/15 09:16:34
チュートリアルは必要最小限のコードで、かなり分かりやすく説明されている。
読めないのではなく読まないの間違いだろう。

924 名前:デフォルトの名無しさん :05/02/15 20:23:11
>>922
ちょっとした事情により緑も青も両方持ってるのだが
内容が若干追加されてるだけで
文章や説明の仕方が見直されてるわけじゃないので
分かり易くなったりはしていない

925 名前:デフォルトの名無しさん :05/02/15 20:34:06
あの本って買う価値あるか?
チュートリアルの方が分かりやすいと思うんだが。

926 名前:デフォルトの名無しさん :05/02/15 23:05:20
>925
読みさすさだったり、とっつきやすさは個人差があるからな
どちらが絶対にいいとは言えないからな
漏れは日本語ネイティブが書いた文章と翻訳された文章と2つあったら
日本語文章の方がいいなぁ

927 名前:デフォルトの名無しさん :05/02/16 00:23:56
チュートリアルと実践プログラミング以外にも選択肢はあるぞ。

928 名前:デフォルトの名無しさん :05/02/16 01:15:13
実践は8のも9のも持ってるが、9はかなりマシになったと思う。
ゴミのような書籍もある中、9の実践はかなりまともな本だと思うぞ。
俺はね。

929 名前:デフォルトの名無しさん :05/02/17 03:20:06
DirectInput極めたいんだけど何かいい本ある?

930 名前:デフォルトの名無しさん :05/02/17 07:57:15
>>929
なぜ「本」なのか・・・サンプルとヘルプ以外に何が必要なのか・・・。

931 名前:デフォルトの名無しさん :05/02/17 08:12:11
ヘルプにDirectInputのこと何も書いてなかったよ。

932 名前:デフォルトの名無しさん :05/02/17 08:58:52
>>929
極めるんだろ? 本なんかに頼ったら本を書いた香具師ほども極められないと思うぞ。

933 名前:デフォルトの名無しさん :05/02/17 09:13:18
DirectInput なんてサンプル読めばすぐだろ。

934 名前:デフォルトの名無しさん :05/02/17 09:35:27
2004OctのヘルプにはDirectGraphicsしか載ってねえんだな。そういえば。

935 名前:デフォルトの名無しさん :05/02/17 09:53:39
うわ、見事にごっそり抜け落ちてる。
いままでD3Dのヘルプしか見てなかったから全然気が付かなかった。
こうなると旧SDKは保存しておかないと泣きを見る訳か。

936 名前:デフォルトの名無しさん :05/02/17 12:35:08
DirectX7の日本語ヘルプは存在するのでしょうか?
以前、アドバイスを貰いいくつか書籍を買ってみたのですが
どれも英語ヘルプのみ収録されていました。
日本語ヘルプが出たのはいつ頃か、いつ頃以降の書籍なら
収録されている可能性が高いのか教えてください。

937 名前:デフォルトの名無しさん :05/02/17 13:55:59
>>936
Extrasをダウンロードすれば入ってなかったっけ?

938 名前:デフォルトの名無しさん :05/02/17 14:05:36
Summer2003のExtrasフォルダに[7.0][8.0][8.1(en)][9.0]が揃ってる。
収録されている書籍は[DirectX9シェーダプログラミングブック][Cmagazine2004-01]。
あとはシラネ。
Summer2004のExtrasには確か無かったハズ。

939 名前:デフォルトの名無しさん :05/02/17 16:19:34
>>937
今ダウンロードできるものには含まれてないようです。

>>938
DirectX9シェーダプログラミングブックを買ってきました。

ありがとうございました。

940 名前:デフォルトの名無しさん :05/02/17 19:35:17
DirectSound で 2秒間のバッファを作り
IDirectSoundNotify8 で その0秒目、1秒目にイベントを設定して、
別スレッドのWaitForMultipleObjectsでキャッチしてます

ところが、ResumeThreadを実行すると、一度に2秒分ぐらい制御が返ってきます
つまり、Suspend と Resume を繰り返すとどんどん音楽が早送りに・・・><;

ファイルからデータを読み取るログをとってみたんですが、やはりResume を行うと
1秒間の内に2秒分のデータを読み込んでしまっているようです

WaitForMultipleObjectsの動作が怪しいきがするんですが
分かる方いますか?

941 名前:デフォルトの名無しさん :05/02/17 20:48:43
>940
よくわからんが、ストリーミング再生用スレッドに
ResumeThreadとSuspendThreadなんてどこで使うの?

942 名前:デフォルトの名無しさん :05/02/17 21:02:11
>>941

一時停止と 停止に使うよ

943 名前:940 :05/02/17 21:11:37
再生時
pBuffer->Play( 0, 0, DSBPLAY_LOOPING );
ResumeThread( m_hThread );

停止時
pBuffer->Stop();
SuspendThread( m_hThread );

別スレッド
while( 1 ) {
DWORD n = WaitForMultipleObjects( 2, m_hEvent, FALSE, INFINITE );
switch ( n ) {
case WAIT_OBJECT_0:
// 後半書き込み処理
break;
case WAIT_OBJECT_0 + 1:
// 前半書き込み処理
break;
default:
ExitThread( TRUE );
}
}




944 名前:940 :05/02/17 21:12:20
>>943

ファイルをオープンするときに、データの前半を読み込んでおいて
あとはスレッドでストリーミングって感じです

WaitForMultipleObjectsが1秒間の内に2回 制御を返しているのが
原因だと思うんですが、なんでそうなるのかわかりません

それと読み込んだばかりのときにPlayを行うと普通に再生されますが
一度停止したあとに、Playをするとぶちぶち音が・・・

話によるとプライマリバッファが再生されていないことが原因らしいので
とりあえず無音データをつめこんで、再生させてみましたが変化ありませんでした

早送りとなにか関係があるのかな。。。

945 名前:デフォルトの名無しさん :05/02/17 21:44:23
そのコードだけじゃよくわかんねーな。
Stop()で停止してればWaitForでスレッド待機してるから
別にSupend/Resumeは呼ぶ必要ないんじゃないの? 設計次第だろうけど。
音とびするのはイベント取りこぼして禁止領域に書き込んじゃってる可能性あり。
ちゃんとGetCurrentPositionで確認してる?

946 名前:デフォルトの名無しさん :05/02/18 01:05:37
とりあえずResumeとSuspendは要らない。
あとは「DirectSound ストリーミング」とかでググって、既知のNotifyのバグを調べる。

947 名前:デフォルトの名無しさん :05/02/18 01:18:53
はやくWGFでねぇかなぁ。DirectXはもうダメだ。

948 名前:940 :05/02/18 13:38:45
うおおおおおおお!
ストリーミングでけたどーー!!

いやーいろんなことして本当に苦労した

結局バッファ作成のときに設定したフラグが問題だったっぽい
DSBCAPS_LOCSOFTWARE を加えたら正常に動作した

こーいうのマイルよまじで。。。

同じ問題で苦労した人いなかったのかな ぼそ

949 名前:デフォルトの名無しさん :05/02/18 13:57:33
サウンドカードが対応していて、ちゃんと作ってあれば、
DSBCAPS_LOCHARDWAREでもちゃんと動く。

950 名前:デフォルトの名無しさん :05/02/18 15:28:38
>>949

ちゃんと動く場合もあるってなだけで
動かない場合があるから発見に苦労するのよ

951 名前:デフォルトの名無しさん :05/02/18 15:34:51
>>950
いや・・・・普通ソフトウェアバッファだから。

952 名前:デフォルトの名無しさん :05/02/18 15:43:30
stop()した後もイベント飛んでくるから、
Suspendしちゃ駄目

953 名前:デフォルトの名無しさん :05/02/18 18:25:41
>>951
べつにソフトウェアバッファのことだけ いえることではないんだが?
DirectX全般 どのハードウェアでも動くようになっていなくて苦労するんだがw

954 名前:デフォルトの名無しさん :05/02/18 18:28:23
質問です〜。

DirectInputって、普通キーボード入力を GetDeviceState で取りますが、
逆に、コードで書いた文字をDirectInput経由でOSに送ることできますか?
(キーボード入力代行)

DirectInput使わなかったら、APIのkeybd_event("user32.dll")とかで
できるんやけど・・・。 DirectInput使う要件があるので・・・。
どなたかご存知の方、よろしくお願いします。

955 名前:デフォルトの名無しさん :05/02/18 22:36:25
>>953
ハードウェアが対応してるのか調べてから機能を使うでしょ普通は


956 名前:デフォルトの名無しさん :05/02/18 22:39:40
ユーザー側に選択権を与えればいいだけの話。

957 名前:デフォルトの名無しさん :05/02/18 23:26:43
仕事をおしつけるとも表現する

958 名前:デフォルトの名無しさん :05/02/19 00:42:09
まぁでも、940のはソフト側の不備だろう

959 名前:デフォルトの名無しさん :05/02/19 02:00:05
マー結局苦労するわけだ

960 名前:デフォルトの名無しさん :05/02/19 07:41:53
>>954 無理

961 名前:初心者です :05/02/19 14:46:46
はじめまして。
Visual Studio .NET 2002を使っています。
DirectXプログラムを勉強しようと思いました。
そこで、少しネットで検索などして調べてから、MicrosoftのHPから
Runtime、SDKなど、一応全て最新のDirectX9の関係のものを
ダウンロードしてインストールしました。

DirectX9のサンプルをコンパイルして実行しようと
すると、
「 Switching to the reference rasterizer,
a software device that implements the entire
Direct3D feature set , but runs very slowly. 」
というエラーメッセージが表示されて、サンプルは実行できるの
ですけど、ものすごく遅いのです。
この原因は何なのでしょうか?
よろしくお願いします。


962 名前:デフォルトの名無しさん :05/02/19 14:57:17
>>961
ビデオカードの性能が足りていない

963 名前:初心者です :05/02/19 15:18:17
>>962
 回答ありがとうございます。
 古いビデオカードはやっぱりだめなんですね。
 お金がないので、無理して使ってたんですけど・・・。
 これからビデオカード買いに行ってきます。
 予算が無いんですけど、頑張って5000円ぐらいの
 買ってきます。
 ありがとうございました。


964 名前:デフォルトの名無しさん :05/02/19 19:29:49
>963
5000円で何のグラボ買うつもりだ?


965 名前:デフォルトの名無しさん :05/02/19 21:44:19
>>964

GetForce2MX以上は買えるよ

966 名前:デフォルトの名無しさん :05/02/19 23:11:20
7000円あればGeForceFX5200買えるだろ。
5000円レベルでも来年ならDirectX9cに対応してるかも。

967 名前:デフォルトの名無しさん :05/02/20 00:17:12
ストリーミング再生を 1ループで終わらせたい場合は
データを読み込んだときに 最後まで読み込んだか を調べて
最後の書き込みは 無音データをつめこんでから 書き込んで
pBuffer->Play( 0, 0, 0 ) とループしないように設定しなおす
といった面倒な方法でしか実現できないんでしょうか。

無音データを入れる理由は 最後が途中で終わる場合があるため。

968 名前:デフォルトの名無しさん :05/02/20 00:59:15
>967
任意のポイントで止める方法は無いはずだから、それで良いんじゃない。

俺はループを止めるんじゃなくて、
GetCurrentPosition()で再生位置を調べて、終了位置を越えてたらStop()としてる。

969 名前:デフォルトの名無しさん :05/02/20 01:06:19
ここで止めたいって場所でNotify仕込みたいところだけど、
再生中は設定できなくて、昔ムカついた記憶があるなあ……。

970 名前:デフォルトの名無しさん :05/02/20 01:23:40
>>968

GetCurrentPositionはいつ調べるんですか?
スレッドの中だった場合、かならずストリーミング再生なので最初にきめた
刻みごとにしか実行されないですよね
WaitForMultiなんたらで処理がストップしてしまうため

main loop に記述するのもひけるし・・・


971 名前:デフォルトの名無しさん :05/02/20 06:09:50
>970
頃合いを見て、再生スレッドをイベント待ちからポーリング監視に切り替えてる。

972 名前:デフォルトの名無しさん :05/02/21 01:33:48
DirectXのゲーム画面を取り込むスクリーンキャプチャを作りたいんですが、
どうしたら良いでしょう?
非DirectXなら GetDC(NULL) でスクリーンのデバイスコンテキスト取得して
ごにょごにょで何とかなったんですが、DirectXの場合はどうしたものやら。

973 名前:デフォルトの名無しさん :05/02/21 02:48:24
GetFrontBufferData

974 名前:デフォルトの名無しさん :05/02/21 17:01:14
DirectX敷居高杉。
EasyLinkLibrary使ってもコンパイルすらできないぜ。
おまいら頭いいな。

975 名前:デフォルトの名無しさん :05/02/21 17:52:17
Microsoft Visual C++ Toolkit 2003しかもっていないのですが、それをつかってDirectXのプログラムの作成方法を解説してあるサイトとかはありますか?
つまりその、Visual C++なしでやりたいのですが。

976 名前:デフォルトの名無しさん :05/02/21 17:58:30
VC++なくても、コンパイルするためのコマンドラインが解れば、
普通に検索して出てくるページのコードが活用できるだろう。

もしくは、VC2005を落とす。

977 名前:デフォルトの名無しさん :05/02/21 18:06:59
やり方わかんないです
教えてください
泣きそうです
1. freecommandlinetools.exe を実行します。無料の C++Builder 5
コマンドラインツール開発システムをインストールしたいドライブと
フォルダを選択します。

2. インストール先の bin ディレクトリで次の手順を実行します。
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"

978 名前:デフォルトの名無しさん :05/02/21 18:40:16
>>974
VC++さえ買えばコンパイルはできる
いきなりラッパーライブラリを使うと余計難しい

>>975
プログラムの作り方は同じ
nMakeの使い方覚えろ

>>977
Cマガジン買え

979 名前:デフォルトの名無しさん :05/02/21 18:49:39
>>977
何が解らないの解りません。

ところで、
次スレをそろそろ立てたほうがよさそうだな。

980 名前:デフォルトの名無しさん :05/02/21 20:18:25
学生なら visual studio .net spoke というものが安くていいよ
社会人になったら10万するものが 3980円で買える
やるなら絶対買った方がいい

981 名前:デフォルトの名無しさん :05/02/21 21:01:00
次スレ立てた
http://pc5.2ch.net/test/read.cgi/tech/1108987183/

982 名前:デフォルトの名無しさん :05/02/21 22:16:17
>>981
ご苦労。もう帰っていいよ。


■過去ログ置き場に戻る■ 1- 前250 最新50
DAT2HTML 0.33f Converted.