【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/
0656デフォルトの名無しさん
2005/06/29(水) 23:20:56激しくちらつくんですがどうやったら親ウィンドウが毎描画するごとに
子ウィンドウを前面に描画することができるんでしょうか?
0657デフォルトの名無しさん
2005/06/29(水) 23:41:540658デフォルトの名無しさん
2005/06/30(木) 01:52:56フリーのゲームとかみてたらXファイルがフォルダの中にはいっていないのは
他の何かに埋め込んでるからなんですか?
どのように隠しているのかヒントください
0659デフォルトの名無しさん
2005/06/30(木) 01:55:27拡張子の変更、暗号化、別ファイルに埋め込み、そもそも別のファイル形式
0660デフォルトの名無しさん
2005/06/30(木) 04:41:20右からベクトルを掛けるタイプとどちらのタイプの行列でも
同じ作り方でよいですか?
0661デフォルトの名無しさん
2005/06/30(木) 11:19:00MFC使わないでWin32API使った方がやっぱり楽なんですかね…。
0662デフォルトの名無しさん
2005/06/30(木) 11:26:220663デフォルトの名無しさん
2005/06/30(木) 11:33:28まあ、もう少し色々試してみます。
0664デフォルトの名無しさん
2005/06/30(木) 21:50:453D空間にオブジェクト配置してそれをマウスでクリックして反応とれるようにしたいんですが、
D3DXVec3Unprojectが上手く動いてくれません。
http://www.tsg.ne.jp/sept/prg/memo/polypick.asp
↑見るとワールド行列が初期化されてそのまま入っているのでこれを参考にしたのですが、これで動くものなんでしょうか?
あと、よろしければ皆さんがどのようにZ軸の値を決めているのかも聞かせていただければ幸いです
0665デフォルトの名無しさん
2005/06/30(木) 22:48:19それ以上でもそれ以下でもない。
0666デフォルトの名無しさん
2005/06/30(木) 23:12:35D3DXVec3Unprojectの第3〜6引数は描画に使ってるのと同じのを渡すだけ。
おまえがワールド行列に単位行列を使ってるなら単位行列を渡せばいい。
0667655
2005/07/01(金) 00:42:51BBXという掲示板を拝見した所、DirectMusicについての返答は、
ほとんど期待できない様な事が書かれていました。
これは、ここでの返答も期待出来ないと思った方がいいのでしょうか?
というか、期待出来ないと言う事は不可能な処理なのでしょうかね?
一時停止に成功された方がいましたら、返信して頂けないでしょうか?
0668デフォルトの名無しさん
2005/07/01(金) 00:46:39ソフトシンセを使う以外でDirectMusicを使う必要性がさっぱり分からない。
0669デフォルトの名無しさん
2005/07/01(金) 01:43:370670デフォルトの名無しさん
2005/07/01(金) 06:29:420671デフォルトの名無しさん
2005/07/01(金) 06:56:02>注 サンプル関数の mtLength パラメータは、
>通常、WAV ファイルからロードされたセグメントに対しては 1 である。
>この場合は、SetStartPoint を呼び出す前に、IDirectMusicSegment8::SetLength を使って、
>セグメントの長さを現在のオフセットより少なくとも 1 チックだけ大きい値に設定する必要がある。
>詳細については、IDirectMusicSegment8::SetStartPoint を参照すること。
このへんにやられてるってこともない?
0672655
2005/07/02(土) 02:46:30試しに DirectSound で実装してみたら……なんか、簡単に実装出来ちゃいました。
確かに DirectMusic 使うんなら、こっちでよさそうですね。
あ、でも一時停止が出来なかった原因は知りたいな、とも思います。
というわけで、>>671さん。
はい、SetLength はちゃんと設定してあります。
GetLenght で設定した値が返ってきましたので、ここは問題ないと思います。
0673デフォルトの名無しさん
2005/07/02(土) 15:30:41具体的にどこで色を指定すればいいんでしょうか?
MaterialのDiffuseとAmbientとEmissiveとSpecularは試してみましたが駄目でした。
環境はXP DirectX9.0C GeForce6800です。
0674デフォルトの名無しさん
2005/07/02(土) 15:39:06よってラインだから発生する色の疑問点などどこにもない。
0675デフォルトの名無しさん
2005/07/02(土) 15:56:020676673
2005/07/02(土) 16:09:54頂点色を付けて、
D3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
の1行を追加したら見事色付きで表示されました!
ありがとうございました。
Materialの設定は特に必要ないみたいでした。
0677673
2005/07/02(土) 16:14:19D3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
も必要なくて、頂点色だけでOKだったようです。
最初に頂点色で試したときに何かミスってたようです・・・。
ありがとうございました。
0678673
2005/07/02(土) 16:20:35お騒がせしました。
0679デフォルトの名無しさん
2005/07/02(土) 22:27:46Dx7のDirectSoundにはチュートリアルに大きなwavファイルをストリーミングして再生する方法が
載っていたのですが、DX8のチュートリアルにはありません。
もしかして自動的にやってくれるのでしょうか?
0680デフォルトの名無しさん
2005/07/02(土) 22:52:28なんでDx9にしなかったの?
バカジャネwクルシメw
誰も助けてくれないのは承知の上だよね?w
0681デフォルトの名無しさん
2005/07/02(土) 22:55:54DirectSoundはDX8もDX9も同じじゃない?
0682デフォルトの名無しさん
2005/07/02(土) 23:03:14じゃあ、こいつ>>679なんのヘルプみてんの?
0683デフォルトの名無しさん
2005/07/02(土) 23:05:210684デフォルトの名無しさん
2005/07/02(土) 23:08:58シラネ
0685デフォルトの名無しさん
2005/07/02(土) 23:09:46DirectX9使えばいいのに。
0686デフォルトの名無しさん
2005/07/02(土) 23:21:49多分自分でコード書いたこと無い阿呆かと
0688デフォルトの名無しさん
2005/07/02(土) 23:25:43いや、DirectSoundなんてとっくの昔にラッパー組み上げて放置状態だけど?
複数同時のストリーミング再生まで出来てる。
お前もできてからグチグチいってみろ。
できてるならよし。
0689デフォルトの名無しさん
2005/07/02(土) 23:26:410690デフォルトの名無しさん
2005/07/02(土) 23:28:060691デフォルトの名無しさん
2005/07/02(土) 23:28:39追加された項目があるだろ?
0692デフォルトの名無しさん
2005/07/02(土) 23:30:22トンチンカンな噛み付き方した>>680の負け
0693デフォルトの名無しさん
2005/07/02(土) 23:31:160694デフォルトの名無しさん
2005/07/02(土) 23:33:14いや、>>679が求めてる内容がまさにDirectX9で追加された
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/htm/cstreamingsoundsampleclass.asp
だからね。
救いようが無いね。
0695デフォルトの名無しさん
2005/07/02(土) 23:33:55自分の間違いを認められず誤魔化したくて必死なんだよ
そっとしておいてやるのも優しさだぞ?
0696679
2005/07/02(土) 23:52:28聞きたかったのはストリーミングの仕方ではなくてDx8のヘルプに載ってない
理由だったんだけどな
載ってないならDx8Audioインターフェースなら自動的にやってくれるのか?、と
なおストリーミングなら自前のDx7Soundラッパーで実装済み
取り敢えず簡単に7->8と書き換えれば済むって事が判ったのでいいけどね
Dx9Soundには笑ったけど
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 なら知ってるけど。
■ このスレッドは過去ログ倉庫に格納されています