【C++】 DirectX初心者質問スレ Part15 【C】at TECH
【C++】 DirectX初心者質問スレ Part15 【C】 - 暇つぶし2ch112:デフォルトの名無しさん
07/12/23 07:34:04
プロファイリングしたら?
D3DXSpriteなんてただでさえDirectXのバージョンに依存するからみんな回避してるのに、
この情報だけで分かるエスパーは居ないと思う。

つPIX for Windows
つDevPartner Profiler

まずは、どこで処理時間が落ちてるか見たほうが早いよ。

113:108
07/12/23 09:34:36
>>112
ありがとうございます
その後の調べでどうも大きな絵を大量に呼び出すと落ちる様子
たとえ呼び出し側での大きさの縦横は1*1でも、元の絵が大きいと
どのPCどんな処理でも避けられないらしいので
妥協して少し絵の大きさを改善してみますm(_ _)m
お答えありがとうございました


114:デフォルトの名無しさん
07/12/23 11:35:36
てか、元のテクスチャのサイズがでかかったら
パフォーマンスが落ちるのは当たり前じゃ

115:デフォルトの名無しさん
07/12/23 11:37:43
あなるほど

116:108
07/12/23 11:43:53
>>114
いや、initでの呼び出しで重くなるのはわかるんですが
メインループの中では1*1でも重いんですよ・・・

117:デフォルトの名無しさん
07/12/23 12:00:51
表示で小さくしてるってことは
内部的に縮小してるってことだ
LPD3DXSPRITEがどういうアルゴリズムで
拡縮してるかはしらんがバイリニアってことはないだろうし
ぼけたりすることを考えるとなんらかのフィルターをかけているのは想像つく
それを巨大なテクスチャに適用してるんだから重いのは当たり前

118:108
07/12/23 12:11:19
私の書き方がわかりにくくてすいません
要は2000*2000の画像をinitで読み込んで
1*1の部分しか表示していないのにそれを10個ほど並べたら重いんです
3個くらいなら正常なんですが・・・・

フィルタ関連で重くなるようなら少し見直して見ますm(_ _)m
ありがとうございました

119:デフォルトの名無しさん
07/12/23 12:19:52
だから・・・

>2000*2000の画像をinitで読み込んで

この時点で重い処理がすべて終わってるわけではない
簡単に言うとここではVRAM上に
2000x2000の領域を確保して画像の色情報を格納してるだけ

基本的には毎回描画のたびにこの
2000x2000の領域にアクセスして
そこの情報をバックバッファに転送することになる

元のサイズが大きければ大きいほど
転送のための時間がかかるし
何らかの処理をかければ当然重くなる

基本的には表示するサイズでテクスチャを作るのが普通

120:デフォルトの名無しさん
07/12/23 12:23:03
ビデオカードによっては
2048×2048にしたら多少は改善されるかもね

121:108
07/12/23 13:17:50
>>119
>>120

そうですか・・・initで読み込んだら以降はもう関係ないものだと勘違いしておりました
スキル不足を痛感いたします
ご教授本当にありがとうございました

122:デフォルトの名無しさん
07/12/23 13:22:14
リファレンスでやってるだけでね?

123:デフォルトの名無しさん
07/12/23 13:50:19
たかだか2048のテクスチャで最近のビデオカードが遅くなるかね~?
なんか、致命的な間違いをしていると思われ。

124:108
07/12/23 14:28:32
>>123
それを15~23個くらい呼んでます

125:デフォルトの名無しさん
07/12/23 17:00:04
そもそもVRAMが足りなくなってて
システムメモリ上に作られてるとか
あるいは
システムメモリとVRAMが共用になってて
バス速度がボトルネックになってるとか

126:デフォルトの名無しさん
07/12/23 17:42:47
実はDX8で開発していますとか言い出すんじゃないだろうな。

127:デフォルトの名無しさん
07/12/23 17:59:09
DirectXを使ってWindowsのゲームを作りたいのですが、
お勧めの入門書を教えてもらえませんか?

作りたいのはビートマニアのように音とシンクした、
シューティングゲームです。
3Dグラフィックは使いません。

128:デフォルトの名無しさん
07/12/23 18:00:57
今のDirectXで3D使わずに絵描くのって無理じゃ

129:デフォルトの名無しさん
07/12/23 18:08:07
ぶっちゃけ
DirectX関連で「これ1冊あれば」って本はないんだよなぁ
3~4冊やってようやく
あ、なんとなく分かってきたかも。となる

どの本もだいたい「サンプルを動かすための」ソースになってるから
なんでそうなってるのかが説明されてないし
応用しようとするととたんに動かなくなったり・・・

数をこなすと何をやってるのかがだんだんわかってくるので
自分でいろいろ応用することができるようになる

130:127
07/12/23 19:02:13
何も知らない状態で、何から始めるのがいいか、
アドバイスをもらいたいです。

>>128
3D描画しかできないんでしょうか?
3Dを使って2Dの描画ができるならいいんですが、
あまり効率がよくないならDirectXを使うこと自体考え直します。
メインでやりたいのは音の制御なので、描画はそんなに凝りません。
シューティングゲームなので、図形の衝突判定ができると便利かもしれませんが。

>>129
それじゃあ、とっかかりとして何を参考にするのがいいんでしょうか?
サンプルを見て数をこなして、少しずつ把握していくしかないんでしょうか?

131:デフォルトの名無しさん
07/12/23 19:06:45
>>130
ゲーム製作初心者なのか
DirectX初心者なのかにもよる

132:デフォルトの名無しさん
07/12/23 19:14:48
>>130
3Dを使って2Dの描画ができるならいいんですが

OK

133:デフォルトの名無しさん
07/12/23 19:19:08
>>130
DirectX9でスプライトが一番お手軽だと思われ。

134:デフォルトの名無しさん
07/12/23 19:37:25
>>130
シューティングゲーム製作本出てるぞ
それを参考にすれば?

135:デフォルトの名無しさん
07/12/23 19:59:17
>>124
なるほど。VRAM足りてないね。
1024*1024のA8R8G8B8テクスチャが大体4MByteね。
2048テクスチャだと4倍の16M。それが15個で240M。23個なら368M。

ちょっと無茶な設計になってると思われ。
不要なテクスチャは必要な時だけ確保するようにした方が良いし、
テクスチャは効率的に隙間無く活用した方が良いよ。

136:127
07/12/23 21:10:44
>>131
>>131
ゲーム制作初心者です。プログラミング歴も1年程度です。
ただ、Javaで簡単なシューティングゲームを作ったことはあるので、
シューティングゲームのアルゴリズムに関してはだいたいどうやるか決めています。

分からないのは音の精密な制御で、ゲームの進行と正確にシンクさせる部分です。
その部分をどうやっていいのか、イマイチ当たりがつかない状況です。


137:デフォルトの名無しさん
07/12/23 21:19:44
>>136
入門書の枠からは外れてるかな。
再生時間'(再生位置)を取得させれば良いだけの話だけど、
この手のゲーム以外で使うことはほとんど無いため扱わない。
ストリーミングバッファの解説が載っていればそれを応用すれば出来ることに気付くかも知れんが。

138:デフォルトの名無しさん
07/12/23 23:48:37
広大なマップを作りたいんですが、バカ正直にモデルを作って読み込んだら物凄く重たくなってしまいました。
程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??

139:デフォルトの名無しさん
07/12/24 00:16:12
>>138
東京から大阪へ行くのに新幹線で行くのでしょうか?   という質問をされてどう答えろと。

140:デフォルトの名無しさん
07/12/24 00:31:31
東京の六本木を歩いてるだけのシーンでも、ニューヨークとかパリとか地球全部描いてるわけか?
そんな恐るべき無駄は止めた方がいい

141:138
07/12/24 01:09:58
>>139
??
夜行バスでも行ける、ってことですか??
でも、新幹線で行けるならそれに越したことはないですし、>>138の方法でイイってことかな・・・。
>>140
そ、そんなことはしません(汗)

今までゲームをしてきて、当たり前のように見てきた広大なフィールドを実現するのがこんなにも
たいへんなことだなんて・・・
ゲーム開発者の人を改めて尊敬します。

