【C++】 DirectX初心者質問スレ Part4【C++】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/05/08(日) 01:53:41これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する香具師 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part3【C++】
http://pc8.2ch.net/test/read.cgi/tech/1108987183/
0797デフォルトの名無しさん
2005/07/10(日) 12:58:52プログラムは、モジユール単位に分割しますが、良いモジュール分割とは、「独立性の高い分割」であり、「モジュール強度」と「モジュール結合度」で評価できます。
「モジュール強度」
モジュールがどれだけの機能を実現しているかを示す尺度で、強いほど独立性が高い。
種類 モジュール内の関連性 独立性
機能的強度 1つの機能を実現するためだけのモジュール 高 高
情報的強度 特定のデータ構造を扱うためのモジュール
連絡的強度 関連ある逐次的機能で要素が連絡しあうモジュール
手順的強度 関連のある逐次的な機能を扱うモジュール
時間的強度 時間的に連続した複数の機能を扱うモジュール
論理的強度 関連のある複数の機能を扱うモジュール ←お前が言ってるのこれ
暗号的強度 関連のない複数の機能を扱うモジュール 弱 低
0798デフォルトの名無しさん
2005/07/10(日) 13:55:49SetTexture(
DWORD Stage,
IDirect3DBaseTexture8* pTexture
)
関数がうまくいかないみたいです。
warning C4133: '関数' :
'LPDIRECT3DTEXTURE8' と 'IDirect3DBaseTexture8 *' の間で型に互換性がありません。
が出ています。
C++では IDirect3DBaseTexture8* が IDirect3DTexture8*
でも表示されるのはなぜですか?継承構造だからですか?
0799デフォルトの名無しさん
2005/07/10(日) 14:04:24プログラムをコンパイルしようとすると、VC++6.0に
「入力ファイル "d3d9.lib" を開けません」といわれます。
[ツール]-[オプション]の[ディレクトリ]タブの中で
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (JUNE 2005)\INCLUDE
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (JUNE 2005)\LIB\X86
を指定しています。
[プロジェクト]-[設定]の[リンク]タブの中でd3d9.libとd3dx9.libを指定しています。
どうすればちゃんとコンパイルできるんでしょうか?
(>>522 関連のも読みましたが分かりませんでした)
0800デフォルトの名無しさん
2005/07/10(日) 14:15:19ディレクトリタブでちゃんと一番上にくるようにもってきた?
また、指定したディレクトリの中身ってちゃんとある?
このぐらいしか俺にはうかばん・・・。
あと、VC6ってすんなりビルドできるっけ?
そのうちプラットフォームSDK入れろとかあれやれこれやれ嫌になるぐらい警告でると思ったけど。
この機会に諦めてVC.NET買ったら?とか思う・・・。スタンダードで十分だし。
0801799
2005/07/10(日) 14:27:21一番上に来るようにしてあります。
ディレクトリの中に、libファイルがあることは確認しました。
VC.NETですか・・・、アカデミックで安く買えるかなぁ。
でもできればVC6でできればいいんですが。
0802デフォルトの名無しさん
2005/07/10(日) 16:31:18文句言わない。
0803デフォルトの名無しさん
2005/07/10(日) 16:33:400804デフォルトの名無しさん
2005/07/10(日) 16:34:070805798
2005/07/10(日) 16:35:11頂点の設定のフラグが間違っていたみたいです。
それと、IDirect3D8Textureは IDirect3D8BaseTextureの継承になっていました
0806デフォルトの名無しさん
2005/07/10(日) 17:47:50>1つの関数で2つの事が行える関数を使ったときに初めて
そんな関数あぶなくて使えねぇよw 適当なこと言うな
0807デフォルトの名無しさん
2005/07/11(月) 01:37:24うむ。
1関数1機能を徹底してもらわねば困るな。
0808デフォルトの名無しさん
2005/07/11(月) 01:37:460809デフォルトの名無しさん
2005/07/11(月) 01:54:403x3行列にキャストして変換すると思うんですが
この後正規化するべきだと思いますか?
3x3行列が非直交行列である可能性は低いから省くのが
一般的でしょうか?
それとも法線変換用に別に逆転置行列を用意するのが
一般的でしょうか?
0810809
2005/07/11(月) 01:59:212つの質問がごっちゃになってました。
VertexShaderなんですが
法線を4x4world行列で変換するとき
3x3行列にキャストして変換すると思うんですが
この後正規化するべきだと思いますか?
3x3行列がスケーリングを含む可能性は低いから省くのが
一般的でしょうか?
また法線変換用に別に逆転置行列を用意するのは
一般的でしょうか?普通そこまでやらないですか?
0811デフォルトの名無しさん
2005/07/11(月) 02:28:41漏れは直交行列以外がわたる可能性があるときは逆転置も渡してるよ。
スキニングでやるとレジスタ足りなくなるorz
0812デフォルトの名無しさん
2005/07/11(月) 02:30:17変換行列の左上3×3部分が:
・回転のみ(直交行列)なら、逆転置は用意せず、正規化もしない。
・回転と一様スケーリングのみ(直交行列の定数倍)なら、逆転置は用意せず、正規化のみ行う。
・非一様スケーリングやせん断変形を含む一般の行列なら、逆転置を用意して、さらに正規化も行う。
スケーリングやせん断変形を含む可能性が「高いか低いか」の問題ではなく、
あなたの扱うシーンにおいてその可能性が「あるかないか」で明確に判断すべきですね。
0813デフォルトの名無しさん
2005/07/11(月) 02:36:21関係無いとは思う事柄なんだけど、
自分もVC6使ってて、DirectxSDK導入の際に色々面倒臭い事があったよ。
JUNE2005とかSUM2004でもdsound.hでエラーが出るから、
SUM2003を探して導入することをお勧めします。
0814デフォルトの名無しさん
2005/07/11(月) 03:06:31スキニングで行列倍はきついですね。
つーか無理ですよね。
頂点テクスチャを使えばいけるかもしれませんね。
>>812
ライブラリ的なものを作ってるので
判断は難しい・・
のでworldは回転+移動のみ強制、逆転置無しでいこうと思います。
(Shader内でスケーリングの必要性今のところ感じないし。)
ありがとうございました。
0815デフォルトの名無しさん
2005/07/11(月) 04:09:56検索結果が全て無題となって
無題をクリックしても何も反応がありません
使い方を教えてください
0816デフォルトの名無しさん
2005/07/11(月) 13:25:26DirectX9でデバイス初期化して、
ハードウェアT&Lやシェーダはできない?
0817デフォルトの名無しさん
2005/07/11(月) 14:14:410818デフォルトの名無しさん
2005/07/11(月) 22:25:370819デフォルトの名無しさん
2005/07/11(月) 22:29:100820デフォルトの名無しさん
2005/07/11(月) 22:33:37エッチなゲームのモデルファイル ← スネオ担当
0821デフォルトの名無しさん
2005/07/11(月) 22:44:30エッチなゲームのテストプレイ ← ノビタ担当
エッチなゲームの販売 ← ドラ○モン担当
0822デフォルトの名無しさん
2005/07/11(月) 22:48:58夏休みの宿題
0823デフォルトの名無しさん
2005/07/11(月) 22:50:120824デフォルトの名無しさん
2005/07/12(火) 00:28:11エッチなゲームのモデルファイル ← ノビタ担当
エッチなゲームの声 ← スネオ担当
エッチなゲームのテストプレイ ← シズカ担当
エッチなゲームの販売 ← ドラ○モン担当
0825デフォルトの名無しさん
2005/07/12(火) 00:48:160826デフォルトの名無しさん
2005/07/12(火) 21:54:170827デフォルトの名無しさん
2005/07/12(火) 21:59:180828799
2005/07/12(火) 23:23:14返事が遅くなりましたが、JUNE2005を消してSUM2003を入れてみたら、
上手くコンパイルができました。
.NET 2003とか買ったらまた新しいので試してみます。
ありがとうございました。
0829デフォルトの名無しさん
2005/07/12(火) 23:28:27そのほとんどは前面のポリゴンに隠れて見えません。
後ろに回って見えないポリゴンは自分で判定して描画しないといけないの
ですか?
Zバッファとかいうのは関係ないのでしょうか?
0830デフォルトの名無しさん
2005/07/12(火) 23:29:17↓
描画しないようにしないといけない
0831デフォルトの名無しさん
2005/07/12(火) 23:37:53GPUが早期Zテストをサポートしていない限り、そうなるわね。
0832デフォルトの名無しさん
2005/07/12(火) 23:44:12わかりました。
ありがとうございました。
0833デフォルトの名無しさん
2005/07/13(水) 01:02:04早期Zカリングは手前のオブジェクトから先に描画するようにしないと効果が出ないわ。
最近のGPUではほぼサポートされてるみたい。
0834デフォルトの名無しさん
2005/07/13(水) 01:28:570835デフォルトの名無しさん
2005/07/13(水) 01:30:46早期Zカリングがあっても、頂点処理は全頂点に対して行われるわけだから、
頂点シェーダがボトルネックになっている場合はほとんど効果がないね。
>>829のシェーダ負荷バランスがわからないと何とも言えない。
0836デフォルトの名無しさん
2005/07/13(水) 02:13:26頂点変換オーバーヘッドが惜しいなら、一応、
BSPがあるよ。Convexな空間でしかつかえないけど。
0837836
2005/07/13(水) 02:22:19○閉じた空間とそれをポータルで接続したもの
閉じた空間のことをConvexな空間というのと勘違いして覚えてた。
すまそん。
0838デフォルトの名無しさん
2005/07/13(水) 02:49:090839デフォルトの名無しさん
2005/07/13(水) 03:19:03DirectX 9.0b SDK (2002)
と
DirectX 9.0 SDK Update (June 2005)
をインストールすればいいのですか
それとも
DirectX 9.0 SDK Update (June 2005)
これだけでいいのでしょうか
0840デフォルトの名無しさん
2005/07/13(水) 09:13:11いまさら 9.0b 入れる必要はないんじゃないかな。
(ちょっと古い本だと 9.0c に対応してないのもあるけど)
June 2005 でもいいけど、December 2004 あたりにしといたら。
0841デフォルトの名無しさん
2005/07/13(水) 10:25:44>>839
Updateだけでいい。
0842デフォルトの名無しさん
2005/07/13(水) 21:16:590843デフォルトの名無しさん
2005/07/13(水) 21:26:05辞書も引けないの?小学生?
0844デフォルトの名無しさん
2005/07/13(水) 22:05:05で
ぶっちゃけ コンポーネント ってわかりやすく言って何なんですか?
0845デフォルトの名無しさん
2005/07/13(水) 22:11:15辞書も引けないの?小学生?
0846デフォルトの名無しさん
2005/07/13(水) 22:19:490847デフォルトの名無しさん
2005/07/13(水) 22:22:38まずは調べてから、ね。お姉さんとの約束だよ。>>842
0848マイク ◆yrBrqfF1Ew
2005/07/14(木) 00:00:150849デフォルトの名無しさん
2005/07/14(木) 00:25:110850デフォルトの名無しさん
2005/07/15(金) 11:36:42そうだとすると、シェーダーが別のビルボードをZソートなんかしたら
すごいことになりそうなんですけど。
0851デフォルトの名無しさん
2005/07/15(金) 22:31:09お前何言ってんの?
0852デフォルトの名無しさん
2005/07/15(金) 22:35:370853デフォルトの名無しさん
2005/07/15(金) 22:50:59未だに固定パイプライン使いですよ?
0855マイク ◆yrBrqfF1Ew
2005/07/15(金) 23:32:360856デフォルトの名無しさん
2005/07/16(土) 00:01:48バカマイクひさしぶり。なんでこんな所に居るの?
0857デフォルトの名無しさん
2005/07/16(土) 03:07:14で、再生できる物がきたんですけど再生速度の変更で行き詰まりました。
mpegを再生速度 0.5倍速 に設定すると再生できないんです。
- WMP10での話し -
ためしにWMP10で同じmpegを、再生速度 0.5倍速 で再生すると、、
やはり再生できません。
1.0倍速再生→0.5倍速 と、途中から変更した場合は再生できるのですが、
0.5に設定→停止→再生 とすると再生されません。
4、5個のmpegファイルで試してみましたが全て同じでした。
- WMP10での話し 終わり-
IMediaSeeking::SetRate を使用しています。
0.51倍速 だと問題は起きませんでした。
エラーは発生しません。
どうしても0.5倍速で再生したいわけではなく、できないならできないと判定できればいいんです。
何か情報持っている方いますか?
0858デフォルトの名無しさん
2005/07/16(土) 04:56:030859デフォルトの名無しさん
2005/07/16(土) 07:44:47プゲラ
これだから低学歴は困る
0860デフォルトの名無しさん
2005/07/16(土) 08:09:210861デフォルトの名無しさん
2005/07/16(土) 08:14:550862デフォルトの名無しさん
2005/07/16(土) 08:26:000863デフォルトの名無しさん
2005/07/16(土) 15:02:36DirectX9 雨
とかで検索してもなかなかそれっぽいサイトが無くて・・・
0864デフォルトの名無しさん
2005/07/16(土) 16:25:35実際のゲーム買って雨が降ってるシーンを見て研究するのが一番だよ。
こういうことができないといつまでたっても誰かが整備した道だけ
追い続けることしかできなくなっちゃうからたまには研究してみるのもいいんじゃない?
ま、資料があればそれに越したことはないんだけど。無いときはしょーがないっしょ。
0865デフォルトの名無しさん
2005/07/16(土) 16:30:41でもまあ、ちょっとアドバイスすると
調べるときのキーワードを 雨 DirectX9 なんかにするんじゃなくて
モデリングソフトで雨ってどういう風に表現してるのかって知るだけでも
あとはどうとでもなるでしょ。
それがリアルタイムでできるかどうか?また、リアルタイムで表現できるように簡略化できないかどうか?
を考える能力を身に付けようよ。
だからCGWORLDとか雑誌を毎回立ち読みするだけでも実力はついていくと思うよ。
こういう知恵も解説サイトだけじゃ学べないことだぞ。
0866863
2005/07/16(土) 17:02:49DirectX初心者&時間が無い(納期が近い)なので
出来る限りサンプルがほしいところなのです。
0867デフォルトの名無しさん
2005/07/16(土) 17:20:28時間がないならなおさらサンプルなんて読むだけ無駄。
適当に主人公のまわりの空間に雨(ポリゴンで雨っぽい線を描画)して降らせて
地面なんかに可能な範囲で飛沫を付けて終わりでいいじゃん。
もちろん飛沫はビルボード&テクスチャアニメーション。
それっぽく見えるように頑張って終わり。
0868863
2005/07/16(土) 17:25:51Z=0のところで降らせてみようと思うのですが、
その場合でもポリゴンの描画で実行速度は大丈夫でしょうか?
0869デフォルトの名無しさん
2005/07/16(土) 17:28:320870863
2005/07/16(土) 17:43:360871デフォルトの名無しさん
2005/07/16(土) 17:50:13あれは一枚ポリゴンで表現するものなのですか。
モワモワだから、全部スプライトなりピクソーなりで描画するものだと思って、
いましたが、大概のゲームでのモワモワをよく見てみると、
モワモワの、周りには、四角い透明な領域があります。
とすると、モワモワというのは、そう見えているだけのごまかしなのでしょうか?
全部ピクセルで描画するのが、ベストと思い尾増すが、なんでそうしないのでしょうか?
0872デフォルトの名無しさん
2005/07/16(土) 18:18:06全部計算で出したピクセル使ったらどうなるか想像つかないの?
0873デフォルトの名無しさん
2005/07/16(土) 18:30:38テクスチャアニメーションの場合もあるし、
ポリゴンアニメーションの場合もあるし、
その両方の場合もあるしで、
なにも一枚ポリゴン(2枚じゃね?w)とは決まっていない。
板ポリに貼ってそれで終わりってのは中々少なくなってきてはいるな。
まあ、ほとんどデザイナ側の問題なわけだがw
0874デフォルトの名無しさん
2005/07/16(土) 18:31:130875デフォルトの名無しさん
2005/07/16(土) 18:31:550876850
2005/07/16(土) 19:05:01んと、
いちいち頂点バッファぶった切ってシェーダ切り替えなきゃいけないの?ってこと
100枚描画するとき、
for( int i = 0 ; i < 50 ; i++ )
{
SetPixelShader shader A
DrawPrimitive 1prim
SetPixelShader shader B
DrawPrimitive 1prim
}
こうしなきゃいかんの?
本当はこうしたい
SetPixelShader shader A
SetPixelShader shader B
DrawPrimitive 100 prim <-中で切り替えてくれるといいなぁ
引数、覚えてないから適当
0877デフォルトの名無しさん
2005/07/16(土) 19:14:29そんなことしたらプリミティブ毎にシェーダの種類を持たなければならないじゃないか。
for( int i = 0 ; i < 50 ; i++ )
{
SetPixelShader shader A
DrawPrimitive 1prim
SetPixelShader shader B
DrawPrimitive 1prim
}
こんな記述はライブラリで一度書けば、済む問題だしな
0878デフォルトの名無しさん
2005/07/16(土) 19:19:51>>878のような主張も可能。
0879デフォルトの名無しさん
2005/07/16(土) 19:20:330880デフォルトの名無しさん
2005/07/16(土) 19:27:47煙とかをピクセル単位で計算して出してたら
幾らマシンパワーがあっても足りない
0881デフォルトの名無しさん
2005/07/16(土) 19:38:03そもそも何のために切り替えているのか、その用途について説明せよ。
この手の質問の場合、根本的にそれ以外の解決方法があるのに、
無駄な手法をとっている場合が十中八九。
0882850
2005/07/16(土) 20:16:32shader A Bはまったく別のシェーダだからそうだけど。
draw〜って一杯呼んじゃって問題ないの?directXって?
>>878
条件分岐で分岐する場合、シェーダを組み合わせ用に書かなくちゃいけない
2種類程度ならいいけどシェーダの種類が10、20と増えてきたら容量や使い勝手が悪過ぎない?
>>881
シェーダA/Bをつかった描画がソートの結果たまたま交互に現れたら、
876のようになちゃうよね?
0883デフォルトの名無しさん
2005/07/16(土) 20:37:24落下中の雨粒は空気抵抗のために横に扁平な球になっているので、
そういうオブジェクトを作って大量にばらまけばいいと思うよ。(プ
雨粒の大きさによって終端速度が変わるので、そのあたりもちゃんと計算するようにな。
>>881
いろんなシェーダを使って描画するビルボードが画面内に混在すると、
Zソートで奥から描画するときにシェーダ切り替えまくる羽目になるのでどうすんべという話かと。
まあ、テクスチャなんかと同じで、パフォーマンスを気にするなら
まとめるしかないってことになるんでない? 俺は固定パイプライン野郎だから知らんけど。
>>878
無限ループおめ
0884デフォルトの名無しさん
2005/07/16(土) 20:49:35単に置いていけばいいだけだ。
それに近いのが、ポストプロセス
あれだってただ単にアルファマークしたところにピクセルをブチ撒けているだけだ
0885デフォルトの名無しさん
2005/07/16(土) 20:58:10すまん、なにを言っているのか分からん
0886デフォルトの名無しさん
2005/07/16(土) 21:03:32一律に同形状で上がってよし
0887デフォルトの名無しさん
2005/07/16(土) 21:08:43俺はビルボードが一箇所に固まってるなら物体が中に入ること自体があまりないので
ソートなんかしないでそのまま出しちゃってる。(水飛沫等)
それが広域に及ぶなら一定単位ごとにまとめて数箇所だすだけの話になる。
逆に画面にちりばめられてるようなシーンなら一度に画面に出る数(カメラに映る数)が大したことないはずなので
一つ一つのビルボードにマトリクスを持たせてそれごとにZソートをかけてる。
1メッシュごとにZソートをかけるシーンってのは極めて特殊だと思う。
ビュークリップもできないので実装したらおそらく激重だろう。
メッシュにある大半のビルボードが画面にでる場面(ビュークリップされない)
ってのが想像できないのであんまり使わないんじゃないかな。
と思うがどうだろうか?
0888850
2005/07/16(土) 21:24:11あーそうそう。
やっぱりシェーダごとにまとめて描画するしかないのかな。
でも、モデルデータ中でシェーダ切り替えってどうやってんだろ?
たとえば布と金属で別シェーダだと布用ストリップと金属用ストリップで2パス描画するのかな
マテリアルごとにシェーダ切り替え自由にしてたら死ぬな。
デザイナーに釘さしておかないと。
>>884
モワモワって陽炎じゃない?
それなら描画取り込みのメッシュをそれっぽく揺らせばいいんじゃない。
ついでにぼかしも入れとけば、よりそれらしくなる。
>>887
たとえばジャングルの中とか、そこら中α抜きテクスチャだらけ。
気にしないで書いちゃうのがいいのかね?PS2とかソートしてないゲームが大半だし。
0889デフォルトの名無しさん
2005/07/16(土) 21:29:59>たとえばジャングルの中とか、そこら中α抜きテクスチャだらけ。
それだとそういう問題じゃなくてマトリクスごとにメッシュもってる。
つまりZソートかけちゃってる。
一緒のプリミティブにもつってことはしないよ。
モデリングツールでデザイナが設定した通りにでるってそれだけ。
てゆうかさ
>たとえばジャングルの中とか、そこら中α抜きテクスチャだらけ。
こういう物体を一緒のプリミティブに突っ込んだらビュークリップはいつかけるんだ?
言ってる事はDrawPrimitiveに突っ込んだ頂点に複数のシェーダをかけたいってことでいいんだよな?
0890デフォルトの名無しさん
2005/07/16(土) 21:40:48豆知識:ピクセルシェーダの原理
誰に聞いても「やって見てみればいい」というような、原理や作動もまったく知らないような
ド素人がデカい顔してることに対する代名詞的扱い。
せめて「ピクセルを出力するもの」くらいいえないものだろうか
0891850
2005/07/16(土) 22:02:03突っ込む前にはじいちゃうんじゃない?
>言ってる事はDrawPrimitiveに突っ込んだ頂点に複数のシェーダをかけたいってことでいいんだよな?
俺、directX触るの初めてなんで
突っ込んだ頂点ごとに別のシェーダがかけたい。
↓
シェーダの切り替えってDrawPrimitiveの外でしかできないみたい(できるの?)
↓
場合によってはDrawPrimitiveとシェーダ切り替えの数がものすごい数になってしまう。
↓
パフォーマンスとか大丈夫なの?とおもった。
DrawPrimitive中で切り替えられるの?
0892デフォルトの名無しさん
2005/07/16(土) 23:17:23ああ、なるほど
>シェーダの切り替えってDrawPrimitiveの外でしかできないみたい(できるの?)
DrawPrimitiveの中でのシェーダの切り替えはできなかったような気がした。
気がしたって程度なのはこの辺複雑になってて本当にできないのかは
しっかり調べてないのでよくわからないというのが本当のところ。
>パフォーマンスとか大丈夫なの?とおもった。
おそらくそういう場面が無いので問題になっていないんだと思う。
0893850
2005/07/17(日) 01:50:54回答してくれた人ありがトン。
あと、次のDirectXあたりから固定パイプライン廃止の方向に行きそう。
ソースは言えない。
0894デフォルトの名無しさん
2005/07/17(日) 10:24:16廃止されようが残留しようが関係ない。
0895デフォルトの名無しさん
2005/07/17(日) 12:10:52シェーダの有無など関係ありませんよ。アヒャ
0896デフォルトの名無しさん
2005/07/17(日) 12:18:59バンプぐらいは使っても楽かも
基本的に模様みたいなのつけて貼るだけだし。
実装もそう難しくない。
■ このスレッドは過去ログ倉庫に格納されています