【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/
0751デフォルトの名無しさん
2005/07/07(木) 00:44:39何度も何度もありがとうございます。。
早速学校でやってみたいと思います!
0752デフォルトの名無しさん
2005/07/07(木) 01:36:28面が右回りなのか左回りなのか
わかる方法は何かありませんか?
ググってみたら遠くからレイを飛ばして
交差回数を数えるという方法でわかるみたいですが
みなさんこれをやっているんですか?
0753デフォルトの名無しさん
2005/07/07(木) 02:10:53分からない場合、別の方法で衝突判定してます。
(衝突判定で困ってるかどうかは分かりませんが)
0754デフォルトの名無しさん
2005/07/07(木) 18:06:38申し訳ないのですが、アゲさせてもらいます。
前にDirectX8のDirectAudioでWAVE-RIFF形式のMP3を再生しようとした時、
ごく一部の環境で再生出来ないと報告を受けた事がありました。
原因は、何らかの要因でWindowsに最初から入っているはずのFraunhoferのMP3 Codecがおかしくなってたからなのですが、
DirectShowを代替手段として使えないかと思い、DirectShowで再生を試みました。
MP3 Codecを削除してDirectShowでMP3を再生した所、特に問題なく鳴ったのですが、
鳴ったは鳴ったで、「なんで鳴ったんだろう?」って不安になってしまいました。
これはDirectShow自身がMP3 Codecを内包してるからなのでしょうか?
それとも、ウチの環境が特殊なんでしょうか?
知ってる方がいらっしゃいましたら、ご教授願えればと思います。
DirectAudioとDirectShowで使用しているDirectXのバージョンはDirectX8です。
ちなみに、Codecを削除した状態でWAVE-RIFFのMP3をDirectAudioで再生したらやっぱり鳴らなかったので、
環境としては、以前、トラブル報告を受けたマシンの状態を再現出来ていると思うのですが……。
0755デフォルトの名無しさん
2005/07/07(木) 18:14:48この板はageたからといって回答もらえるわけじゃないんだよ
0756デフォルトの名無しさん
2005/07/07(木) 18:18:17DirectX Audio = DirectSound + DirectMusic なら知ってるけど。
0757デフォルトの名無しさん
2005/07/07(木) 19:48:410758デフォルトの名無しさん
2005/07/08(金) 00:45:00ちなみに頂点シェーダを使っています。
カメラのビューと射影変換なんかをオフにしたりできるのでしょうか。
0759デフォルトの名無しさん
2005/07/08(金) 01:23:560760デフォルトの名無しさん
2005/07/08(金) 01:30:24ふふふw
最初、こんなもんもできねぇって俺ってアホ?とか思っただろ?
実は結構難しいんだなw
そもそも画面描画までの座標変換ってよ。
オブジェクト空間→モデリング変換→ワールド空間→ビュー変換
→視点空間→射影変換→クリップ空間→遠近除算→正規化デバイス空間→ビューポート・深度範囲変換→ウィンドウ空間
(書籍 The Cg Tutorial日本語版より抜粋)
こうなってて、頂点シェーダには
オブジェクト空間からクリップ空間までの変換が書いてあるわけだよ。
#ここでどの変換でどの空間に移動してるのかしっかり理解してな。
だから2次元データを頂点シェーダを使って描画するには
クリップ空間上での座標を意識しなくちゃいけないんだよ。
#あ、実際にコードくれとかいうのは無しなw面倒だからw
ヒントと参考書籍まで紹介したんだ。後は自分でなんとかしる!
基本を理解する奴は絶対に伸びる。応援してるぞ。
0761デフォルトの名無しさん
2005/07/08(金) 01:32:15プログラム側から、インストールされているDirectXのバージョンを調べることができますか?
たとえば、ゲーム起動ログにそのPCにインストールされているDirectXのバージョンを吐き出させるような。
0762760
2005/07/08(金) 01:34:32えーw
また、規格外のものを出す〜w
ぶっちゃけありえな〜いw
正直、パイプラインでなにやっちゃってんの?的な匂いがするぅ〜w
ストリーム0しか使えないしぃ〜w
0763デフォルトの名無しさん
2005/07/08(金) 02:08:51クルクル回っている三角錐の物体(Xファイル)があって、0〜3のいずれかの数値を与えると、
それに対応した面がパッとこちらを向く・・・というようなことをしたいのですが、
どうすればいいのかサッパリわかりません。
どなたか考え方だけでも教えてください。お願いします。
0764デフォルトの名無しさん
2005/07/08(金) 02:31:35そらおめ、まず自分の向いている方向から対象までの角度を測って
対象の方向へ向くように角度を変えていくのが一番だべ。(ちなみに自分ってんは三角錐のことかな?)
方法は
1.姿勢行列から自分の現在の角度取得
2.自分から対象物への角度を取得
3.自分の現在の角度を対象物の方向へ近づけていく
で、できそうだな。
で、わからんのが
・自分の向いている方向をどうやって角度へ直すのか?
ってところだべ。ま、要は角度がわかりゃいいんだな。
アークタンジェントとか調べてみるといいんじゃね?atan2とかいう関数を使う。
0765デフォルトの名無しさん
2005/07/08(金) 02:33:31X・自分の向いている方向をどうやって角度へ直すのか?
○・対象物までの角度をどうやって取得するか?
0766763
2005/07/08(金) 03:20:49なるほど、三角錐側から考えて
カメラの方へ向いていくというのは思いつきませんでした。
XYZ軸すべて回転させているのでちょっとややこしそうですが、
頑張ってみます。
ありがとうございます!!
0767758
2005/07/08(金) 03:36:41これは、座標変換済み頂点の方法ですね。
>>760氏によると規格外らしいですが、どうにもならなくなったら使わせて頂きます!
>>760
これって結構難しいんですか、なるほど…。
クリップ空間を意識する必要があるわけですか。
つまり、640x480の画像を同じ大きさのウインドウに表示するとすると、
クリップ空間で(-1.0, -1.0, 0.0)〜(1.0, 1.0, 0.0)の大きさのポリゴンにテクスチャを張ればいいんですよね。
えーと、試しに実装してみたのですが、うまくいかないorz 試行錯誤してみます。
0768デフォルトの名無しさん
2005/07/08(金) 04:02:53いいんじゃねーの
0769デフォルトの名無しさん
2005/07/08(金) 06:59:03760=762がおかしいだけで、何も問題ないよ。
D3DDECLUSAGE_POSITIONTを使った場合は、ビューポート変換まで
飛ばされるので、指定するのはスクリーン座標。
x,yを(0,0)-(640,480)の範囲で指定して、z=0,w=1あたりに設定して描画するだけ。
必要に応じてD3DRS_ZENABLEやD3DRS_ZWRITEENABLEも使うと吉。
D3DDECLUSAGE_POSITIONTがよく分からなければ、FVFでXYZRHWを
指定しても一緒。
0770デフォルトの名無しさん
2005/07/08(金) 08:09:07ライフ表示用のカメラを作ってやれば、余計な計算などまるで必用がない。
0771デフォルトの名無しさん
2005/07/08(金) 09:50:57D3DPMISCCAPS_CLIPTLVERTSか、十分なGuardBandがないとまずいんじゃないの?
イヤこれで問題出たってほとんど聞かないけど、dxinfo見る限りじゃ結構対応状況悪いし。
俺はおっかないからスプライトの場合、ワールドとビュー行列に単位行列、
射影行列にはビューポートと同サイズの正射影って感じだべ。
頂点シェーダ使うなら・・・(x,y)をビューポートのサイズで割るだけじゃねーの?
0772771
2005/07/08(金) 12:03:36('A`)
0773デフォルトの名無しさん
2005/07/08(金) 14:12:44ライフ表示に頂点クリップや広いガードバンドは必要ないしょ。
Intelの狭いガードバンドでも普通は問題にならないべさ。
0774デフォルトの名無しさん
2005/07/08(金) 19:06:27例えば Y軸を拡大 → モデルの上面と底面が暗くなる
縮小すると明るくなります。
(光源は平行)
なんででしょうか。
0775デフォルトの名無しさん
2005/07/08(金) 19:21:340776デフォルトの名無しさん
2005/07/08(金) 20:07:50D3DXComputeNormals(pMesh, NULL)
では不満だというのですか。
0777デフォルトの名無しさん
2005/07/08(金) 20:11:55SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );
0778デフォルトの名無しさん
2005/07/08(金) 20:20:14透視射影変換 Frustum についてお尋ねします。
赤本の付録部分等にも4x4行列について載っていますが、
この行列について、原理を理解したいと思っています。
どなたか、透視(正)射影変換について
解説書、教科書、Web情報など、ご存知でしたら教えてください。
0779デフォルトの名無しさん
2005/07/08(金) 20:32:37ちゃんとなりますた。
0780デフォルトの名無しさん
2005/07/08(金) 20:51:33最小化ボタンあり最大化ボタン無効
ウィンドウのサイズを変更させない
このスタイルのウィンドウを作りたいのですが
styleにどう設定すればいいのか分かりません
宜しくお願いします
0781デフォルトの名無しさん
2005/07/08(金) 21:02:020782デフォルトの名無しさん
2005/07/08(金) 21:26:22http://pc8.2ch.net/test/read.cgi/tech/1120153520/
0783デフォルトの名無しさん
2005/07/08(金) 21:30:27>>760はそんな話はしていないと思うが・・・
0784780
2005/07/08(金) 22:22:58WS_DLGFRAMEで行けます
0785デフォルトの名無しさん
2005/07/09(土) 11:43:54ということを行うにはどうすれば良いでしょうか?
0786デフォルトの名無しさん
2005/07/09(土) 13:39:520787デフォルトの名無しさん
2005/07/09(土) 14:55:12http://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow002.htm
0788785
2005/07/09(土) 15:54:57その場合、加工したものを出力するのに仮想カメラのようなものを作らないといけないのかなぁと思いました。
加工というのは他の画像のはめ込み等を考えています。
現在はサンプルグラバを使って1枚ずつ加工、それを何かしらの方法で動画に直すという方法で進めていますが方向はあってますか?
0789デフォルトの名無しさん
2005/07/09(土) 17:55:54そういうクラス群と認識してコピペしながら作り始めていいですかねぇ
0790デフォルトの名無しさん
2005/07/09(土) 19:59:16いいですよ。使ってるうちに必要な知識は覚えます。
0791デフォルトの名無しさん
2005/07/09(土) 23:55:58プライマリバッファに合わせなければならないという制限があったような気がするのですが
どうにも思い出せません。また文献も見つけられませんでした。
nChannels
nSamplesPerSec
wBitsPerSample
のどれかだったと思うのですがご存知の方は教えて下さい。
サンプリングレートでしたっけ('A`)?
0792デフォルトの名無しさん
2005/07/10(日) 09:51:20回答ありがとうございます
某所で見つけたサンプルに色々つけたしながら機能を覚える方向でがんばります
0793デフォルトの名無しさん
2005/07/10(日) 10:04:35ありがとう
ここまで来るのに5年かか・・・OTL
0794デフォルトの名無しさん
2005/07/10(日) 12:34:03>>792の人かな?
プログラムは絵画と同じで本を読むだけじゃ書けるようになりません。
絵の勉強をする人がひたすらデッサンをするのと同じように、
とにかくコードを書いていくことでどんどんセンスが磨かれていく。
何十冊読もうが、おそらく100行程度のソースすら1発でビルド通らないよ。
0795デフォルトの名無しさん
2005/07/10(日) 12:44:09http://www.shiro.dreamhost.com/scheme/trans/hp-j.html
0796デフォルトの名無しさん
2005/07/10(日) 12:53:521つの関数に一つの機能しかないものであれば、
結局はみんな同じ書き方になっていく。
1つの関数で2つの事が行える関数を使ったときに初めて
異なる書き方になる。
だから、同じ関数を使う限り何百回何千回書き上げようが何も上達しない。
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ソートなんかしたら
すごいことになりそうなんですけど。
■ このスレッドは過去ログ倉庫に格納されています