URLリンク(www.acecombat.jp)
これとか、すごすぎです(;´д`)

142:デフォルトの名無しさん
07/12/24 01:20:10
地面はまっ平ら
木はビルボードにしか見えないんだが

143:デフォルトの名無しさん
07/12/24 01:32:33
ワラタ

144:デフォルトの名無しさん
07/12/24 08:39:45
>>141
アプリケーションに正解なんて無いぜ?
>程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??
つまり>>139の例で言うと新幹線で行くのも正解だし、バスで行くのも正解、歩いていくのも正解だろ。
自分の案があるならそれを試した上で軽くなる方法が無いか聞かないと。

145:デフォルトの名無しさん
07/12/24 10:02:56
DX9 2007Nov .Net
HLSLについての質問です。
以前PassがBeginPassとEndPassに変わったと言うやりとりがありましたが
上がっているHLSLのサンプルがことごとくエラーを出して正常に実行できません。
サンプルにSDKのバージョンを合わせれば動くでしょうが、そこから最新のバージョンに動かすように修正が出来ませんでした。
現在のバージョンで動くHLSLのシンプルなソースや解説をしているサイトは無いでしょうか。
せめてHLSL部分だけでもあればいいのですが、fxファイルが正常に読み込めエラーが出たりとか・・orz

146:デフォルトの名無しさん
07/12/24 10:12:49
きちんとヘルプが付いてきているだろ。
それで何が問題なんだ?

147:デフォルトの名無しさん
07/12/24 10:53:43
>>145
別にHLSLの部分は何もかわってないぞ
fxファイルが読み込めないのは
どっかに構文エラーがあるからじゃね?

148:デフォルトの名無しさん
07/12/24 11:13:46
>>145
>上がっているHLSLのサンプル

どこのサンプルだよ?

149:デフォルトの名無しさん
07/12/24 11:44:39
>>148
Pass()のままのところもあります(修正してもメモリ周りでエラーが出たり)

t-pot『HLSL』   (画像の下辺りにサンプル)
URLリンク(tpot.jpn.ph)

DirectX9での上位レベルシェーダー言語(HLSL)  (最下にサンプル)
URLリンク(www001.upp.so-net.ne.jp)

Shader.jp - Articles-第4回「HLSL スタート」   (上から1/5程の位置にある赤字文の下にサンプル)
URLリンク(www.shader.jp)

その7 HLSLによる極短レンダリング:サンプルプログラム   (画像の下辺りにサンプル)
URLリンク(marupeke296.com)


150:138
07/12/24 12:31:45
>>144
分かりました。
ありがとうございました。

151:デフォルトの名無しさん
07/12/24 21:55:38
>>149
俺もうごかねぇや。
てか自前のでさえ動かなくなってた。
詳しく調べてないから分からんが仕様が数箇所で変更されてエラーが複雑化しているように思える。
ぶっちゃけ去年辺りのSDK使えばいいんじゃね?

152:デフォルトの名無しさん
07/12/24 22:36:33
VC++2005、windowsSDK、DirectX9 SDK(October 2006)の環境で
2Dの簡単なゲームを作ろうとしている所です

フルスクリーンモードでSetDialogBoxModeを使用している
全ソース付きのサンプルプログラムはどこかにありませんでしょうか?
できればフルスクリーンモードでのメニューバー表示のサンプルがあると助かります。

一応自分でもこれを実現するために
こちらの方のページを参考にしてほぼ丸写し状態でやってはみたのですが、
どうもメニューが表示されません。
URLリンク(www.geocities.jp)

ただ、SetDialogBoxModeを呼び出しても呼び出さなくても、
メニュー自体は存在しているようで、マウスで画面の上のあたりを
クリックなどしますと、瞬間的にメニューが現れ、メニューコマンドが実行されますが^^;

こちらに書いていない部分(DX初期化関連、ウィンドーモード、メッセージ処理etc…)
などで何か気をつける点でもあるのでしょうか???

153:デフォルトの名無しさん
07/12/24 22:48:55
あ、VC++2005はExpressEditionです。よろしくお願いします

154:デフォルトの名無しさん
07/12/24 23:54:06
板ポリゴンとかにテクスチャを貼ると、テクスチャが何故か右下にずれるのですが、何故なのでしょうか?
どうすれば直りますか?

155:デフォルトの名無しさん
07/12/25 00:28:43
>>154
何かを間違っているから。

156:デフォルトの名無しさん
07/12/25 05:24:58
どうすれば直りますか?

157:デフォルトの名無しさん
07/12/25 05:29:57
間違いを修正する

158:デフォルトの名無しさん
07/12/25 05:49:02
どうすれば間違いを

159:デフォルトの名無しさん
07/12/25 06:32:38
どうやって貼りましたか?

160:デフォルトの名無しさん
07/12/25 08:12:48
誘導
スレリンク(tech板)

161:デフォルトの名無しさん
07/12/25 09:11:08
DirectX9.0bSDK(2004October)付属サンプル2の、虹色の三角形表示プログラムについての質問です。

改造して四角形を表示させたいのですが、うまくいきません。

CUSTOMVERTEX vertices[] = に
{ 50.0f, 50.0f, 0.5f, 1.0f, 0xff0000ff, },
を追加することで頂点を4つにし、

Void Render()内の
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); を
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
にすることで、2つの三角形を連続して描画し、結果的に四角形になるかと思ったのですが
三角形一つしか表示されません。

また、
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); を
g_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLESTRIP, 0, 0, 4, 0, 2 );
にすることで上記と同じ効果になるのかと思ったのですが、今度は三角形自体消えてしまいます。

どうしたら四角形が表示されますか?

162:デフォルトの名無しさん
07/12/25 09:26:56
カリングされてるんじゃないかね?
SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE)

163:161
07/12/25 10:00:08
できました!
あと頂点の順番?がおかしかったみたいで |X| ←こんな形になったけど、頂点入れ替えたら四角形になりました!
ありがとうございます!              ̄

164:デフォルトの名無しさん
07/12/25 10:35:15
は?
頂点の順序が間違ってたのが原因、って事?

165:161
07/12/25 10:52:03
>>164
三角形が一つしか表示されないという問題は
->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
で解決したんですが、今度は頂点の順番がおかしいせいか欠けた四角形になったんです。
/|  と  |\  の三角形の組み合わせで |X| こんな形に
 ̄       ̄                     ̄

166:デフォルトの名無しさん
07/12/25 14:42:39
>>161
どうでもいいけどoct2004は9.0cだったと思うが

167:デフォルトの名無しさん
07/12/25 15:46:06
疑問に思ったんだけど、四角形を描画する場合、頂点バッファを作ってDrawPrimitive()で描画するのと、
作らないでDrawPrimitiveUP()で描画するのとどっちが速いですか?
頂点バッファは頂点数が多いほど効果を発揮すると聞いたような気がするのですがどうなのでしょうか?

168:デフォルトの名無しさん
07/12/25 15:57:45
疑問に思ったんだけど、なんで自分で試さないんですか?

169:デフォルトの名無しさん
07/12/25 20:21:12
>>167

DrawPrimitiveUPのほうが早いですよ。
多くの方が様々なOSやビデオカードで検証済みです。










とか言ったらこいつは何も考えずにDrawPrimitiveUP使うんだろな。


170:デフォルトの名無しさん
07/12/25 22:21:13
>>169
ありがとうございます。
やはり、頂点バッファは頂点数が多いほど効果を発揮すると言う事でしょうか?

171:デフォルトの名無しさん
07/12/25 22:23:17
>>170
そうです。Microsoftが検証済みです。

172:デフォルトの名無しさん
07/12/26 01:31:37
>>152
私も同じ事やろうとしたけど、どうも上手くいかないですね
でもこの人の作ったゲームだと実装されているっぽいし…
本当にSetDialogBoxModeを使ってるのかなぁ

この関数使ってまともにメニューが表示できた人っていますか?
というかフルスクリーンのメニュー表示はみなさんどうやってます?

173:デフォルトの名無しさん
07/12/26 01:40:45
ステートブロックがいまいち良く理解できません。
1.普通のステート変更を最小限に抑えて変更する
2.(CreateStateBlock()で)キャプチャしたステートブロックを毎回適用する
3.カスタムステートシーケンス(BeginStateBlock()~End...()まで)を適切に使用する
と三つのやり方があると思うんですが、
何も考えずに2.のやり方でも効率的にできるんでしょうか。
それとも多少のやりくりは必要なんでしょうか。
ピュアデバイスだとステート変更は変更するたびに行われるんでしたっけ?
ステートブロックの仕組みとかがわからないのでちょっと迷ってます。

174:デフォルトの名無しさん
07/12/26 02:30:21
効率いいかなんてやってみればわかるだろ。アホか

175:デフォルトの名無しさん
07/12/26 02:47:54
このスレっていったいどんな質問なら答えてくれるの?w

176:デフォルトの名無しさん
07/12/26 03:02:27
パラドックス

177:デフォルトの名無しさん
07/12/26 04:01:19
初心者ホイホイなのかな

178:デフォルトの名無しさん
07/12/26 07:20:42
初心者であろうがなかろうが、自分で試せるものを試さないってのは単なる怠慢だと思うが。

やり方が分からないんであれば、どっちが効率的?などと聞くんじゃなく素直にやり方そのものを質問すべき。

179:デフォルトの名無しさん
07/12/26 13:52:41
このスレいらねーなwwwww

180:デフォルトの名無しさん
07/12/26 14:13:55
レンダリングステートを変更する事は、結構重いコストとして扱われるので、
Dx6まではコロコロ変化させずに、同じレンダリングステートのメッシュやターゲットを纏めて
レンダリングしたり、ステートの変化が最小になる順番でステート郡をレンダリングしてたりしたんだけど、
ステートブロックを使えば、複数のレンダリングステートの変化を一度にデバイスに適用出きるので、
上記の事をあまり意識しなくて良いレンダリングループが作れるようになったわけ。

でも、別にレンダリングするターゲットやステートの種類によってはステートブロックを使わなくても
そんなに処理が重くならないのも事実で、自分が作成しているプログラムでステートの変更が
重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの?
GPUとGPUへのバスの帯域、レンダリングするプリミティブの数、ステートの変更量といった要因が
あって、トータルで考える必要があるから、なんでもかんでも管理するのは効率的ともいえないし、
大規模エンジンを作るのに、ステートの管理コストを嫌って管理しないのも効率が逆に悪くなるし。

ケースバイで。効率的ってのは目的が無いと決定しない項目だから。

181:デフォルトの名無しさん
07/12/26 14:22:58
>重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの?

そうなんだが、それを自分で試そうとしない輩が多すぎるな

182:デフォルトの名無しさん
07/12/26 19:19:34
VisualC++2005、DirectX9.0c SDK、Windows SDKの環境です。

キャラクターのアニメーション等をさせる場合、
画面を毎秒60とか30フレームとかで更新、のような処理をしなければならないと思うのですが
その毎回の画面の更新タイミングはどのような手順で取るのでしょうか

183:デフォルトの名無しさん
07/12/26 19:38:29
>>182
自分で試せ

184:デフォルトの名無しさん
07/12/26 19:49:08
何を試せばいいのでしょうか

185:デフォルトの名無しさん
07/12/26 19:57:16
「ゲームループ」でぐぐれ

186:デフォルトの名無しさん
07/12/26 19:58:02
>>184
それを自分で試せ

187:デフォルトの名無しさん
07/12/26 20:00:24
少し荒れてる状況で質問したのはタイミングが悪かったな

188:デフォルトの名無しさん
07/12/26 20:06:30
>>187
自分で試せよ

189:デフォルトの名無しさん
07/12/26 20:19:19
>>188
>>187に言うなよ!w

190:デフォルトの名無しさん
07/12/26 20:21:58
マルチコア設計の描画エンジンだとステートブロック使うのは問題外の糞www
というnVidiaあたりのプレゼン資料なかったっけ

191:180
07/12/26 20:58:26
>>190
まあ、実はステートブロックは、固定パイプライン時代の産物だから、基本的に
レンダリングステートなんてほとんど変えずに、シェーダでやれってのがDirectX9以降の
正しいGPUの使い方なんだと思う。

こんなの、実は悩むところじゃないと思うな。
固定パイプライン使ってても、レンダリングステートの変更なんて大した
負荷になってないっぽいもんね。所詮DirectX7時代の話だし。
一々ステートブロック作らなくても十分高速に動いてるし。
ステートブロックの解説も怪しいところあるから、普通利用を避けるんじゃないかな。

>>173は何故こんな事に疑問を持ったのか、謎だ。
(どこかの処理で実際に遅くなった、とかならわかるけど。)

192:173
07/12/26 23:38:39
え、いや、普通な感じで
実装前にセオリーとか聞きたいなって…荒れさせたようでごめん
忘れて

>>180さん、なんかすいません…とても参考になりました…どうもでした
>>180さん、ごめん、俺のせいで

193:173
07/12/26 23:39:49
>> >>180さん、ごめん、俺のせいで
>>182さん、ごめん、俺のせいで の間違いです ホント申し訳ないw

194:182
07/12/27 00:22:56
>>185
ありがとうございます。_tWinMainの中でtimeGetTimeを使って
60分の1秒を数える方法を使ってみました
Windowsゲーは同期とかはキニシナイでいいんでしょうかね

>>193
いえいえキニシナイでください

195:デフォルトの名無しさん
07/12/27 02:19:50
>>194
いや、同期取らないと駄目だろ。

196:182
07/12/27 02:55:23
え?そうなんですか?>>195さんはどういった手順でやってるんでしょうか

197:デフォルトの名無しさん
07/12/27 03:00:18
俺は可変フレームレートのが好きだな
要は1フレームでどんだけ時間が進んだかで
アニメーションの進行速度を変えればいいわけだから
そんでフレームの終わりにフリップすれば

198:デフォルトの名無しさん
07/12/27 03:15:47
>>197
あれってどうやって実装してるの?
フレーム間の時間をグローバル変数にでも格納して参照するんだろうか。

199:デフォルトの名無しさん
07/12/27 04:22:17
DirectX9SDKを入れて、バージョンは8で開発したいんだけど、d3dx8.hとかないのね
d3d8.hとかはあるのに。

どうすればいいんだろ。どっかでDirectX8SDKを見つけてこないと駄目かな?


200:デフォルトの名無しさん
07/12/27 04:41:19
9のOct2004だけど、d3dx8.hあるよ。

201:デフォルトの名無しさん
07/12/27 07:28:08
仕事でどうしても必要じゃなきゃ9使った方がいいと思うけど。
まあ9x系対応とかだとDx9のOct2006までじゃないとダメらしいが

202:デフォルトの名無しさん
07/12/27 10:23:51
>>199
リリースノートくらい読めよ・・せっかく日本語に訳してくれてるんだから。

------
この DirectX SDK には次のコンポーネントは含まれていません

Direct3D8 およびそれ以前の全てのバージョン
Direct3D RM
・・・・・・

これらのコンポーネントを使いたい開発者は、
MSDN から August 2007 DirectX SDK をダウンロードする必要があります。
        ~~~~~~~~~~~~~~~~~~~~~~~~~

203:デフォルトの名無しさん
07/12/27 10:26:15
まあオーガスト2007だと8で作る意味が全くなくなるけどな

204:デフォルトの名無しさん
07/12/27 11:12:48
DirectX9でゲームを作ってたんだけど、DirectX9の独自の機能使ってないし、誰でもすぐに遊べる様にしたいからDirectX8にしたかったのさ。

>>200
>>202

サンクス。
とりあえず古いバージョン拾ってみよう。古いバージョンで上書き出来ればいいけど

>>203
そうなの?
結局XPの初期状態とかで動かないのかな?




205:デフォルトの名無しさん
07/12/27 11:56:09
>>204
だからリリースノートを読めと。

----
すべてのプラットフォームでのインストール上の注意

・現在の DirectX SDK をインストールする前に、DirectX SDK の前バージョンを削除することを推奨します。
----

どのバージョンがどのOSに対応しているかも全てリリースノートに書かれている。

206:デフォルトの名無しさん
07/12/27 12:19:57
もう、ほっといた方がいいかと。
一度受けた注意を怠るわ、質問している立場なのに偉そうだわ。
d3dx8.hの話にしても、>>104-105 で出てた話題なのに、
同じスレ内ですら検索かけてないし。

207:デフォルトの名無しさん
07/12/27 14:19:57
2Dの描画で描画数がかなり多くなるため(1フレームに3000程度の数字テクスチャを描画)頂点バッファを利用して
1フレームに頂点バッファ一括ロック→memcpy→アンロック→DrawIndexedPrimitive
としているのですが、3000個描画するとシーン時間が6~7ms程掛かってしまいます(それなりに良いスペックのPCで)
6000ポリゴン程度の描画でこんなに時間が掛かるはずがないと思うのですがやり方が間違っているのでしょうか?

208:デフォルトの名無しさん
07/12/27 14:40:20
なんかmemcpyがボトルネックになってそうだけど
どの処理に一番時間がかかってるのか
もうちょっと絞り込んだ方がいいんじゃない?

209:デフォルトの名無しさん
07/12/27 14:43:44
まず対照実験として、画面をクリアするだけで何も描画しない場合の速度を計るべきだと思う。

210:デフォルトの名無しさん
07/12/27 16:53:43
ロック/アンロックが臭いと思うな。変なロックは速度に影響でかいから。
ロックを止めて、ダミーバッファにmemcpyする処理に置き換えてフレームレートを計測したら?
あと、頂点バッファは、まとめてる?ロックがボトルネックなら、頂点をまとめて1フレームにロックする回数を
1回にしてしまった方が良いよ。
それと、毎回コピーする頂点の計算処理は重くない?

211:デフォルトの名無しさん
07/12/27 20:04:19
ところで、そろそろ>>152の質問に回答してくれる方はおりませんでしょうか?

ネットを漁り、アキバでDirectX関連の参考書を読みふけりましたが
どこもこの問題についてはあえて避けてるようにしか思えません

SetDialogBoxModeをマスターされました神様、いらっしゃいましたらお願いします

とりあえず、フルスクリーンでメニューとダイアログが表示できるようになればいいので
いい解決方を知っている方でも大歓迎です

212:デフォルトの名無しさん
07/12/27 20:05:35
斜め投影した場合、投影されたCGがあえて歪んで見えるようにしたいです。
どこをいじればいいか教えてください。

213:デフォルトの名無しさん
07/12/27 20:16:28
>>211
全ソース付のサンプル、か。

google code search で SetDialogBoxMode で検索したら結構引っかかったんだけど、やってみた?
検索結果の始めのほうはラッパのヘッダとか意味ないのばっかだけど
結果の後の方まで見てみると結構有用っぽいのがちらほら。Lunaとかも引っかかってたり。
ただライブラリ系ばっかでサンプルになるかどうかは分からん。

214:207
07/12/27 20:43:50
レスありがとうございます
やはり描画部分が結構重いみたいです…
1フレーム当たりの時間が
ロック/memcpy/Drawを一切しない → 80μs
ロック→16000頂点分memcpy→アンロックでDrawしない → 450μs
一つ上の条件でスプライトを2000個描画 → 3210μs
いずれも他の描画以外の処理を含む時間で、memcpyは実際には描く分だけのサイズで行うので最悪条件でテストしています

215:デフォルトの名無しさん
07/12/27 21:46:38
ロックしない/memcpyしない/アンロックしない/Drawする
っていうのも測った方がいいと思う。
頂点データがないのはアレなんで、計測外で初期化時にでも放り込んでおいて。

216:デフォルトの名無しさん
07/12/27 21:56:46
PIXで、実際どのAPIが時間食ってるか調べてみたら?
GPUが忙しいのか、CPUが忙しいのか、プログラムが悪くってどっちも
遊んでる状態になってるのか、それを切り分けないと始まんないと思う。
あと、スペックに対しての期待値がどれくらいで、3210はどの位そこから遅いのか?

SDK付属ドキュメントの「Direct3D API 呼び出しの正確なプロファイル」あたりは一回読んでる?

217:デフォルトの名無しさん
07/12/27 22:23:55
>>211
今てきとーに使ってみたら一応表示はできるみたいだがのー。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER忘れてるとかそんなオチじゃないよね?
しかし案の定XPとVistaじゃ挙動違うっぽいし、あんまし深入りしたくねぇなこれ。

218:デフォルトの名無しさん
07/12/27 22:35:28
Dialogは普通に表示出来たけどメニューは
あんまりメリット感じないから使った事無いや。

219:デフォルトの名無しさん
07/12/27 23:35:17
PIXの使い方がわからねぇ

220:デフォルトの名無しさん
07/12/28 02:02:20
おれもおれも
まぁちょっとだけならわかるけど
つっこんでは分からねぇ

221:デフォルトの名無しさん
07/12/28 03:43:50
助けて

頂点テクスチャフェッチのためにVertexShaderでtex2Dlod(Sampler,float4(In.tex,0,1))すると真っ黒になってしまいます
float4(In.tex,0,0)、float4(0,0,0,1)などでも同様でした
テクスチャのフォーマットはA32B32G32R32Fで、SM3.0にも対応しているのですが

tex2Dlodなどでぐぐってみたところ、MSのフォーラムなどで似たような症例がありましたが解決策がよくわからず・・・
原因に何か心当たりある方はいないでしょうか?

222:221
07/12/28 04:29:27
ちなみにサンプラーは
MinFilter = Point;
MagFilter = Point;
MipFilter = None;
AddressU = Clamp;
AddressV = Clamp;
です

223:デフォルトの名無しさん
07/12/28 12:36:06
等高線の形どおりに厚紙を切って重ねると、立体地図が作れますよね
この立体地図をプログラムで描画したいのですが、躓いてしまいました
今手元には等高線が書かれた白地図があるので
「等高線ごとに領域を分割し、各々に高さを与える」
といった処理にしようと思ったのですが、等高線ごとに領域を分割というのがどうしたらよいのか見当がつきません
このような処理の実現のしかたを教えてください
よろしくお願いします

224:デフォルトの名無しさん
07/12/28 13:06:56
ダイレクトX関係ないじゃんといいたいが

・等高線が作る一つの輪を1リングとし、リング毎の高さと領域情報を保持
・高さの同じリングをまとめたものを1グループとして管理する
・グループ毎にY座標を変えて表示する
でいいだろ

もちろん、外壁も表示するのには各リングの輪郭線から頂点を自動算出して
外壁ポリゴンも作らんといかんけど

225:デフォルトの名無しさん
07/12/28 14:00:34
すみません
3次元空間内の物体をピック処理をして、マウスの移動量で移動させたいのですが

ピックするところまでいったのですが
その後マウスの移動分動かすのはどうしたらいいのかわかりません。

初期値→移動後のマウス座標を得て、それをどのように3次元空間の座標に戻すのか
視点が回転したときに、xyzの移動量と向きはどうしたらいいのか

この二つがわからなくて壁に当たってしまいました。
ご指南お願いします

226:デフォルトの名無しさん
07/12/28 15:16:38
>>225
視点から注視点の面上にあるポイントを結んだ物がマウスポインタのベクトル。
そのベクトルを対象オブジェクトまで伸ばし、ベクトルが変化した分だけ移動させればいい。

227:デフォルトの名無しさん
07/12/28 16:45:15
すいません>>212もお願いします。

228:デフォルトの名無しさん
07/12/28 16:48:14
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |   お断りします  |
 |________|
    ハ,,ハ ||
    ( ゚ω゚)||
    / づΦ

229:デフォルトの名無しさん
07/12/28 17:02:14
>>227
質問が抽象的すぎ

>斜め投影した場合
>投影されたCG
>歪んで

それぞれ具体的に

230:デフォルトの名無しさん
07/12/28 17:16:14
>>212
誘導
スレリンク(tech板)

自分の質問を読んで、他人が内容を把握出来なければ、
ただでさえ少ない回答が0になるだけだよ。

>>223
>>224
もし、等高線毎に外周形状のみ与え、後は自動って言うのなら、
等高線が穴を含む形状の場合にめんどくさくなると思う。
形状に含まれる穴の数(トポロジー)に応じて、輪郭に対する
三角分割のアルゴリズムが変わるんじゃないかな?
穴が無ければD3DPT_TRIANGLEFANで外周頂点を与えれば良いので楽だが・・。

231:224
07/12/28 17:42:08
>>230
山の事しか考えてなかったな
穴がある形状を考えるのを忘れてた

まあ、そもそも論として線だけ書かれたデータをそのまま読み込んで
処理しようとすんなら無理があるわな

232:デフォルトの名無しさん
07/12/28 18:33:17
頂点テクスチャフェッチ使えばできる
等高線の領域ごとにハイトデータで塗って
細分化した平面ポリゴンに適用すればできる
線のみからでもハイトデータを領域の関数で割り当てればできなくもない

自分ができないだけなのに威張ってるプログラマってカコワルイよね

233:デフォルトの名無しさん
07/12/28 19:39:05
すみません、始めたばかりのところで理解できないのがあるのですが

デプスバッファの深度を書き込む/書き込まない
というのがあったのですが、そうすることでどうなるのでしょうか

デプスバッファ、というバッファ(1枚?)にZ値を書き込むというのはわかったのですが
書き込まないと、そこはどうなるのでしょうか?

いまいち何をしてるのか、したいのかが把握できなくて

234:デフォルトの名無しさん
07/12/28 19:39:36
抽象的すぎてすいませんでした。

Xファイルを読み込んでCGを画面の中央に描画しているのですが、
そのCGを映しているカメラの位置をキー操作で変更できるようにしています。
で、カメラの位置を変更した場合に、
URLリンク(www.beamax.co.jp) の「斜め投影」の項にあるように歪んでみえるようにしたいのです。

D3DXMatrixIdentity(&m_view);
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( cameraX, cameraY, cameraZ),//カメラの位置
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),//カメラの向き
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));//カメラの傾き
pD3DDevice->SetTransform(D3DTS_VIEW, &m_view);

一部ですが今こんな感じでカメラ配置をしています。
cameraX,cameraY,cameraZ はキー操作で増減するようにしています。
プログラムは、ソフトバンクの「DirectXゲームグラフィックスプログラミングVer.2.1Vista」という本を参考にしています。

よろしくお願いします。

235:デフォルトの名無しさん
07/12/28 19:57:46
>>232
そりゃ失礼。

236:デフォルトの名無しさん
07/12/28 19:58:40
まぁ、>>232も最後の1文は余計な一言だな

237:デフォルトの名無しさん
07/12/28 20:10:41
>>233
最終的にスクリーンに描画するときに
各ピクセルに色を塗ると同時にそこにある物体が
カメラからどれくらいの距離にあるかをZバッファに記録しておく
そうすると
別の物体を同じピクセルに描画しようとしたときに
Zバッファの値を参照して
以前の値よりカメラに近ければ
新たな色を塗りZバッファの値も書き直す
以前より奥にあるものなら色をぬらない、という処理が可能になる

これをしないと後から描画したものでどんどん色を上書してしまうので
奥にあるはずのものが手前にあるものの上に描画されてしまう
したがって描画するときに奥にあるものから描画するというようなソート処理が必要になる

238:デフォルトの名無しさん
07/12/28 20:38:08
>>234
それはビューの設定とは無関係
カメラの位置を変えたって、そんな変化は起こさないだろ
オブジェクト側を調整しろ

239:デフォルトの名無しさん
07/12/28 20:45:34
>>237さん 回答ありがとうございます
つまり
 ______
|近 遠 近 …


Z値が書き込まれていって、それを参照するわけですね。
これは2次元平面に射影された状態ですよね

ある物体○△□が 奥行き方向に1列に並んでたとき
物体ごとにデプスバッファに

○ 書き込む    遠い
△ 書き込まない  ↓
□ 書き込まない 近い

としたら、最終的に一番近いのは□ですが、○が描画される、ということになるのですよね?


240:デフォルトの名無しさん
07/12/28 22:27:37
>>232

線のみから求めてるわけじゃないじゃん
結局手動で山と穴の区別をつけたデータが必要だろ?

241:223
07/12/28 22:31:06
>>223です
皆さんありがとうございます
231さんが仰るように「線だけ書かれたデータをそのまま読み込んで処理」というものを想定していました
穴を含む形状については今は考えず、概形が出来上がった後に改めて考えることにします
頂点テクスチャフェッチなど初めてきく言葉が沢山あるので、まずは片端から調べてみます
ありがとうございました

242:デフォルトの名無しさん
07/12/28 22:41:03
>>239
違う

基本的に描画関数を呼んだ順に描画されるので
○△□の順番で描画した場合は問題ないが
□△○や△□○の順で描画した場合
一番遠いところにあるはずの○が一番上に描画されてしまう
それを防ぐために先に近いものが描画されていたら
それより遠いものを描画しないためのもの

243:デフォルトの名無しさん
07/12/28 22:56:49
>>242さん
何度もありがとうございます。その点は理解できました。

描画の時にデプスバッファに書き込む物体と
書き込まない物体が混在したときにどうなるのでしょうか。
そこがわからなくて。

最終的にデプスバッファに書き込んでいる物体がちゃんとならんで
デプスバッファに書き込まない物体は描画順ということになるのですよね


244:デフォルトの名無しさん
07/12/28 22:58:38
>>213
>>217
ありがとうございます
そのオプションをつけてウィンドウスタイルなどをいじってみたら、
開発環境のXPマシンだと、一応は表示されるようにはなりました

ですが、フルスクリーン→ウィンドウへと切り替えた場合に
ウィンドウ化しなかったり、古い98マシンで試してみた所
メニューを表示した瞬間に画面が激しくちらつくようになってしまったり
ダイアログは表示されなかったりと、挙動が酷くおかしいようです

とりあえずもう少しだけ教えていただいたサンプル等と見比べて
頑張ってみようと思います

最近のエロゲーとか、ホントこれどうやってるんでしょう?
やっぱり、DirectXで描画したなんちゃってメニュー&ダイアログなんですかねぇ

245:デフォルトの名無しさん
07/12/28 23:07:58
そもそも標準のメニューを使っているようなエロゲーはDirect3Dなど使っていない。

246:デフォルトの名無しさん
07/12/28 23:23:28
いや最近のエロゲは結構DirectX使ってるよ
とりあえず今入ってるはぴねすってエロゲーはDirectXで動作してるし
フルスクリーンメニューもちゃんと出てる

247:デフォルトの名無しさん
07/12/28 23:28:55
もはや3Dも2DもDirectGraphicsで統合されてるし

248:デフォルトの名無しさん
07/12/28 23:32:23
メニューやダイアログを表示中に
ゲーム画面が変化しているやつは見た事無いから、
そこに解決の糸口があるんじゃないかな。

249:デフォルトの名無しさん
07/12/28 23:47:57
メニューループにはいったら普通に他は止まるだろ

250:デフォルトの名無しさん
07/12/28 23:50:33
まさかとは思うが、メニューがある場所に、自分で別の物を描画しておきながら、
ちらつくとか表示されないとか馬鹿なことをぬかしているわけじゃないよな?

251:デフォルトの名無しさん
07/12/29 00:13:29
>>250
ちらつく、というのはWin98環境の方だけで、XPでは画面上に
しっかりと表示されているので、それはないかと思います

>>248
いくつかフルスクリーンメニューのあるゲームを起動してみたところ
どうもメニューが出た時に画面が下にずれているものが多いようです

なんとなく思うのは、これはDirectXでのフルスクリーンモードではなくて
実際にはウィンドウモードなのではないかと。
画面いっぱいのクライアント領域をもつメニュー付きの通常ウィンドウを作って、
必要に応じてウィンドウを縦方向にずらしてメニュー表示しているのでは?

それが可能だとすると、環境によって挙動があやしげなSetDialogModeに
たよるよりも安定しそうな気もします
SetDialogModeはおいといて、まずこの方法でできるかどうか試してみようかと思います

252:デフォルトの名無しさん
07/12/29 00:53:25
システムに依存することは止めたらどうかね?

253:デフォルトの名無しさん
07/12/29 01:02:19
となるとダイレクトXなんて使えたもんじゃありませんな

254:デフォルトの名無しさん
07/12/29 01:04:43
システムに依存しないWindowsプログラムってどんなんだよ

255:デフォルトの名無しさん
07/12/29 13:56:38
問: 次の条件を満たすプログラムを作成せよ。(30点)

1) システムに依存しない
2) Windows上で動作する


256:デフォルトの名無しさん
07/12/29 14:06:22
Javaを使うお

257:デフォルトの名無しさん
07/12/29 14:53:21
Javaか

258:デフォルトの名無しさん
07/12/29 16:42:42
DirectXのサイトって数が多い分今の自分に合ってるの探すのがきつい・・・
せめてSDKの日付とかあって欲しい。
あの,Direct3Dのプログラミング始めたいんですが何をそろえればいいですか?
バージョンは9.0でやろうとしているんですが、パッケージによって違いとかあるんですか?

もう1週間くらいネットを這いずってるんですが良く分かりません・・・お願いします。

259:デフォルトの名無しさん
07/12/29 16:47:00
Javaだな

260:デフォルトの名無しさん
07/12/29 16:51:05
>>258
ネットが活用できないのなら本屋に行け。

261:デフォルトの名無しさん
07/12/29 17:04:48
さすがJavaだな

262:デフォルトの名無しさん
07/12/29 17:06:21
実際Javaって使い物になるの?
携帯ゲームなら有りかもしれないけどさ

263:デフォルトの名無しさん
07/12/29 17:11:38
何を作るかによる。
目的を定めずに手段だけを論じるのは愚か者の極み。

264:デフォルトの名無しさん
07/12/29 18:16:38
>>263
そういうのはいいから。

265:デフォルトの名無しさん
07/12/29 18:24:36
スレ違いの質問に対して答えをいただけただけでもありがたいと思え

266:デフォルトの名無しさん
07/12/29 18:37:54
>>258
もう書かれているがマジレスすると、AmazonでDirectXで検索して、
初心者向けで売れてる本を一冊でも買ったほうがいいと思う。

別に本が優れてるとかじゃなく、ネットの活用が上手くなくて、SDKについても何も分からないんであれば
本に頼るしかないだろう。

267:デフォルトの名無しさん
07/12/29 19:00:02
>>266
ご指南ありがとうございます。
どうか最後にこれだけ教えてもらえないでしょうか?
Microsoft DirectX SDK (November 2007)だけあればできますか?

268:デフォルトの名無しさん
07/12/29 19:12:20
Visual Studioが必要です。

269:デフォルトの名無しさん
07/12/29 19:13:35
パソコンも必要です

270:デフォルトの名無しさん
07/12/29 19:27:50
気力も

271:デフォルトの名無しさん
07/12/29 19:28:26
あとはJavaだな

272:デフォルトの名無しさん
07/12/29 19:35:57
>>267
Windows上でここに書き込んでいるんだとすれば、ソフトウェアとして最低限必要なのは開発環境とSDKだけ

273:デフォルトの名無しさん
07/12/29 20:08:24
Macなのですが、無理ですか?

274:デフォルトの名無しさん
07/12/29 20:12:36
Intel Mac なら Windows をインスコすればいい。

275:デフォルトの名無しさん
07/12/29 20:13:12
>>273
Javaならok

276:デフォルトの名無しさん
07/12/29 20:15:34
何この流れ
釣りは無視しろよ

277:デフォルトの名無しさん
07/12/29 20:16:09
Javaの人気に嫉妬

278:デフォルトの名無しさん
07/12/29 20:17:10
>>256がJavaを使うなんて言ったばっかりに・・・

279:デフォルトの名無しさん
07/12/29 21:17:34
>>272
まじであざーした!
がんばってみます。

280:デフォルトの名無しさん
07/12/30 00:05:22
xファイルから得たポリゴンの任意の点の座標を変更する、ってのはどうやったらできる?

281:デフォルトの名無しさん
07/12/30 00:09:44
データが入っている場所の頂点データをいじれよ。

282:デフォルトの名無しさん
07/12/30 00:33:38
>>280
メッシュというと複雑そうにみえるが、中身は頂点バッファやインデックスバッファその他もろもろが集まってるだけ
なんでまずはロックなど頂点バッファの基本的な操作さえ覚えてしまえば後は流れ的にJavaが全て解決してくれる

283:デフォルトの名無しさん
07/12/30 01:14:12
JABAすげー

284:デフォルトの名無しさん
07/12/30 01:17:13
Japan Amateur Baseball Associationか

285:152
07/12/30 01:39:13
こんばんは、>>152です。
画面いっぱいのウィンドウの方はできないこともなさそうな感じではありましたが
大きい→小さい画面への変更で、デスクトップアイコンや他アプリの位置等がずれるため
やめることにしました

その後もう一度SetDialogBoxModeのやり方でウィンドウのフラグをあれこれいじってみたら
フルスクリーン→ウィンドウでも上手くいくようになりました

うちにある家族用の別メーカーのXPマシンでも正常動作したようなので、
まあ、今時Win98で動かなくてもしょうがないかなぁと自分を納得させる事にしました

ささっていたビデオカードも、 GeForce4 MX440 SE というかなり昔のボードで
ドライバの配布すら終了している代物でしたので
このボードのドライバがDirectX9.0cに完全対応していなかったのかも知れません

質問に答えてくれた方々、どうもありがとうございました。

286:デフォルトの名無しさん
07/12/30 01:45:57
XP以上のみサポートでぶっちゃけ問題ないよ。

287:デフォルトの名無しさん
07/12/30 02:10:30
シェーダで3次元テクスチャを二つ載せようとしたのですが
なぜか片方しか表示されません。

3次元テクスチャ1つと1次元テクスチャ1つは問題なかったのですが
なぜ…

やり方教えてください

288:デフォルトの名無しさん
07/12/30 14:51:57
DXライブラリみたいにビデオメモリに
直接アクセスするのってどうやるんでしょうか?

289:デフォルトの名無しさん
07/12/30 15:01:00
URLリンク(msdn.microsoft.com)

すいません、これを試してみたいのですが
どこからDLしていいのかわかりません。
といいますか、どのSDKなのかわかりません

これの実行ファイルかソースうpってもらえませんか?


290:デフォルトの名無しさん
07/12/30 15:46:13
>>289
DirectXのSDKをインストールすると入ってるよ

291:デフォルトの名無しさん
07/12/30 16:24:52
>>290
前にインスコしたSDKには入ってなかったのです。
Microsoft Platform SDK for Windows Server 2003 R2

また400MBも落とすのに○時間も掛かるのはシンドイっす

292:デフォルトの名無しさん
07/12/30 16:50:44
  _, ._
(;゚ Д゚)

293:デフォルトの名無しさん
07/12/30 17:08:18
PlatformSDKは、まぁ、ボケなんだろうけど
サンプルはSDKのバージョンによって中身がかわってるからな
少なくともAugust2007には入ってなかった
でも手元にあった9.0bSDKのCDには入ってたので
デベロッパセンターに行って
Updata~とついてないSDKを落とせばたぶんついてくるんじゃね?

294:デフォルトの名無しさん
07/12/30 17:43:16
>>291
軽量版があるからこっち使え
URLリンク(java.sun.com)

295:デフォルトの名無しさん
07/12/30 19:25:24
JAVAネタ、いい加減にしつこい

296:デフォルトの名無しさん
07/12/30 21:00:51
>>292-293
ボケたつもりはなくて、、、これがSDKだと思ってました。。。

>>294
ありがとうございます。見てみます

297:デフォルトの名無しさん
07/12/30 21:01:26
…JAVAですか。
確認する前に書き込んでしまいました

298:デフォルトの名無しさん
07/12/31 08:36:54
自機・フィールド共にXファイルから読み込んで、3Dゲームを作っています。
自機と地面や壁との衝突判定をさせたいんですが、Xファイルから自動的に描画されているので、自分でも壁の座標が分からないです。
壁や地面の座標はどうやって求めればいいんでしょうか?

299:デフォルトの名無しさん
07/12/31 09:00:36
そもそも自動で描画されるなどあり得ない。

300:298
07/12/31 09:56:49
すみません。自動的というのは、頂点の座標を自分で把握していなくても描画ができるという意味です。
SDK Tutorial6のソースをほとんどそのまま利用しています。
計算式はぐぐれば出てくるんですが、計算するための座標がどこなのかが分かりません。

301:デフォルトの名無しさん
07/12/31 10:01:01
まさかチュートリアルの1から5を飛ばして6やってるって
オチじゃあるまいな?

302:298
07/12/31 10:10:29

4,5飛ばしてました。
今から見てきます。

303:デフォルトの名無しさん
07/12/31 14:35:16
たまにエスパーが現れるから困る

304:デフォルトの名無しさん
07/12/31 15:32:44
OpenGLのglFrustum()という関数をDirectXで実装しようとしています。

glFrustum()については以下のURLに解説がありました。
URLリンク(kaoken.no-ip.com)

このURLで出ているGL_PROJECTION というのは、おそらくDirectXでいうD3DTS_PROJECTION だと思っているのですが、
このD3DTS_PROJECTION の使い方がよくわかりません。

305:デフォルトの名無しさん
07/12/31 15:58:19
CheckDeviceMultiSampleType() でビデオカードがマルチサンプルに対応しているか調べたのですが、
自分のものだと対応していないことが分かりました。
ビデオカードのメーカーのページにはこれに対応しているかどうかの記述がないようですが、対応している
ビデオカードはどのようにして見つければよいでしょうか?

306:デフォルトの名無しさん
07/12/31 17:24:28
引数間違っている可能性が高いような。
非対応見つけるほうが大変でね?

307:305
07/12/31 17:41:23
>>306
え!?
自分のカードはGeForce 8600GTで、関数の引数は以下のようにしました。

m_pD3D->CheckDeviceMultiSampleType(
           D3DADAPTER_DEFAULT,
           D3DDEVTYPE_HAL , D3DFMT_R8G8B8,
           FALSE,
           D3DMULTISAMPLE_2_SAMPLES,
           NULL ) ) )

戻り値は
D3DERR_NOTAVAILABLE
でした。

最初の引数を
pCaps->AdapterOrdinal
としても同じでした。

308:デフォルトの名無しさん
07/12/31 18:07:52
てか8600GTは
D3DFMT_R8G8B8フォーマットをサポートしてるのかい?
最近のだと
D3DFMT_X8R8G8B8とか
D3DFMT_A8R8G8B8とか


309:デフォルトの名無しさん
07/12/31 18:50:25
>>307
D3DFMT_R8G8B8 なんて、バックバッファはおろか、テクスチャのフォーマットとしても
対応してるアダプタなんて現時点では存在しないぞ
素直に D3DFMT_X8R8G8B8 でやれ

310:305
07/12/31 20:57:54
>>308>>309
ありがとうございます。
D3DFMT_A8R8G8B8で対応してました。

実際の効果を見てみたのですが、通常のレンダーターゲットに描くときはしっかりと効いていました。
しかし、どうもアプリ内で用意したテクスチャをレンダーターゲットにすると、そこでは効かないようです。
なぜなら、レンダリングしたテクスチャを板ポリに貼り付けて通常のレンダーターゲットの全面に表示
すると、ジャギーが強く残っているからです。
(テクスチャ解像度はレンダリング対象の1/4と低いものの、AAがかかった痕跡が見られません)

テクスチャをレンダーターゲットにしたときもAAが効くようにするにはどうすれば良いでしょうか??

311:デフォルトの名無しさん
07/12/31 23:58:20
今DirectDrawとDirect3Dの機能をそれぞれクラス化してるんですけど、
このクラスのインスタンスを作るとき何をstaticにして何をインスタンス作ったら
いいですか?Direct3D複数作ったらなんかやばいんでしょうか?

312:デフォルトの名無しさん
08/01/01 00:09:40
>>311
質問の仕方が悪すぎる。あんたのクラスの設計も具体的にやりたいことも
わからないのに答えられる問いではないよ。

とりあえず「Direct3D複数」がIDirect3D*とIDirect3DDevice*のこと言ってんなら
複数作成するのは稀だから、まだ余計なこと考えなくていいよ。

313:デフォルトの名無しさん
08/01/01 00:09:48
貴様のオナニーの仕方なんぞどうでもいい

314:デフォルトの名無しさん
08/01/01 02:28:26
URLリンク(www.cmagazine.jp)
この本を買ったのですが、Part2の波のデモが動きません。
プロジェクトをコンパイルしようと思ったら、.net 2002なのでできませんでした。
グラボはGeForce 8600GTです。

上のサイトから、そのサンプルをダウンロードできるので、みなさんは動くか試してもらえますか?

315:デフォルトの名無しさん
08/01/01 02:40:29
何も表示されないのかウィンドウすら表示されないのかエラーで起動しないのか。

「どう」動かないのかを書きましょう。

316:314
08/01/01 03:20:09
>>315
すみません。
デモのプログラムは起動するのですが、波のサンプルの場面で、波が発生せず、真平らな板ポリ
状態になっています。
波は随時勝手に発生するプログラムのはずなのですが・・・

317:311
08/01/01 09:53:29
>>312
すいません。そしてありがとうございます
寝ぼけてて文章まとまってなかったんですが、
ふつうDirectDrawをウィンドウモードで使う場合はLPDIRECTDRAW+LPDIRECTDEVICEを1つ作って
サーフェイスを必要なだけ作ってプライマリに転送で十分ですよね?
ただウィンドウを複数作るならウィンドウ1つにつきLPDIRECTDRAW+LPDIRECTDEVICE1つ用意
ということでよろしいでしょうか?

318:デフォルトの名無しさん
08/01/01 10:26:32
あけましておめでとうございます。
こちらはManaged DirectXについての質問もOKでしょうか?
Managed DirectXスレが11月で止まってしまっているので…。

319:デフォルトの名無しさん
08/01/01 10:27:03
>>316
確かにそのままだと動かないね

7900GTでは普通に動いてて
そっちで自分用に書き直したプログラムは
8600GTでも普通に動いているのだが・・・
どこ直したのか覚えてないや

320:314
08/01/01 14:14:29
>>319
けっこう環境に左右されるみたいですね。
自前で組んでみようとしましたが挫折しました。

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

321:デフォルトの名無しさん
08/01/01 16:33:49
>>304お願いします

322:デフォルトの名無しさん
08/01/01 17:13:13
>>321

OpenGL
// 行列モードに射影行列を選択
glMatrixMode(GL_PROJECTION);
// 射影行列を生成
glFrustum(,,,,

DirectX(固定機能パイプライン使用)
//射影行列を生成
D3DXMATRIX matProj ;
D3DXMatrixPerspectiveFovLH(&matproj,,,,,
//デバイスに射影行列を渡す
device->SetTransform(D3DTS_PROJECTION, &matProj);

頂点シェーダを使って行列変換をするなら
D3DTS_PROJECTIONは使わない
直接生成した行列をエフェクトに渡すなりすればいい


323:デフォルトの名無しさん
08/01/01 17:18:30
あ、すまない
glFrustumなら
D3DXMatrixPerspectiveOffCenterLH
のほうが近いか

324:デフォルトの名無しさん
08/01/01 17:20:25
そして、さらに連投すまそ
OpneGLは右手座標系だったね
D3DXMatrixPerspectiveOffCenterRH
ってことで

325:デフォルトの名無しさん
08/01/01 17:45:33
丁寧にありがとうございます。
つまづいたらまた質問させてください。

326:デフォルトの名無しさん
08/01/01 23:29:11
c#でMDIなフォームに対して、親フォーム、子フォーム、各コントロールを
DirectXで描画しようとしてよく分からなくなっています。
SwapChainとかいうのを描画対象の分だけ作るというところまでは
調べたのですが、具体的にどういう風に書けば良いのかが分からず、解説サイトを
探しているのですが、ヒットしない状況です。
c#で、そこら辺を解説してあるサイトがありましたら、教えていただけますでしょうか。
よろしくお願いします。

327:デフォルトの名無しさん
08/01/02 09:04:55
すいません。
今、DirectX 9.0SDKを使っているのですが、
DirectX関連の書籍を購入したら、付属のCDに、DirectX SDK (Fedruary2007)が入ってました。
このバージョンをインストールした場合、9.0SDKを使ってた時に作った物が
動かなくなる可能性はあるでしょうか?
Fedruary2007の方は、DirectX9に対応しているSDKのようなのですが、
何か心配なので教えてください。
両方共、殆ど同じ仕様なら良いのですが・・・

328:デフォルトの名無しさん
08/01/02 09:22:47
>>327
ほとんど同じではあるが
まったく一緒ではないんで動かなくなる可能性はある
メッシュやエフェクト関連で
互換性の無い変更があったので・・・・

まぁ、でもいつまでも旧バージョンに
しがみついていられるわけでもないので
いい機会だからさくっと修正してみるのも良いかもしれない
たいした変更ではないしね

329:デフォルトの名無しさん
08/01/02 09:33:37
>>328
そうですか。
ありがとうございます。
メッシュ機能も使ってるので、ちょっと恐いですが、
ほとんど同じなら、動かなくならない事を祈って新しい方に変更してみます。

330:デフォルトの名無しさん
08/01/02 16:14:48
DirectX9.0cで、モニタの解像度を切り替えられるようにしたいのですが、
プログラムが実行されるPCでの利用可能な解像度を取得するには
どのようにすればいいのでしょうか

331:デフォルトの名無しさん
08/01/02 16:57:25
>>330

// 適当
int retW[32] ;
int retH[32] ;

// 引数は自分の調べたいアダプタとフォーマットで
int num = (IDirect3D9)->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8 ) ;

for ( int i = 0 ; i < num ; i++ ){
D3DDISPLAYMODE dm ;
DXUTGetD3DObject()->EnumAdapterModes ( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &dm ) ;
retW[i] = dm.Width ;
retH[i] = dm.Height ;
}



332:330
08/01/02 16:59:51
DXUTGetD3DObject()は忘れてくれ
そこは自分の作ったIDirect3D9インターフェースで

333:デフォルトの名無しさん
08/01/02 18:35:06
線分を描画する際、線分の太さを変更したいのですが可能でしょうか?

334:333
08/01/02 19:05:16
自己破産しマスタ

335:デフォルトの名無しさん
08/01/02 22:27:13
>>331
ありがとうございます。うまくいきました

336:デフォルトの名無しさん
08/01/02 23:31:34
3Dを回転させるのにクォータニオンを使おうと考え色々と調べたのですが思うように回転してくれません。
D3DXQuaternionRotationAxisを使う時に回転の軸を設定する必要があるようなのですが、この軸の設定がいまいち分からず・・・。
どうかこの回転の軸の設定をどうすればいいのか教えてください、お願いします。

337:デフォルトの名無しさん
08/01/02 23:51:54
>>336
Matrixでyawrollpitchから生成して、matrix to quoternionで変換したら?

338:デフォルトの名無しさん
08/01/02 23:52:43
>>336
クオータニオンでググれよ。

339:デフォルトの名無しさん
08/01/03 14:22:30
640×480の画面と800×600の画面で全く同じ画面イメージで描画したいのですが
スクリーン座標を変換するのをDirectXが自動でやってくれるような設定はありますか?
それともバックバッファサイズを統一するとか自前で座標変換するかしかないですか?

340:デフォルトの名無しさん
08/01/03 15:33:29
誰か
URLリンク(msdn.microsoft.com)
の引数の説明の解説求む(;ω;)
↓がダメなんじゃが・・・

RECT rc={0,0,640,480};
RGNDATA rgn={0};
DWORD size;
if(FAILED(surface->GetClipper( &clipper )))return;
if(FAILED(clipper->GetClipList( &rc ,&rgn,&size)))return;      <-ここで終ってる


341:330
08/01/03 16:02:08
>>339
ビューポートの設定をきちんとすれば
アス比も一緒だしまったく同じように描画されるはずだが

>>340
SetしてないものをどうやってGetするんだ?
てか、戻り値が何かくらいチェックして報告しろ

342:340
08/01/03 16:52:23
>>341
早速ありがとうございます。m(_ _)m戻り値は引数エラーのコードでした。
アホな発言かもしれないですけど、もしかしてプライマリサーフェイスって
PCのディスプレイのサイズで作られるんですか?

343:デフォルトの名無しさん
08/01/03 17:40:37
>>341
レスありがとうございます。ですがさっぱりわかりません。

2Dのスプライトを同じようにしたいのですが
640×480と800×600の場合、ビューポートというのは
どのように設定すればよろしいのでしょうか?

344:339 343
08/01/03 18:18:04
ちなみに今だとD3DXMatrixTransformation2Dで2D座標を取得する際に
拡大比率のX,Yの値に ( 800 pixsel / 600 pixsel ) = 1.25 を指定しています

ビューポートというのを設定するとこのやり方より処理は軽くなりますか?

345:339 343
08/01/03 18:19:25
800 / 640でしたorz

346:デフォルトの名無しさん
08/01/03 19:25:21
>>345
なんでそういう質問が出るのかがよくわからんが一般的に

D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = 640;
vp.Height = 480;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;
(device)->SetViewport(&vp));

と設定すれば
射影行列変換後の座標を
640x480のスクリーン座標に自動変換してくれる

どういう射影行列をつくってるのかは知らんが
射影行列変換後までの座標は
x=-1~1、y=-1~1、z=0~1となり
どれらいのスクリーンに引き伸ばすのか?というのが
ビューポートだと思えばいい


347:デフォルトの名無しさん
08/01/03 19:25:57
URLリンク(www.google.co.jp)

348:339 343
08/01/03 19:56:50
>>346
たびたびすいません。それってスプライトの座標指定を-1~1の座標で
指定しなくてはいけないと言う解釈でいいのでしょうか?

例えば640×480のフルスクリーンの画面上で、スプライトの座標をX = 64,y = 48という
座標で指定した場合の見た目の位置と同じところに
800×600のフルスクリーン画面上でx=64,y=48というスプライト座標を指定した時に
画面上の同じあたりの位置に表示したいという事なんですが

そこで示されてるようにビューポートを指定するとこのようにできるのですか?

349:339 343
08/01/03 20:00:53
ちょっと説明が足りませんでした
スプライトの描画時にx=64、y=48という座標を指定した場合に
640×480の画面の場合はX=64、y=48
800×600の画面の場合はX=80、y=60の位置に描画したいという事です


350:298
08/01/04 06:27:46
SDKのサンプル見たんですが、やっぱり分かりません・・・

SDK Tutorial6のトラの代わりに、地面に見立てた板ポリゴンのXファイルをロードしています。

地面との当たり判定は(自機の高さ - 自機から垂直に降ろした直線とポリゴンの交点の高さ)
でできると思うんですが、"自機から垂直に降ろした直線とポリゴンの交点の高さ"の求め方がさっぱり分かりません。

かなり検索したんですが、数学的な解説しかしているサイトがなくて、肝心な、自分が分からない部分が書かれているサイトが見つかりません。
ヒントか答えか参考になるサイトがあったら教えてください。

351:デフォルトの名無しさん
08/01/04 08:28:10
Xの読み込みをD3DXに頼らないでやるところから始めろ。
そうやって怠けて手抜きをするから途中で詰まる。

352:298
08/01/04 08:59:56
>>351
D3DXライブラリというやつですか?
なんか難しそうですがやってみます。

353:喜一
08/01/04 14:12:47
くだらない質問なのですが・・・
DirectXをアップデートするにはどうしたらよいのでしょうか・・・

354:デフォルトの名無しさん
08/01/04 14:37:39
>>353
SDKでしたらこちらで
URLリンク(www.microsoft.com)

ランタイム版でしたらこちらでダウンロードしてください
URLリンク(www.microsoft.com)

とりあえず今入っているダイレクトXをアンインストールしてから
インストールがいいらしいです


355:デフォルトの名無しさん
08/01/04 14:44:04
あ、ランタイム版はアンインストールの必要はないっぽいです

356:デフォルトの名無しさん
08/01/05 13:59:05
>>339,343,349
D3DXMatrixOrthoOffCenterLHで射影行列を設定すればいい。
画面の左上と右下の座標値を設定するだけ。
ワールド行列とビュー行列は単位行列にする。
頂点フォーマットは未変換のもの(rhw無し)を使う。

357:デフォルトの名無しさん
08/01/05 15:14:35
RHWのRHって何の略ですか?
LookAtRHとかのRHとは別物ですよね?

358:デフォルトの名無しさん
08/01/05 15:29:44
reciprocal of homogeneous

359:デフォルトの名無しさん
08/01/05 15:48:52
レイプ変態わいせつの略です

360:デフォルトの名無しさん
08/01/05 17:09:49
システムメモリー上のサーフェイスに直接アクセスするときは
Lockしなくていいってほんと?いきなりddsd.lpSurfaceにアクセスできる?

361:デフォルトの名無しさん
08/01/05 19:05:53
DirectX SDKをインストールしたんですけどインストールしたバスの場所が分かりません
一応{D¥Program}にインストールしたつもりですが{DIRECTX9SDK}が見つかりません
{Redist}{Samples}{Utilities}{Developer Runtime}{Documentation}{Extras}{Include}{Lib}はあるんですけど
プログラムの追加と削除には登録されてるみたいなんですけど肝心のバスが分かりません
バスの調べかたなど知ってる方がいたら教えてください

362:デフォルトの名無しさん
08/01/05 19:48:45
VCを使ってたら知る必要もないけど別ので作るのかな
SDKはあくまで金槌や釘などと同じく道具だから本体は無い。
重要なのはIncludeフォルダとLibフォルダで、まぁ説明書と目次みたいなものか。
IncludeフォルダとLibフォルダが分かっていれば、それぞれのパスを登録するだけでOK



363:デフォルトの名無しさん
08/01/05 19:57:14
レスありがとうございます
もう1つ質問なんですけど、VC++で使うにはサブシステムのバス通さなきゃいけないと思うんですけど(ネットや書籍で書いてた)
ですがdxsdk_november2007では勝手に登録してくれるんですか?
インクルードファイルに{Include}が登録されてあったり
ライブラリファイルには{Lib\x86}が登録されてるんです
ちなみにインストール前は登録されてなかったです
これはどういうことなのでしょか?この上に新しく登録しなきゃいけない?それとも自動で行われてるからやらなくていい?
分かる方いたら教えてください

364:デフォルトの名無しさん
08/01/05 20:05:16
別に説明書や目次が重複しても問題ないだろ、無駄なだけで。

365:デフォルトの名無しさん
08/01/05 20:17:16
なるほどじゃぁ登録します
ありがとうございました

366:デフォルトの名無しさん
08/01/05 20:41:02
VisualStudio2003 Spoke VersionのMSDNライブラリにはVisualBasic以外のDirectXの解説を
インストールできますか?VisualBasicしか検索でてこないので・・・
お願いします。


367:デフォルトの名無しさん
08/01/05 21:39:46
ビルドは正常終了するのにデバックだとエラーが出るんですけどどうしてなんでしょうか?
エラー文は以下の通りです


------ ビルド開始: プロジェクト: MuscatBoy, 構成: Debug Win32 ------
コンパイルしています...
StageMenu.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Stage4.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Stage3.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Stage2.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Stage1.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Ranking.cpp

368:デフォルトの名無しさん
08/01/05 21:40:19
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
Option.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
MyGameLib.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
コードを生成中...
ビルドログは "file://d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\BuildLog.htm" に保存されました。
MuscatBoy - エラー 8、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========







よろしくお願いします

369:デフォルトの名無しさん
08/01/05 21:46:35
ビルド自体失敗してるやんw

370:デフォルトの名無しさん
08/01/05 21:55:46
見間違いしてましたビルドでも失敗してました
ですがこれサンプルなので自分では一切さわってないものなんですけど・・・
サンプル自体糞ということですか?

371:デフォルトの名無しさん
08/01/05 21:56:01
>>368
SDkNovember2007から
DirectMusicをサポートしなくなった

372:デフォルトの名無しさん
08/01/05 22:05:32
てことはAugust 2007 DirectX SDKをDLしないといけないんですね
助かりましたありがとうございました

373:デフォルトの名無しさん
08/01/06 00:07:52
DirectMusicなくなっちゃったのか
音の再生はMusicしか使ってないと言うのに

374:デフォルトの名無しさん
08/01/06 11:57:29
一昨日最近アップされた(?)DirectX9.0C(4.09.0000.0904)ってやつに
したんだけど、次の日からパソコンが立ち上がらなくなり(黒い画面で
左上に文字カーソルが点滅のまま)仕方ないので、F8で前回正常にっての
選んでから起動させたんだけど、今日完全に起動しなくなった・・・

人によっては、最悪なケースになるのかな?

375:デフォルトの名無しさん
08/01/06 12:28:09
DirectX3位までは、ドライバまで置き換えられることがあって、
その結果起動しなくなったって話がたまにあったよね。

376:デフォルトの名無しさん
08/01/06 12:34:53
DirectX「3位」ってなんだろうと思った

377:デフォルトの名無しさん
08/01/06 12:36:26
d:\ゲーム製作案追加\

warota(w

378:デフォルトの名無しさん
08/01/06 12:42:03
>>374
ぶっちゃけDirectXのせいじゃないんじゃね?
ランタイム入れなおしたなら
再起動求められたはずだしそのときは正常起動したんだろ?
他になにかやらかしてないかよく思い出せ

あと一昨日アップされたやつなんてあったっけ?

379:デフォルトの名無しさん
08/01/06 12:45:00
>d:\ゲーム製作案追加\
ワロタw

380:デフォルトの名無しさん
08/01/06 15:03:39
>>360スルーされてるけど、知らない??

381:デフォルトの名無しさん
08/01/06 15:30:37
昔やねうらおがそんなこと言ってた希ガス。
URLリンク(www.sun-inet.or.jp)

382:デフォルトの名無しさん
08/01/06 15:44:49
>>380
おまえは何を言ってるんだ?とか思われてる予感。

DirectX7のDirectDrawのヘルプを見る限り、
そんな保証はどこにもされていない。
ただし、現実問題としてはできるらしい、と。
非Lock状態だからといって、わざわざアドレスを動かすような理由も無いし。

ちなみに>>381のサイトは既に6年以上も前の記事だから現状は不明。
仮にLockしたところで、パフォーマンスへの影響は無いに等しい気がする。

383:デフォルトの名無しさん
08/01/06 17:33:36
DirectMusicなくなったのかよ
DirectShowでMP3とかしか流せなくなったのか?

384:デフォルトの名無しさん
08/01/06 18:21:16
>>381-382
禿しくサンクス
>>382
そんなこと言ったって資料は出てこないし余りにも未開の地過ぎて右も左も分からんのだよ・・・


385:デフォルトの名無しさん
08/01/06 19:04:35
DirectX9のサイトとか普通にあるけど

386:デフォルトの名無しさん
08/01/06 19:07:13
てか
それこそ自分で試してみれば良いんでね?

387:デフォルトの名無しさん
08/01/06 19:14:08
所詮、現在のグラフィックカードは、IntelかAMDかnVidiaしかないも同然だから、
3種類試せばおkじゃね。

388:367
08/01/06 21:19:00
August 2007 DirectX SDKをインストールしたのですがまたエラーがでました
分かる方いたら教えてください


'MuscatBoy.exe': 'D:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\MuscatBoy.exe' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
'MuscatBoy.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\user32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\gdi32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\ole32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\advapi32.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\rpcrt4.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\d3d9.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\d3d8thk.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\version.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\winmm.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\d3dx9_35.dll' を読み込みました。シンボルが読み込まれていません。
'MuscatBoy.exe': 'C:\WINDOWS\system32\dinput8.dll' を読み込みました。シンボルが読み込まれていません。
プログラム '[4068] MuscatBoy.exe: ネイティブ' はコード 0 (0x0) で終了しました。

389:デフォルトの名無しさん
08/01/06 21:21:34
別にエラーなんか出てないだろ。
デバッグ実行してみたけど、シンボル情報がない、というInfoだけ。
最後は、MuscatBoyが終了した、ってだけ。

390:367
08/01/06 21:25:23
そうだったんですか
デバック後アプリ出てこなかったのでエラーだと思ってました
ありがとうございました

391:デフォルトの名無しさん
08/01/06 22:23:26
>390
悪いことは言わんからツクールでも使っとけ。


392:デフォルトの名無しさん
08/01/06 22:42:35
バンプマップでメカのモールドを表現しているんですが、これだと環境光だけの陰の部分は溝が
出てこず、のっぺらりんとしてしまいます。
これの対応策としては、テクスチャで描いた溝と組み合わせる、くらいでしょうか?
他に良い方法があるようでしたらご教示ください。

393:デフォルトの名無しさん
08/01/07 00:43:50
>>391
いや、最初はわけわからんだろ?

394:デフォルトの名無しさん
08/01/07 00:44:59
ピクセルシェーダからスカラ値を出力 -> 入力したいんですが、
レンダリングターゲットのビット深度が最高16bit x 2だったので
それを32bit x 1にする変換を組み込みました。

// ピクセルシェーダ出力
vOutColor.x = sSrcColor * 65536.0f;
vOutColor.y = sSrcColor * 65536.0f * 65536.0f;
vOutColor = floor(vOutColor) / 65536.0f;
vOutColor = frac(vOutColor);

↑この出力を↓この入力に

// ピクセルシェーダ入力
sInColor = vSrcColor.x;
sInColor += vSrcColor.y / 65536.0f;

しかしこれだと、ノイズが乗って正しく処理できないのか画像にゴミが出ます。
普通に16bit x 1でおこなった場合はゴミは出ません。
シェーダの精度の問題かと思い、65536.0fではなく256.0fでやっても同様でした。
せっかく高精度にしたのに、逆の結果になって哀しいんですが
何でだと思いますか?
GPUはラデオン9700です。

>>392
バンプマップが光の入射ベクトルと法線ベクトルの差で
陰影をつけるテクニックなら、無指向の環境光で
陰影がつかないのはそれで正しい結果だと思うけど。
対策としては、ディレクショナルライトに変えるか
環境光に擬似的なライトの位置や方向を設定してみては?

395:デフォルトの名無しさん
08/01/07 00:59:35
参考書についてきたアニメーション入りのXファイルはちゃんと動くのだが、
どっかから拾ってきたXファイル(アニメ入り)が動かない(表示はされる)。

現在は再帰でフレーム走査して云々って処理してるんだけど、
これは拾ってきたXファイルが悪いのだろうか?
ちなみにXファイルをダブルクリックして起動するソフトで見るとメチャクチャ。

396:デフォルトの名無しさん
08/01/07 01:46:41
>>395
Xファイルのフォーマットに癖があるからw

少なくとも俺は、どのフォーマット(Xファイルの方言みたいなもんw)にも
対応したXファイル読み込み→表示ってのは見たことない
書き込み→読み込みも同様

ちなみに
・メッシュのみ
・フレームとメッシュ混合
・アニメーション+アニメーション対応フレーム+メッシュ
・アニメーション+アニメーション対応フレーム+メッシュ+フレーム(アニメーション非対応)
・ワンスキン
・ワンスキン+アニメーション
・スキンメッシュ+アニメーション+フレーム(アニメーション非対応)+メッシュ
・なんだかよくわからん名前でモデルのインスタンスを共用してるやつ(イミフw読めたのみたことないw)
・他多数
等、すべてに対応しようとすると組み合わせが鬼

結論:Xファイルは考えるだけ無駄(考えるな感じろ)
補足
 まあ、どっかの入門サイトでそいつができるって言った方法や内容以外の用途で使わないのが頭のいい使い方
 そうすると応用が利かないし、ツール上で1つばっかりモデル作ってはいおしまいなんてありえないから
 実際はXファイルなんて使ってなんとかしようとすると「ああ、こんなことなら違う方法でやっときゃよかった」ってなるんだよね
 ま、アニメーション使わなきゃ余裕だし、結構使えるから自分ができる範囲でなんとかしなさいな おしまい

397:デフォルトの名無しさん
08/01/07 01:58:07
>>394
その式は 0.0≦sSrcColor<1.0 ならいいけど、
sSrcColor=1.0 の場合 多分 0.0 になっちゃうわね。(frac(1.0)=0.0)
vOutColor = frac(vOutColor); を
vOutColor.y = frac(vOutColor.y); (上位側(x)をfracしない)
にしてもダメかしら。

398:デフォルトの名無しさん
08/01/07 02:23:52
>>397
直りました!
まさにそれでした。
ありがとうございました。


399:デフォルトの名無しさん
08/01/07 02:58:12
>>394
それで本当に精度がよくなってるか、確認した方がいいかと。
俺は以前ピクセルシェーダで1/640を計算させただけで精度が悪くて
使い物にならなかったよ。

400:デフォルトの名無しさん
08/01/07 09:39:25
クライアント領域全体をキャプチャして.jpgなどの画像として保存できる関数ってありますか?

401:デフォルトの名無しさん
08/01/07 10:02:13
ありません

402:デフォルトの名無しさん
08/01/07 13:17:11
>>396
レスサンクス。やはりフォーマットの問題だったか。
どっかでフォーマットに注意すべし!って聞いたことあったのでもしや・・・と思ったがやはり。
まぁ、注意するだけで何もできないのだけどw

つまり、アニメしなかったらグラフィッカーに文句言えばおkってことですね。

403:K田
08/01/07 13:36:38
FortranをC言語に直すことが出来なくて…
やってくれ☆


404:デフォルトの名無しさん
08/01/07 15:22:46
Direct3Dのついて質問です。

デバイス初期化の際にHWNDが必要ということは、複数のウィンドウが開かれるアプリケーションの場合
ウィンドウごとにデバイス初期化が必要ですよね?

ということはそのデバイスを通じてロードされるテクスチャもウィンドウ毎にロードする必要があるのでしょうか?

例えばAというPNGファイルをロードしたテクスチャを、ウインドウAでもウインドウBでも使いたい場合、A用B用と@別個にロードするのでしょうか?
VRAMもったいないなぁという気分なのですが…)

405:デフォルトの名無しさん
08/01/07 15:55:00
>>404
まずはFAQを全部読むんだ
URLリンク(msdn.microsoft.com)

406:デフォルトの名無しさん
08/01/07 16:16:10
>>405
>1 つの Direct3D デバイスのみを使う。複数のターゲットにレンダリングする必要がある場合は、SetRenderTarget を使います
これですね
ありがとうございます。
昔作ったSwapChain管理クラスひっぱりだします(何のために作ったのかを失念してましたわ…)

407:374
08/01/07 17:51:32
>378
すいません、一昨日というのは4ゲーマーを見た時でした。
で、インストール完了後は再起動を求められなかったのでその日は
そのままパソコンを落としたと・・・
で、次の日に起動したらその症状が出てたという訳です(^^;

408:デフォルトの名無しさん
08/01/07 18:04:43
>>402
データを追ってどこに問題があるのか確認するのがプログラマの仕事だろ。
使えないなら自分でまともなエクスポータを書いてグラフィッカーに渡

409:392
08/01/07 18:59:03
>>394
>陰影がつかないのはそれで正しい結果だと思うけど。
それを承知の上での質問です。

>環境光に擬似的なライトの位置や方向を設定してみては?
なるほど!
ありがとうございました。

410:304
08/01/07 21:49:45
今まで、

// 射影行列の初期化
D3DXMatrixIdentity(&m_proj);
D3DXMatrixPerspectiveFovLH(&m_proj,
D3DXToRadian(45.0f),//カメラの画角
aspect, //アスペクト比
1.0f, //Nearプレーン
1000.0f); //Farプレーン
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);

と参考書のサンプル通りにしていたところを、>>322-324さんのを参考に

D3DXMatrixIdentity(&m_proj);
D3DXMatrixPerspectiveOffCenterLH(&m_proj,
-CLIENT_WIDTH * 0.5f,
CLIENT_WIDTH * 0.5f,
-CLIENT_HEIGHT * 0.5f,
CLIENT_HEIGHT * 0.5f,
1.0f,
1000.0f);
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);

に変更しました。

すると、Xファイルを読み込んでCGを描画していたのですが、表示されなくなってしまいました。
何が原因なのでしょうか?

411:デフォルトの名無しさん
08/01/07 22:20:14
>>410
OffCenter の引数をちゃんとカメラ座標系で指定しているか?

412:デフォルトの名無しさん
08/01/07 23:19:34
シェーダ解説本を見ていると、アプリケーションからシェーダ変数を設定する際にハンドルを介して
行うものがありますが、直接"(シェーダ変数名)"で指定するのに対し、どういった利点があるのでしょうか?

413:デフォルトの名無しさん
08/01/07 23:27:33
>>412
パフォーマンスが上がる
ハンドルは固定なので
一番最初に一度だけ取得するだけで良い

414:412
08/01/07 23:31:05
>>413
なるほど!
ありがとうございました!

415:デフォルトの名無しさん
08/01/08 00:32:52
C言語でコンパイルすると○○(ファイル名).OBJが開けませんと出るんですが、
原因は何でしょうか?

416:415
08/01/08 00:33:48
すみません、誤爆しました。

417:デフォルトの名無しさん
08/01/08 00:47:05
設定されているパスにそのOBJがないからです

418:410
08/01/08 17:13:47
すいません、これを忘れていました。

#define CLIENT_WIDTH 770
#define CLIENT_HEIGHT 480

>>411
DirectXは左手座標系ですよね。

-CLIENT_WIDTH * 0.5f = -335
CLIENT_WIDTH * 0.5f = 335
-CLIENT_HEIGHT * 0.5f = -240
CLIENT_HEIGHT * 0.5f = 240

になるので、特におかしくない気がするのですが…。

419:デフォルトの名無しさん
08/01/08 17:37:23
>>418
glFrustumも
D3DXMatrixPerspectiveOffCenterLHも
クライアントサイズを指定するものじゃないぜ

OpenGLの知識があって
OpenGLのプログラムをDirectXに移植するとかで
こんな面倒なことしてるんじゃないのか??


420:デフォルトの名無しさん
08/01/08 21:18:19
そもそもDirectXに座標系など無い。
決めているのはプログラマ自身でDirectXは何の関係もない。

421:デフォルトの名無しさん
08/01/08 21:39:36
使ってるモデリングソフトにあわせると吉
そうでなくても吉

422:デフォルトの名無しさん
08/01/08 22:21:10
目的がよくわからんな
2Dと同じ座標感覚にしたくて
ニアクリップ面を画面サイズに合わせて
適正な画角になるようにカメラを設置するってことなのか?

423:デフォルトの名無しさん
08/01/08 22:50:11
2Dゲーなら大事だけど3Dゲーではたいして大事ではない

424:デフォルトの名無しさん
08/01/08 23:14:47
ファーストフードにはあるけどコンビニにはない。
auにはあるけどdocomoにはない。


425:410
08/01/08 23:29:33
すいません、実は>>234も私なのですが、目的は「斜め投影変換」です。
OpenGLの知識は全然ありません。
OpenGLなら↓のURLのように、glFrustumを用いれば実現できると聞いたので、DirectXでglFrustumを実装しようとしていました。
(URLリンク(www.vsl.gifu-u.ac.jp))


426:デフォルトの名無しさん
08/01/09 00:54:37
行列変換理解しろ。


427:デフォルトの名無しさん
08/01/09 00:57:46
無理じゃねぇかなぁ

428:デフォルトの名無しさん
08/01/09 13:28:35
glFrustumもD3DXMatrixPerspective*****も
あくまで透視変換をするための行列を生成するものだから
どういじろうと物体が歪んだりはしない
簡単に言うと
カメラの近くにある物を大きく遠くにある物を小さく描画するためのもの
もし行列変換でやるなら
その斜め投影変換とやら専用の行列を生成する必要がある

てか斜めにしたいだけなら
適当な板にレンダリングして頂点を移動するだけでいい気もするんだが
そもそもなんでそんなことしたいわけ?

429:デフォルトの名無しさん
08/01/09 15:55:45
>>425
411,419が何を言ってるのか理解できるまで、もっと勉強しる。

410のパラメータのD3DXMatrixPerspectiveFovLHで得られた行列と
D3DXMatrixPerspectiveOffCenterLHで得られた行列を見比べるだけでも
何が間違っているのかなんとなく分かるだろう。
D3DXMatrixPerspectiveOffCenterLHに何を与えれば、元の行列と同じ行列が
得られるのか考えてみろ。

430:デフォルトの名無しさん
08/01/10 00:22:50
DirectX9.0cなのですが、
DirectMusicで、今現在再生しているセグメントの曲の再生が
終了したかどうかというのを調べるにはどうすればいいのでしょうか

再生終了していればそのセグメントを開放し、そこを別の曲に差し替えたいのですが
肝心の終了したかどうかの判別の仕方がわかりません

知っている方いたら教えてください。よろしくお願いします

431:430
08/01/10 21:50:25
自己解決しました

432:デフォルトの名無しさん
08/01/11 00:06:25
自己じゃねえだろ
マルチな上に嘘まで書くのかよ

433:430
08/01/11 00:58:35
>>432
あなたがマルチとおっしゃっているのは外部サイトの話ですか?
そこを見ればわかりますが、自分で解決していますよ。
それ以外の方法も教えてもらうことができましたけど。

それに、このスレッドのテンプレには外部で質問してはいけないなどと書いてないですし。
色々なサイトを利用して、できる限りの情報を集める事がそんなにいけない事なのでしょうか?
どのスレでも同じルールだと決め付けるのはやめましょう。

434:デフォルトの名無しさん
08/01/11 01:06:08
>>433
一般的な常識として、複数箇所に同じ質問を投げるのは避けるべきです。

435:デフォルトの名無しさん
08/01/11 01:06:33
>>430 >>432じゃないが、マルチと分っててやってるなら尚更だが、
そういうのはいけない事。どのスレでも・・・・とかのLvじゃなくて、ネットでは原則的なぐらいのルール。



436:デフォルトの名無しさん
08/01/11 01:09:59
URLリンク(ja.wikipedia.org)
URLリンク(www.ippo.ne.jp)
URLリンク(e-words.jp)
ここらにも書いてあるが、ネット創世記からある基本的なマナー違反。
マルチポストはスレや板のルールとか以前の問題。

437:デフォルトの名無しさん
08/01/11 01:10:24
心がせまいなぁ
俺ルールをネット原則とかもうね

438:デフォルトの名無しさん
08/01/11 01:13:07
そうそう、「俺様ルール」を持ち出して、マルチを正当化するなんてどうかしているよね。

439:430
08/01/11 01:20:38
>>436
はあ。ネット原則なのかどうかはともかく、嫌う人も多いのだということですね
こちらで答えてくれる人が早くいらっしゃれば、外部で質問する事もなかったのですが…
これからはなるべく気をつけて書き込む掲示板を選ぶ事といたします。
ご忠告どうもありがとうございました

440:デフォルトの名無しさん
08/01/11 01:22:32
訳 : 使えねー掲示板だな。もうこねーよヽ(`Д´)ノ

