【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/
0596デフォルトの名無しさん
2005/06/20(月) 21:16:270597デフォルトの名無しさん
2005/06/20(月) 21:25:41#include <d3d9.h>
0598デフォルトの名無しさん
2005/06/20(月) 21:25:43#include <d3dx9.h>
0599デフォルトの名無しさん
2005/06/20(月) 21:37:39すいません、言葉が足りませんでした。
ソースコードにそれを書くのはわかっているのですが、それを実行するためにVC++の設定をどうすればいいのか分かりません。
PCの環境は、DirectX9.0cが入っていて、VC++はインストールしたばかりです。
0600デフォルトの名無しさん
2005/06/20(月) 21:58:290601デフォルトの名無しさん
2005/06/20(月) 22:28:520602デフォルトの名無しさん
2005/06/21(火) 00:57:52先にVC++をインストールして、その後にDirectX SDKを入れる。
9.0cってのはランタイムだろ、どうせ。
0603デフォルトの名無しさん
2005/06/21(火) 01:07:290604デフォルトの名無しさん
2005/06/21(火) 07:03:11そこからわからないなら入門書でも買ってしばらくは手順どおりに進めるほうがはやいじゃん。
それを買う金もおしいならプログラムなんて組むな。以上。
0605デフォルトの名無しさん
2005/06/22(水) 15:30:280606デフォルトの名無しさん
2005/06/22(水) 15:33:400607デフォルトの名無しさん
2005/06/22(水) 17:15:380608デフォルトの名無しさん
2005/06/22(水) 17:19:16{ return Janken().run(); }
0609デフォルトの名無しさん
2005/06/22(水) 17:22:16void
main()
{
ここにいれるっぽいのですが
}
0610デフォルトの名無しさん
2005/06/22(水) 17:23:410611デフォルトの名無しさん
2005/06/22(水) 17:27:58int main()
{
printf("じゃんけんプログラム");
return 0;
}
0612デフォルトの名無しさん
2005/06/22(水) 17:34:47アザス!
0613デフォルトの名無しさん
2005/06/22(水) 18:07:51int main()
{
printf("じゃんけんしよう!\n入力してね グー:0 チョキ:1 パー:2\n");
int i;
scanf( "%d", &i);
printf("あなたの負けです\n");
return 0;
}
0614デフォルトの名無しさん
2005/06/22(水) 18:37:49テラワロスw
0615デフォルトの名無しさん
2005/06/22(水) 18:39:14Good Job!
0616デフォルトの名無しさん
2005/06/22(水) 20:25:08テクスチャ別にポリゴンを分けてプログラム内でそれぞれ貼り付けていくのでしょうか?
0617デフォルトの名無しさん
2005/06/22(水) 23:52:49最強のじゃんけんプログラムとは、このことだったのですね!オモシロスw
0618デフォルトの名無しさん
2005/06/23(木) 03:15:48ループ回してプリミティブ単位で描画するから
毎ループSetTexture呼ぶ
つーかまずXファイルの表示とかやってみた?
0619616
2005/06/23(木) 08:03:55dwNumMaterialsを把握せず
for( DWORD i=0; i<dwNumMaterials; i++ )
{
lpD3DDevice->SetMaterial( &pMeshMaterials[i] );
lpD3DDevice->SetTexture( 0, pMeshTextures[i] );
pMesh->DrawSubset( i );
}
とやっていましたが、ここがキーなのでしょうか。
夜に色々試してみます。
0620デフォルトの名無しさん
2005/06/23(木) 15:18:12Lockして内容書き換えないとメモリ増えていくのでしょうか
今、上書きしてる状態で、作ったプログラムが(MCleanで見て)
徐々にメモリが増加してワラエナイッス
0621デフォルトの名無しさん
2005/06/23(木) 15:34:450622620
2005/06/23(木) 15:41:20あ、そうでした。拡大は行列を触ればいいすね。
ではちょっと内容を変えて
拡大縮小とか −> 徐々に透明にする場合
ちなみにシェーダー使ってないんですよ。すんません。
0623デフォルトの名無しさん
2005/06/23(木) 15:48:090624620
2005/06/23(木) 17:27:26newしまくり。
で、プログラム見たら数週間前の
自分のプログラムをすっかり忘れてる。
0625デフォルトの名無しさん
2005/06/23(木) 17:33:500626デフォルトの名無しさん
2005/06/23(木) 17:33:550627デフォルトの名無しさん
2005/06/23(木) 19:54:25固定パイプラインに相当する機能は永遠に必要。
ただし、D3DXの担当に変わる可能性は大きいけどな。
0628デフォルトの名無しさん
2005/06/23(木) 20:35:55しかし消失サーフェスのチェックやらd3dcapsのチェックやら
という腐れ仕事はいつまでしなきゃいけないんだろう…
0629デフォルトの名無しさん
2005/06/23(木) 22:10:480630デフォルトの名無しさん
2005/06/23(木) 22:50:400631デフォルトの名無しさん
2005/06/24(金) 08:05:43ここに「必要機能は全て実装されていることが前提」ってあるから、
dedcapsで機能調べたりってのはかなりなくなるんじゃね?
0632デフォルトの名無しさん
2005/06/24(金) 14:04:45徐々に緑(G)とアルファの値が0〜255になるようなものを作って
背景が真っ赤の画面に描画したのですが、徐々に黄色(背景と混ざった色)になってしまいます。
原因が思い当たる方いますか?ちなみに背景を黒にするとちゃんと表示されます。
0633デフォルトの名無しさん
2005/06/24(金) 14:13:48D3DRENDERSTATE_SRCBLEND, D3DRENDERSTATE_DESTBLENDの設定が悪い。
0634デフォルトの名無しさん
2005/06/24(金) 14:42:28ブレンドファクター121で ググる
0635デフォルトの名無しさん
2005/06/24(金) 14:48:29> 原因が思い当たる方いますか?ちなみに背景を黒にするとちゃんと表示されます。
~~~~~~~~~~~~~~~
マズ 赤背景の時に、どのように発色させたいかはっきりしよう。
> 徐々に黄色(背景と混ざった色)になってしまいます。
↑は、有る意味正しく動作しているんだヨ
0636デフォルトの名無しさん
2005/06/24(金) 15:05:40赤色の画用紙の上に緑色のセロハンテープ重ねて置いてみ。
何色に見える?
それで解からなかったら幼稚園児からやり直すといいよ。
0637632
2005/06/24(金) 16:17:33赤(R255 G 0 アルファ値0)→暗めの黄色(R128 G128 アルファ値128)→緑(R0 G 255 アルファ値255)となるものです。
>>634さんから教えていただいた「ブレンドファクター121」を読んでみます。
0638デフォルトの名無しさん
2005/06/24(金) 17:00:240639デフォルトの名無しさん
2005/06/26(日) 17:23:29Juneの奴も同じなのでしょうか?
0640デフォルトの名無しさん
2005/06/27(月) 00:01:11はぁ?D3DXのDLLのことか?
DLLを単体で配布するほうがダメだ、ってM$が言ってるだろ
0641デフォルトの名無しさん
2005/06/27(月) 00:07:290642デフォルトの名無しさん
2005/06/27(月) 00:38:290643デフォルトの名無しさん
2005/06/27(月) 03:10:08ttp://www.microsoft.com/japan/msdn/directx/dxreadmej.asp
相変わらずファイルの単体配布は駄目だけど、条件付で再配布ファイルのバラ売りが
可能になったっつーことかね。よくわかんねーけど。
もうめんどくせーからOct2004止めしとこーぜぼくたち初心者くんは。
0644デフォルトの名無しさん
2005/06/27(月) 03:28:490645デフォルトの名無しさん
2005/06/27(月) 13:23:52DirectX9Oct04JpnDoc.msi は普通にインストしてもだめぽでした。(.NETにしか対応してないぽ・・。)
.NET買えってことですかね・・(´・ω・`)
0646639
2005/06/27(月) 18:48:19あれ?DirectX9cのどれかのバージョンは
作ったゲーム配布するときDLLも添えないとダメでしたよね?
一般向けのDirectX9cランタイムに含まれていないから
どれかDLLもいっしょに配布しないと動かないと書かれていたはずです
これがJuneでは不要なのか
あいかわらずいっしょに配布しないと動かないのか
0647デフォルトの名無しさん
2005/06/27(月) 20:08:37最新の一般向けDirectX9cランタイムには
全部のDLLが入ってることがわかりました
無事解決です
0648デフォルトの名無しさん
2005/06/27(月) 20:42:20Dec2004からはD3DXが性的ライブラリからDLLに変わったんだよねー。
これでちょっとD3DXのコード呼び出しただけで数百KBも実行ファイルサイズ増しなんてことが
無くなってみんな幸せになるかと思いきや、エンドユーザー向けの9.0cラインタイムには
Dec2004以降のSDKで開発したプログラムを動かすためのファイルが一部入ってないわけよー?
実際には足りないといってもD3DXのDLLファイル(d3dx_24.dllとかd3dx_25.dll)を
直接実行ファイルの隣に置いておけば動くんだけどー、なんかそれってライセンス的に完全にアウトなわけよー。
じゃどーすんだと言えばー、それぞれのSDKに付いてる再配布用のランタイムのインストーラである
DXSetup様御一行を添付しなきゃならないわけよー。40MB近くあったっけこれー?
マジ勘弁しろよって感じだったんだけどー、June2005ではDXSetupで再配布しなきゃならないのは
相変わらずだけど、インストーラのコアだけ残しておけば必要なファイルだけを添付するのが可能になったわけだー。
D3DXの更新のみ必要な場合は4MB程度の添付で済むわけだー。
そんな文章書いていたんですけど
>>647
マジでー? 去年の8月から日付変わってねーのに。これ(↓)のことじゃないっスよね?
http://www.microsoft.com/downloads/details.aspx?FamilyID=3ad9f0d1-8d81-40c8-9815-924dcd4cd2c5&DisplayLang=en
0649デフォルトの名無しさん
2005/06/27(月) 20:44:28性的ライブラリのままの方が良かった。
0650デフォルトの名無しさん
2005/06/27(月) 20:52:520651デフォルトの名無しさん
2005/06/28(火) 20:53:43OpenGLだと自分で勝手にフォーマット決めて読み込んでいたのですが…
DXだとD3DXでしかLPDIRECT3DTEXTUREを作れないんですか?
0652デフォルトの名無しさん
2005/06/28(火) 21:45:54Lock
0653デフォルトの名無しさん
2005/06/29(水) 04:47:23とりあえずD3DFMT_A8R8G8B8 にしてLockしたら A<<24|R<<16|G<<8|B で書き込んどけ。
0654デフォルトの名無しさん
2005/06/29(水) 04:55:14int argb(int a, int r, int g, int b, int abit, int rbit, int gbit, int bbit ) {
return (a>>(8-abit))<<(abit+rbit+gbit) | (r>>(8-rbit))<<(rbit+bbit) | (g>>(8-gbit))<<bbit | (b>>(8-bbit)) ;
}
D3DFMT_R5G6B5の場合は argb(a,r,g,b,0,5,6,5) にしとく。
0655デフォルトの名無しさん
2005/06/29(水) 19:04:05wavファイルを使って途中再生しようと思ったのですが、必ず最初から再生されます。
セグメントは GetObject() で取得しています。
Segment->SetStartPoint(time);
PlaySegmentEx(...,&pss,...);
pss->QueryInterface(IID_IDirectMusicSegmentState8, (LPVOID*) &pss8);
を呼び出した後、値を調べてみると
Segment->GetStartPoint() == time
pss8->GetStartPoint() == 0
となっていたので、PlaySegmentEx() 関数を調べてみたものの
よく分かりませんでした。
SDKヘルプの「セグメントの一時停止」を参考にしたのですが、
特にこれといった注意書きも見当たりませんでした。
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には笑ったけど
■ このスレッドは過去ログ倉庫に格納されています