【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/
0697デフォルトの名無しさん
2005/07/03(日) 01:03:30>聞きたかったのはストリーミングの仕方ではなくてDx8のヘルプに載ってない理由だったんだけどな
ハイハイ。理由まで書いてあるヘルプなんてみたことないけどね。
0698デフォルトの名無しさん
2005/07/03(日) 01:07:000699デフォルトの名無しさん
2005/07/03(日) 01:08:23楽しそうですね。
0700デフォルトの名無しさん
2005/07/03(日) 01:12:430701デフォルトの名無しさん
2005/07/03(日) 01:34:160702デフォルトの名無しさん
2005/07/03(日) 01:51:45DirectX8にはカスタムロードがあるから。
MSの中の人はDSoundからストリーミングする方法は書かなくても良いと
思ったんじゃないだろうか。
http://www.microsoft.com/japan/msdn/directx/techart/dmloading.asp
0703デフォルトの名無しさん
2005/07/03(日) 07:49:11前後関係がおかしく表示されてしまいます。
SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE)
してるんですけどダメです。
心当たりのある方、教えてください。
0704デフォルトの名無しさん
2005/07/03(日) 08:59:22話はそれからだ。
0705679
2005/07/03(日) 09:22:38使わない、機能的には俺が書いたラッパーと変わらん
つか自分が書いたラッパーに依存しきったプロジェクトが既にあるんで
今からI/FをMS謹製に合わせたくないのが正直な所
>>702
サンクス、すぐには使えませんがちょっと調べてみます。
自前ラッパーもそろそろ寿命かな…
0706703
2005/07/03(日) 10:04:18座標系って右手とか左手とか?
SDK のサンプルだから左手だと想うんだけど……
視点も左手。
http://nijibox.ohflip.com/futabafiles/001/src/sa25173.png
↑こんな感じに描画される。
フタと注ぎ口が見えてるけど、底の方が手前。
小さく見えてる方が Z値大きい。
0707デフォルトの名無しさん
2005/07/03(日) 11:35:240708デフォルトの名無しさん
2005/07/03(日) 11:39:19EnableAutoDepthStencilをTRUEにしてる?
0709デフォルトの名無しさん
2005/07/03(日) 11:52:51ゼロでした。 1 にしてみたらちゃんと表示できているようです。
まさかこんなところとは……
みなさん(?)ありがとうございました。
0710質問
2005/07/03(日) 15:44:54それとも単に高級言語で書けるようになっただけ、なのでしょうか。
0711デフォルトの名無しさん
2005/07/03(日) 16:00:32基本的には後者の認識で正しい。
DX9にはコマンドラインのシェーダコンパイラが付属しているから、
HLSLをコンパイルしてアセンブリコードを吐いてみると面白いよ。
0712デフォルトの名無しさん
2005/07/03(日) 16:03:21やたら動作が遅く感じたので、FPS表示させてみたら30〜40位しかでてないんですけど
タスクマネージャでCPU使用率見たら0〜3くらいしか使ってません(あとはアイドル
CPU使用率ってどういう状況で高くなるんですか??
0713デフォルトの名無しさん
2005/07/03(日) 16:06:12Direct3D9: (ERROR) :Memory still allocated! Alloc count = 220
Direct3D9: (ERROR) :Current Process (pid) = 00000e10
Direct3D9: (ERROR) :Memory Address: 0037732c lAllocID=1 dwSize=000047f8, ReturnAddr=011534c8 (pid=00000e10)
Direct3D9: (ERROR) :Memory Address: 0037da34 lAllocID=11 dwSize=000013d4, ReturnAddr=0114c2cb (pid=00000e10)
というのはどういうことなんでしょう?・・メモリーリークなのは解りますがMemFini!ってどういうことですか?
0714デフォルトの名無しさん
2005/07/03(日) 16:08:56GPU側の描画処理がボトルネックになってるんじゃない?
0715デフォルトの名無しさん
2005/07/03(日) 16:09:24(INFO) だから気にするな
0717デフォルトの名無しさん
2005/07/03(日) 16:47:07くぁりがとうございました
0718デフォルトの名無しさん
2005/07/03(日) 18:39:330719デフォルトの名無しさん
2005/07/03(日) 19:39:09また最適化はコンパイラまかせのアホが出る
0720デフォルトの名無しさん
2005/07/04(月) 01:11:41D3DXIntersectを使って3Dオブジェクトを選択しようとしているのですがどうも上手くいきません。
第一引数に対象のメッシュを、第二引数にメッシュのローカル座標?に変換したマウスの座標を、
第三引数には方向ベクトルということで(0,0,1)を入れました(視点はXY平面に平行です)が、
どこをクリックしても第四引数がTRUEになってしまいます。
恐らくこの文だけでも多くの突っ込みどころがあるかとは思いますが、どうかご教授願えないでしょうか?
0721デフォルトの名無しさん
2005/07/04(月) 11:37:51ではないだろうか。
0722デフォルトの名無しさん
2005/07/04(月) 11:57:140723デフォルトの名無しさん
2005/07/04(月) 12:01:560724デフォルトの名無しさん
2005/07/04(月) 12:03:130725デフォルトの名無しさん
2005/07/04(月) 12:03:55>>720の「視点はXY平面に平行」って平行投影のことじゃないのかな
0726デフォルトの名無しさん
2005/07/04(月) 12:13:20>視点はXY平面に平行です
って、まさか画面に平行じゃないだろうなぁ。
#いや、念のためだ。
0727デフォルトの名無しさん
2005/07/04(月) 12:16:15とりあえず簡単にど真ん中向いてやろうとしてるだけじゃねーの。
だから、レイの方向を適当に0,0,1と入れてみた。
その補足として「〜は平行です」と書いた。
でも言いたかったのは正しくは「視線がxy平面に垂直」であると。
そもそも点と面で平行とか垂直って言うのかいな。バカの巣窟だな。
0728デフォルトの名無しさん
2005/07/04(月) 12:20:140729デフォルトの名無しさん
2005/07/04(月) 12:27:37巣窟も何も、>722=725が馬鹿なだけだろ?
0730デフォルトの名無しさん
2005/07/04(月) 12:36:310731デフォルトの名無しさん
2005/07/04(月) 12:46:570732デフォルトの名無しさん
2005/07/04(月) 13:32:44要は"レイの向き"には、射影後の空間での奥方向(+Z方向)のベクトルを、
モデル空間に逆変換したものを指定すればいいんだけど、
"向き"を透視変換入りの行列で逆変換してもうまくいかないから、
代わりにレイの始点( px, py, 0 )とレイの注視点( px, py, 1 )を逆変換して、
2つの差分を求めればいいわ。
px = (mouseX / screenWidth - 0.5f) * 2.0f;
py = -(mouseY / screenHeight - 0.5f) * 2.0f;
これで透視射影でも正射影でもおkよ。
0733デフォルトの名無しさん
2005/07/04(月) 13:33:340734720
2005/07/04(月) 14:50:33それ以前に日本語で変なところがあったようですが。。
奥行きがZ軸の正方向なので単純に{0,0,1}でいいのかと思ってました。
0735デフォルトの名無しさん
2005/07/04(月) 15:48:23厳密には>>732のやり方は、レイの開始点がニア平面の部分に来るから、
視点からニア平面までの見えないポリゴンは判定できないのよ。
視点に合わせようと思ったら、一旦2点をビュー空間に逆変換して、2点の線分の
z=0平面との交点を新しいレイ始点にして、それからモデル空間に
逆変換って感じになるかしら。(ちょっと面倒くさいわね。)
透視射影で決め打ちだったら、ビュー空間の(0,0,0)を逆変換するだけだから
そっちの方が幸せになれるかもね。
0736デフォルトの名無しさん
2005/07/05(火) 16:02:52まだプログラムをせずサンプルプログラムを見ている段階なのですが、
t-potのマルチサンプリングソフトシャドウ等が動きません。
ttp://tpot.jpn.ph/t-pot/program/116_SoftShadoeMulti/index.html
ボタン見たいなのがある(#include "dxstdafx.h"がある?)プログラムのみエラーが出ます。。
(t-pot以外の同じようなボタンのあるプログラムも動きませんでした。)
エラー:Could not find required media. Ensure that the DirectX SDK is correctly installed.
環境:DirectX 9.0 SDK (June 2005) : NVIDIA SDK 9.1 : Visual studio
もし原因が分かる方がいましたら、申し訳ありませんが助力をお願い致します。
0737デフォルトの名無しさん
2005/07/05(火) 16:33:09DirectXSDKの \Samples\Media\UI フォルダを、*.exeと同じフォルダに
コピーすれば一応動くわよ。
(DXUTは、同じバージョン(この場合2004Summer)のSDKのフォルダしか
探してくれないみたいね。)
0738デフォルトの名無しさん
2005/07/06(水) 14:24:03737さんありがとうございます。
0739デフォルトの名無しさん
2005/07/06(水) 16:18:030740デフォルトの名無しさん
2005/07/06(水) 16:34:010741デフォルトの名無しさん
2005/07/06(水) 16:34:348と9ならあんま変わってないから9
0742デフォルトの名無しさん
2005/07/06(水) 16:39:11ありがとうございます
0743740
2005/07/06(水) 17:30:000744デフォルトの名無しさん
2005/07/06(水) 21:01:531フレームごとに、インデックスバッファのデータをソートしなおすとすごく遅くなりそうです。
オブジェクト単位でソートすると、オブジェクトの中の面はソートされませんよね・・・。
皆さんはどのようにして実装されておられますか?
0745デフォルトの名無しさん
2005/07/06(水) 21:17:460746デフォルトの名無しさん
2005/07/06(水) 21:25:250747デフォルトの名無しさん
2005/07/06(水) 21:37:370748デフォルトの名無しさん
2005/07/06(水) 21:56:02では割り切ってオブジェクト単位でがんがります。
0749720
2005/07/06(水) 22:40:23何度もすみません、( px, py, 1 )をD3DXVec3Unprojectを使って逆変換したのですが
値をみるとめちゃくちゃになっちゃいます、、
( px, py, 0 )だとそれっぽい値がでるのですが。。。
0750デフォルトの名無しさん
2005/07/06(水) 22:45:02D3DXVec3Unprojectはビューポートの変換もしてくれるから
px,pyじゃなくてmouseX,mouseY(マウスのクライアント座標)を
そのまま渡せばいいわ、多分。
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つの事が行える関数を使ったときに初めて
異なる書き方になる。
だから、同じ関数を使う限り何百回何千回書き上げようが何も上達しない。
■ このスレッドは過去ログ倉庫に格納されています