441:デフォルトの名無しさん
08/01/11 01:25:30
いいんじゃねーの別に。マルチ嫌うって感覚はよくわからんよ
しょせん掲示板なんて使い捨てなんだしさ

442:デフォルトの名無しさん
08/01/11 01:26:00
ネチケットもしらねえのか

443:デフォルトの名無しさん
08/01/11 01:28:11
ネチケットわきまえてるような人種はここにはいないんじゃないかな

444:デフォルトの名無しさん
08/01/11 01:36:07
ま、向こうの解答者は間違ってるけどな
IsPlayingはスピーカーで音が鳴ってるかどうかを判断するものだから
Playした直後でも鳴ってないという結果になる場合がある
結局の所、メッセージ拾う方が確実に終了を検知できるんだよ

445:デフォルトの名無しさん
08/01/11 01:45:16
これか。糞仕様すぎる
URLリンク(msdn.microsoft.com)

446:デフォルトの名無しさん
08/01/11 02:15:20
所詮MSですから

447:デフォルトの名無しさん
08/01/11 02:34:32
ネチケットとかもう死語じゃね?

掲示板であろうとログが残り、そのログは将来同じような問題を抱えた人間にとって有益なものとなりうる。
複数サイトでの同様の質問は検索を困難にさせ、解決方法を見つけにくくなる。
そうなればまた同じ質問をすることになる。ネットの世界であろうとリソースは有限なので無駄であることに変わりはない。

