トップページ⇒tech
1001コメント284KB

【C++】 DirectX初心者質問スレ Part31 【C】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/09/30(木) 21:45:21
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

前スレ
【C++】 DirectX初心者質問スレ Part30 【C】
http://hibari.2ch.net/test/read.cgi/tech/1278214135/
0112デフォルトの名無しさん2010/10/02(土) 13:31:22
>>111
スキニングできましたか?
スキニングできましたか?
0113デフォルトの名無しさん2010/10/02(土) 13:40:10
>>112
なんで2回言うんですか…
0114デフォルトの名無しさん2010/10/02(土) 13:42:05
>>113
大事なことなので2回言いました
0115デフォルトの名無しさん2010/10/02(土) 15:22:52
画像を表示させるのにZ座標を持たせる方法ってあります?
いまやってる方法だとどうも描写順に表示してしまってるようで不便でして
01161152010/10/02(土) 15:33:57
自己解決した
0117デフォルトの名無しさん2010/10/02(土) 17:28:09
COMオブジェクトはboost::shared_ptrで管理してデストラクタでreleaseすれば問題ないですよね?
0118デフォルトの名無しさん2010/10/02(土) 19:16:34
boostならintrusive_ptrを使うといい
0119デフォルトの名無しさん2010/10/02(土) 19:33:25
ATL使えるならCComPtr使え
0120デフォルトの名無しさん2010/10/02(土) 19:38:05
ありがとうございます
効率の面でintrusive_ptr、CComPtrをつかえってことですよね?
0121デフォルトの名無しさん2010/10/02(土) 19:40:24
効率面で言えば使う必要はない
0122デフォルトの名無しさん2010/10/02(土) 22:11:09
shared_ptrとの比較の話じゃ?
余計な処理のないCComPtr一択っしょ
0123デフォルトの名無しさん2010/10/02(土) 22:24:37
ATLの要らない_com_ptr_tの事も思い出してあげてください
0124デフォルトの名無しさん2010/10/03(日) 02:44:11
>>103みたいなエフェクトテクスチャは何で描くの?フォトショ?
0125デフォルトの名無しさん2010/10/03(日) 03:34:03
gimp
0126デフォルトの名無しさん2010/10/03(日) 03:45:03
本とか読まなくても
そういうのを描く用のブラシとテクニックがあってだな
0127デフォルトの名無しさん2010/10/03(日) 03:47:02
kwsk
0128デフォルトの名無しさん2010/10/03(日) 05:42:54
テクスチャを設定する時に
Device->SetTexture(ステージの番号,ポインタ)
とする時のステージを指定するのって
Effect->SetTexture("識別子",ポインタ)でする時はどうすれば良いのでしょうか?
0129デフォルトの名無しさん2010/10/03(日) 06:03:56
>>128
pEffect->SetTexture("シェーダーのテクスチャ変数orセマンティクス", テクスチャオブジェクトへのポインタ);
0130デフォルトの名無しさん2010/10/03(日) 06:04:18
>>128
シェーダー側のテクスチャ変数を増やせば良いだけじゃ
0131デフォルトの名無しさん2010/10/03(日) 06:06:46
>>124
フォトショ
http://macototo.cool.ne.jp/junics/book.html
0132デフォルトの名無しさん2010/10/03(日) 06:11:45
>>129
>>130
ありがとうございます
ずっとググってるのですが全然理解できません
ステージの番号iはfxファイルの中のTexiと繋がっているのでしょうか?
0133デフォルトの名無しさん2010/10/03(日) 06:26:15
>>132
指定するのはステージ番号じゃないよ。リファレンスにはステージ番号なんて書いてないだろ。

SetTexture(D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture);

IDirect3DDeviceのSetTextureとID3DXEffectのSetTextureは違うモノだ。
0134デフォルトの名無しさん2010/10/03(日) 06:34:10
>>132
http://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=33&vew=408
0135デフォルトの名無しさん2010/10/03(日) 06:37:20
//テクスチャの設定
char number[] = {"01234567"};
for(int i=0;i<8;i++){
//テクスチャの取得
LPDIRECT3DBASETEXTURE9 temp_tex = NULL;
aDevice->GetTexture(i,&temp_tex);

//テクスチャがなければ終わる
if(!temp_tex)break;

//テクスチャの設定
string out = "texture";
out.push_back(number[i]);
effect->SetTexture(out.c_str(),temp_tex);

temp_tex->Release();
}
0136デフォルトの名無しさん2010/10/03(日) 06:49:24
ありがとうございます。
>>133
だろ。に笑ってしまったのですがw
>>134
>>135
よくわかりません…具体的にはマルチレンダリングターゲットをしてて0と1とあるのですが
サンプルだとdevice->SetTexture(1or0,ptex)で指定してるのでわかりやすいのですが
>>135だと全くeffect->を使ってないのですが自分は殆どeffect->SetTexture("g_texture",ptex)を使ってるのでどうすれば良いのかわからないのです
effectでやりたいのですがこういう時どうすれば良いのでしょうか?
0137デフォルトの名無しさん2010/10/03(日) 06:51:08
すいません
目が腐ってました
0138デフォルトの名無しさん2010/10/03(日) 06:54:55
目より頭が腐ってると思うよ
0139デフォルトの名無しさん2010/10/03(日) 06:55:30
>>138
黙れよカス
0140デフォルトの名無しさん2010/10/03(日) 06:56:09
まさか
SetTexturetとSetRenderTargetを勘違いしてたってオチ?
0141デフォルトの名無しさん2010/10/03(日) 07:00:19
えっ
SetTexturetとSetRenderTargetの第一引数って関係無いんですか?
0142デフォルトの名無しさん2010/10/03(日) 07:01:48
なんで質問するやつはすぐカスだの何だの言い出すの?
0143デフォルトの名無しさん2010/10/03(日) 07:02:10
どうりでググってもでてこないわけだな
0144デフォルトの名無しさん2010/10/03(日) 07:04:17
>>141
まったく関係ないっすなぁ
0145デフォルトの名無しさん2010/10/03(日) 07:06:22
やべええガチで頭腐ってた
0146デフォルトの名無しさん2010/10/03(日) 10:04:44
というかこれは教える方が悪いんでは
>>135もなんかずれてるし
エフェクトファイル側を出さないで何を伝えるつもりなの?
0147デフォルトの名無しさん2010/10/03(日) 10:32:43
シェーダデバッガーってダウンロードできますか?
ユーティリティーにPIXは入ってたのですがシェーダデバッガーらしきものは入ってませんでした
MSDNにもここからダウンロード的な誘導も付いてませんし、VisualStudio.Netが必要だというページもあるのですが自分はExpressEditionです
どうすれば入手できますか?
0148デフォルトの名無しさん2010/10/03(日) 11:52:26
わけがわからん
もうシェーダ無理マジで
なんでエフェクトファイルだけCと違うんだよ
既存の↓に適当に入れただけでエラーってどういうこと?
struct VS_OUTPUT
{
float4 Pos : POSITION;
float4 Diffuse : COLOR0;
  float4 Diffuse : COLOR1;←加えた
float2 Tex0 : TEXCOORD0;
};
typedef struct VS_OUTPUT{も無理だし
0149デフォルトの名無しさん2010/10/03(日) 12:02:49
>>148
変数名が同じだからでは?
fxcでコンパイルしてエラーメッセージをチェックするといいかも。
0150デフォルトの名無しさん2010/10/03(日) 12:09:10
>>149
サンクス
普通にVS_OUTPUTの前にsとかつけたら通った
なんでこんな簡単なことが気付かなかったんだろうか
2ちゃんに文句書き込んだ瞬間解決するんだよないつも
0151デフォルトの名無しさん2010/10/03(日) 12:11:03
fxcとかいうソフト、つけた瞬間一瞬だけひらいて閉じるんだけどなんだこれ?
0152デフォルトの名無しさん2010/10/03(日) 12:27:23
http://msdn.microsoft.com/ja-jp/library/bb172768(VS.85).aspx

コンパイルエラーを表示できるようにしといたほうがいいよ
OutputDebugStringAを使えばデバッグウィンドウからエラー箇所まで飛べる

hoge.fx(38,9): error X3003: redefinition of 'VS_OUTPUT::Diffuse'
0153デフォルトの名無しさん2010/10/03(日) 12:45:52
サンクス
出力のところ見たら普通に載ってたな
特殊形式っぽいしツール無いと無理だと思って探しまくってるうちに洗脳されてた
0154デフォルトの名無しさん2010/10/03(日) 13:12:37
シェーダわかった。完璧だわ
一気にトトリっぽくなったしもうあとリソース作るだけだわ
ktkr
0155デフォルトの名無しさん2010/10/03(日) 13:27:43
>>146
>>134のリンク先でその仕組みが分かって
SetTextureで設定しておいたものをシェーダ用として使うコードが>>135のつもりで貼った

まあ、でもよく考えるとすでに動くHLSLのサンプルがSDKのサンプルにあるのに
こんなことで迷ってるなんて相手にしないほうがいい人だったねw
0156デフォルトの名無しさん2010/10/03(日) 13:33:56
自分が迷ってる部分が単発でサンプルにあるなんてわからないだろw
0157デフォルトの名無しさん2010/10/03(日) 13:35:58
>>156
今回に関して言えばテクスチャが貼られてるサンプルならなんでもよかったよね?
0158デフォルトの名無しさん2010/10/03(日) 13:44:32
>>157
            __、
     ,r´⌒ヽ,⌒ヽ,ヽ
   (⌒)、   .人  λ\、 ._____
    \. \    、 ヽ./ ー  ー\
     |\ \    ヽ./ ( ●) ( ●)
     |  \  \ /     (__人__) \  はいはい、どーもすみませんでした
     |.   \   |       ` ⌒´   |
  .   |.   |.\_ノ\            /
  .   |.   |   |   \______/
  .   |   )  .|     . . ̄ ̄
  .   |   |  .|
     |   |.|  .|
  .   |  | .| .|
     /  / / ヽ,
    (__ノ  ヽ、__つ
0159デフォルトの名無しさん2010/10/03(日) 13:45:56
>>158
すっごい馬鹿だったよねw
見てて惨めなくらい間抜けだよね?
SDKに載ってることを馬鹿みたいにわかんないわかんないってw
PG向いてないんと違う?大丈夫?
0160デフォルトの名無しさん2010/10/03(日) 13:48:47
>>159
だまれ死ね
0161デフォルトの名無しさん2010/10/03(日) 13:50:52
>>160
            __、
     ,r´⌒ヽ,⌒ヽ,ヽ
   (⌒)、   .人  λ\、 ._____
    \. \    、 ヽ./ ー  ー\
     |\ \    ヽ./ ( ●) ( ●)
     |  \  \ /     (__人__) \  はいはい、どーもすみませんでした
     |.   \   |       ` ⌒´   |
0162デフォルトの名無しさん2010/10/03(日) 14:00:52
とりあえず件のトゥーン君は
質問するとき判別できるようにコテハン付けてくれ
そして質問に関係すること以外はチラシの裏にでも書いといてくれ
0163デフォルトの名無しさん2010/10/03(日) 15:00:17
しかし、DX9って息長げーな
もう8年になるかというのに、いまだ手を出す奴が絶えないもんな
といいつつ俺も9で完全に止まってる化石だが
0164デフォルトの名無しさん2010/10/03(日) 15:08:37
DX10がVistaと共に沈没してしまったからな
DX10.1もNVIDIAがついてこずこれも黒歴史化
Win7とDX11が普及しきる迄はまだまだDX9の天下
0165デフォルトの名無しさん2010/10/03(日) 15:16:42
プログラマブルシェーダーが主流になって
7以前のハードの進化とのイタチごっこが終わったからだな
今後はSMのバージョンアップ=DXのバージョンアップになっていくんだろう
0166デフォルトの名無しさん2010/10/03(日) 16:00:14
SMの進化が進んで、IA32+SIMDと同程度になったら
D3Dの時代は終わるかも
まあLarrabeeやCellがずっこけてるし、まだまだ先かもしれんけど
D3D9はその時でも依然現役だろうな
0167デフォルトの名無しさん2010/10/03(日) 16:04:07
最低でも4年後までは9の天下のままだろ
0168デフォルトの名無しさん2010/10/03(日) 17:33:53
シェア最大のIntelのグラフィックが腐ってるからな
ここがDirectX11をまともに動かせるようになるまでは駄目だ
0169デフォルトの名無しさん2010/10/03(日) 18:04:35
MSはエンドユーザーへ浸透を促進するためにまず開発者を移行させようとしてくるからな
とりあえずVS2012くらいでXPのサポート打ち切って
じょじょにDXSDKのVS2010以前のサポートを打ち切ってくるだろう
世間ではまだ9が全盛でも9で開発したかったら古い環境でやってね、となるに違いない
0170デフォルトの名無しさん2010/10/04(月) 00:32:47
ttp://www.poverty.jeez.jp/loda/img/iyan04476.jpg
こんなのでた、本当にどうしよう
0171デフォルトの名無しさん2010/10/04(月) 00:41:13
プログラムを辞める
0172デフォルトの名無しさん2010/10/04(月) 00:41:34
デバックしろ
どうせ「かまってトゥーン君」なんだろうが…
0173デフォルトの名無しさん2010/10/04(月) 00:50:57
次のトゥーン君の発言は死ねか黙れかカスだなたぶん。
0174デフォルトの名無しさん2010/10/04(月) 00:56:35
かまってツォーん君って誰だよ

弄る前の状態にしてもエラーでるしワケ分からん
0175デフォルトの名無しさん2010/10/04(月) 01:04:58
だからデバックしろって
VCみたいだからF5でデバック実行する
エラーがでて止まったら呼び出し履歴をみて最後に呼ばれた関数に飛ぶ
その中に適当にブレークポイントを打って止まる原因になってる行を突き止める
まぁ、たぶんNULLインターフェースのメンバを呼んでるとか
new してないインスタンスのメンバを呼んでるとかそんな感じだと思われ
0176デフォルトの名無しさん2010/10/04(月) 01:06:19
二重deleteだろ
0177デフォルトの名無しさん2010/10/04(月) 01:06:47
>>175
なるほど
ありがとう
0178デフォルトの名無しさん2010/10/04(月) 14:11:12
EVRでレンダリングしている動画の上にIDirect3DSurface9を使って簡単なアニメーションを重ねたいと思います。
それに使うIDirect3DSurfaceはどこから取得するのが最適でしょうか?
0179デフォルトの名無しさん2010/10/04(月) 14:35:00
別アプリのEVR対応アプリの上にってこと?
0180デフォルトの名無しさん2010/10/04(月) 20:07:15
現在、Windows2000対応のアプリのためにDirectX SDKの
October2004をインストールしているのですが、最近のバージョンの
SDKと共存させることはできるでしょうか?
インストール先を別々にするだけで良いとかだとうれしいです。
0181デフォルトの名無しさん2010/10/04(月) 20:11:28
結局何が別であるとうれしいかというとライブラリとかヘッダなので別にインストールすればいいんじゃね?
でも、環境変数とか同名の名前の衝突とかで食い合う気がするのでその辺の調整はいるかも。
0182デフォルトの名無しさん2010/10/04(月) 20:12:07
Win2000対応のアプリなんて捨てろよw
XPからにしとけwww

どうせ貧乏人をサポートしてもそいつらコピーでしかあそばねえからwww
0183デフォルトの名無しさん2010/10/04(月) 20:19:46
一応共存させることは出来る
インストール先を別にして
環境設定のインクルードディレクトリとライブラリディレクトリの優先順位を2004Octの方を上にしとけば基本そっちから使ってくれる
ただMSもあまりそれは推奨してないようなので不具合がでても自己責任
0184デフォルトの名無しさん2010/10/04(月) 20:24:47
VS2010からは環境変数で設定するんじゃなくて
個々のプロジェクトごとに設定できるようになったから良いね
その分ちょっと煩雑にはなったけど
0185デフォルトの名無しさん2010/10/04(月) 20:29:56
2010のってプロジェクトファイルそのものにSDKのフルパスが書き込まれるあたりダメダメじゃね?
インストールパスが違う他環境だとそのままじゃビルド不能になるし。
0186デフォルトの名無しさん2010/10/04(月) 20:29:59
>>181-183
ありがとうございます、一応できるんですね
環境変数も注意して見ることにします
0187デフォルトの名無しさん2010/10/04(月) 20:35:32
>>185
フルパスを書き込まなければ良い
0188デフォルトの名無しさん2010/10/04(月) 20:37:18
ソリューションフォルダ以下にヘッダとライブラリを全部コピーするような真似しない限り
結局環境依存じゃねーか
0189デフォルトの名無しさん2010/10/04(月) 20:38:15
$(DXSDK)
$(WindowsSDK)
0190デフォルトの名無しさん2010/10/04(月) 20:40:07
SDK複数バージョン同居前提の話なんだから環境変数はダメだろ。
0191デフォルトの名無しさん2010/10/04(月) 20:45:07
なんだその話続いてたのか
0192デフォルトの名無しさん2010/10/04(月) 20:45:21
そういう特殊な環境で作りたいんだったら
自分で環境変数を増やせばいいじゃない
別に一個じゃなきゃいけない理由も無いんだし
0193デフォルトの名無しさん2010/10/04(月) 21:54:52
シェーダを使った場合、
SetRenderStateで設定してるものは全て無効になるんですよね?
すべてシェーダー側で設定しろってことですか?
カリングモードの設定もですか?

よろしくお願いします。
0194デフォルトの名無しさん2010/10/04(月) 22:07:24
まずは自分で試してみろ。
そうでないと話にならない。
0195デフォルトの名無しさん2010/10/04(月) 22:13:35
>>194
試しました。たぶんそうなんですが、念のための確認です。
スパルタ教育は好きです。
0196デフォルトの名無しさん2010/10/04(月) 22:15:57
もう一度やり直せ。
0197デフォルトの名無しさん2010/10/04(月) 22:19:34
>>196
やり直して確信に変わりました。ありがとうございました。
0198デフォルトの名無しさん2010/10/04(月) 22:39:44
>>179
同じアプリ内のEVR (DirectShow)です。
0199デフォルトの名無しさん2010/10/04(月) 23:17:10
>>197
αブレンドの設定は生きてるぞ
他にも生きてるもんあんだろ
0200デフォルトの名無しさん2010/10/05(火) 00:11:45
ひねくれたこと言わないでちゃんと回答してればこんなことにはならなかったのに
0201デフォルトの名無しさん2010/10/05(火) 00:17:34
固定シェーダの恐怖が減っただけでもありがたいことだな
0202デフォルトの名無しさん2010/10/05(火) 00:31:12
>>199
何が生きて何が生きてないんですか?
勉強不足でホントすみません。
0203デフォルトの名無しさん2010/10/05(火) 00:32:23
あ、生きてるやつだけでいいです。
0204デフォルトの名無しさん2010/10/05(火) 00:41:45
>>202
知らん
そのときどきで「おーこいつ生きてるじゃんoh!yeah!」って対処しろ
0205デフォルトの名無しさん2010/10/05(火) 00:46:58
>>204
もうしょうがないわね。わかったよ。
0206デフォルトの名無しさん2010/10/05(火) 01:10:11
なんか釣りっぽいけど
マジレスするとシェーダー使っててもSetRenderStateは全て無効にならない
基本事項はSetRenderStateで設定しといて
シェーダー内のみで変更したい項目をシェーダー側で変更する
ID3DXEffect::Beginでパラメーターを指定しなければEndの時に変更部分が復元される
0207デフォルトの名無しさん2010/10/05(火) 09:22:16
>>206
最高です!釣りじゃありません!
ちょっと前から厳しい人がいたんで反応を見てただけです!
スパルタ教育は好きなんですけどね!
ありがとうございました!
0208デフォルトの名無しさん2010/10/05(火) 09:33:01
>>206
追加で質問です。
Beginでパラメータを指定しないってことは第二引数を0にするってことですよね?
変更部分が復元されるというのは、シェーダ内での変更がそのまま維持されるということでしょうか?
それとも、シェーダ内で変更した項目は全てリセットされ、シェーダーで変更する前の状態に復元されるということでしょうか?

何度もすみません。よろしくお願いします。
02092072010/10/05(火) 09:52:12
もうわかったのでいいです。
シェーダ内の変更がそのまま復元され維持されるということですね。
復元されちゃったら、また元に戻さないといけないのでやめたほうが良さそうですね。
0210デフォルトの名無しさん2010/10/05(火) 11:49:07
話の流れが見えない
207=209じゃないよな?
0211デフォルトの名無しさん2010/10/05(火) 11:52:30
思い込みが激しい奴に何を言っても無駄。
■ このスレッドは過去ログ倉庫に格納されています