とかキモイこと書いてみましたw
ぶっちゃけ回答する側の人間はいろんなサイトを回っていることが多く、マルチは実際問題よく見かける。
解決したならその方法や、今回の場合であれば解決した側のサイトのアドレスでも張ってくれれば多少はよかったかな?


448:デフォルトの名無しさん
08/01/11 03:12:44
むしろ複数サイトに書いてあったほうがみつけやすくていいよ

449:デフォルトの名無しさん
08/01/11 03:16:00
何も答えもしない相手に解決方法書く馬鹿がどこにいるんだよ

450:デフォルトの名無しさん
08/01/11 03:50:47
一箇所にしかない答えってのは結局、他の可能性を潰してるだけだと思うんだ
その答えが真である保証だってどこにもないんだから
一箇所にしかない答えより、複数の答えがある方がずっといい

451:デフォルトの名無しさん
08/01/11 04:02:03
ぶっちゃけそんなの気にする奴はたいしていない
短気な奴の方が声が大きいのはネットもリアルも同じと言うだけの話

452:デフォルトの名無しさん
08/01/11 07:13:46
俺は2ちゃん以外みてないからマルチOKだよ
マルチが嫌な人は2穴責めが嫌な人だと思う

453:デフォルトの名無しさん
08/01/11 10:30:38
これはひどい自演ですね。

454:454
08/01/11 10:37:00
自己解決しました

455:デフォルトの名無しさん
08/01/11 11:04:12
カスラックみたいな事言うなよ
コピーワンスなんて馬鹿馬鹿しいものが導入されたせいで
後世に文化を繋ぐことが困難になってしまったというのに

456:デフォルトの名無しさん
08/01/11 11:18:57
カスラックは好かんけどコピーワンスと文化云々は関係ねーだろ(w

457:デフォルトの名無しさん
08/01/11 11:44:31
関係あるだろ
マイナー番組を録ったメディアが劣化したら取り返しが利かなくなるんだから

458:デフォルトの名無しさん
08/01/11 12:16:58
>>452
ケツの穴のちいさい奴だな

459:デフォルトの名無しさん
08/01/11 13:07:00
俺はマルチよりあおいちゃんの方が好きだな

460:デフォルトの名無しさん
08/01/11 13:19:03
なんでDirectX関連以外の話題だと盛り上がるんだよw

461:デフォルトの名無しさん
08/01/12 00:18:54
DirectXゲームグラフィックスプログラミングVer.2.1Vistaのサンプルで


//カメラのパラメータ設定
// ビューポートの取得
D3DVIEWPORT9 vp;

if(FAILED(pD3DDevice->GetViewport(&vp))) {
return;
}

// アスペクト比の計算
float aspect;
aspect = (float)vp.Width / (float)vp.Height;
(以下略)

とあるのですが、
vp.Widthとvp.Heightを見てみると0と770になっていました。
vp.Widthが0になっているせいでaspectが正常に取得できません。
なぜ0になっているのでしょうか?

462:デフォルトの名無しさん
08/01/12 00:28:18
>>460
俺がよく燃える燃料を投下してしまったからorz

463:デフォルトの名無しさん
08/01/12 03:34:32
>>461
SetViewportしてないからじゃ
ちゃんと設定してるかい?

464:デフォルトの名無しさん
08/01/12 17:48:14
direct Showの解説してるサイト知ってる方居たら教えてください。
VC++6.0です。

465:デフォルトの名無しさん
08/01/12 17:56:30
Direct Show 解説で検索

466:デフォルトの名無しさん
08/01/12 19:15:18
>>465 お前に聞いてない。

467:デフォルトの名無しさん
08/01/12 20:05:43
DirectShow で解説、だよなあ。

468:デフォルトの名無しさん
08/01/12 20:09:50
解説じゃなくて検索だった。

469:デフォルトの名無しさん
08/01/12 20:23:03
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch