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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
※回答する人も、質問する人も必ず読んでください

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

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

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
2デフォルトの名無しさん:2010/05/20(木) 20:10:58
前スレ
【C++】 DirectX初心者質問スレ Part28 【C】
http://pc12.2ch.net/test/read.cgi/tech/1268666208/
3デフォルトの名無しさん:2010/05/20(木) 20:20:53
DirectX10以降ってもう.NETでしか開発できないの?
4デフォルトの名無しさん:2010/05/20(木) 21:38:33
いちもつ
>>3
なんでやねん
5デフォルトの名無しさん:2010/05/20(木) 22:24:11
.NETはまったく別な技術だぜ
まあvista以降は.netflameworkはプリインスコではあるが
6デフォルトの名無しさん:2010/05/20(木) 22:54:36
>>3
そうだよ。勘が鋭いな。感心するわ。
7デフォルトの名無しさん:2010/05/21(金) 22:24:21
Xファイル読み込んで表示したら
奥行きは違うけどカメラから見ると重なっている状態だと
手前の部分が透けて奥の部分が見えてしまうことがあるんだけど
どうすればいいの?
モデルはゲームプログラミングwikiのもので、ビューワでは正常に表示される
8デフォルトの名無しさん:2010/05/21(金) 22:31:29
>>7
奥行きは違うけどカメラから見ると重なっている状態
についてもっとkwskたのむ
98:2010/05/21(金) 22:50:02
スマン意味が分かった
透ける=前後関係がおかしい
という意味ならzバッファがちゃんと有効になっているかチェックしたらどうだろう
透ける=アルファブレンド
なら、描画する順番、重なり方によっておかしくなる場合がある
10デフォルトの名無しさん:2010/05/21(金) 23:20:17
  __(^^) <ペイピッポォ 欝だ死のうDirectXスレのマスコット、ペイピッポォ君だピー
  /__ \
  | |   |  |
  (_) (__)
愛用ツール:PIX
11デフォルトの名無しさん:2010/05/21(金) 23:23:54
>愛用ツール:PIX
なんかワロタw
12デフォルトの名無しさん:2010/05/22(土) 18:36:38
BGM再生するにはDirectShowでもできるらしいですが,
DirectMusicと比べて長所短所いかがですか?
13924:2010/05/22(土) 21:13:36
前スレ >>925-942
勉強になりました。ありがとうございます。
14デフォルトの名無しさん:2010/05/22(土) 22:18:59
DirectShowもDirectMusicも新しいDirectxSDKからは
消えてしまっていなかったっけ

DirectShowはプラットフォームSDKに移動だっけか
15デフォルトの名無しさん:2010/05/22(土) 23:30:04
BP↑ = s BA↑ + t BC↑

0 ≦ s ≦1
0 ≦ t ≦t

を簡単に表す方法はありますか?
成分で2式連立してs、tを出す方法しか思いつかないのですが
16デフォルトの名無しさん:2010/05/22(土) 23:38:56
0 ≦ t ≦t
?
17デフォルトの名無しさん:2010/05/22(土) 23:44:15
BP↑ = s BA↑ + t BC↑

0 ≦ s ≦1
0 ≦ t ≦1

を簡単に表す方法はありますか?
成分で2式連立してs、tを出す方法しか思いつかないのですが
18デフォルトの名無しさん:2010/05/22(土) 23:52:16
PはAC上のあると考えて良いのか?
それともABC内の全ての点?
19デフォルトの名無しさん:2010/05/22(土) 23:55:09
BA↑+BC↑の点とA、B、Cとの平行四辺形の内部にPがあるというつもりなのですが・・・
だから多分全ての点だと思います
20デフォルトの名無しさん:2010/05/23(日) 00:26:45
>>17
その思いついた方法ってやつでいいんじゃないの
21デフォルトの名無しさん:2010/05/23(日) 00:39:12
何が既知で何が未知なのかもよくわからん質問だ
22デフォルトの名無しさん:2010/05/23(日) 02:01:37
質問です。

d3dx9anim.hをインクルードするとエラーが起きます。

error C2065: 'IID_ID3DXAnimationSet' : 定義されていない識別子です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2078: 初期化子の数が多すぎます。
error C2065: 'IID_ID3DXKeyframedAnimationSet' : 定義されていない識別子です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2374: 'DEFINE_GUID' : 再定義されています。2 回以上初期化されています。
.
.
.

DirectXSDKは、February 2010 を使用しています。
同じような経験のある方、原因を教えてください。
よろしくお願いします。
23デフォルトの名無しさん:2010/05/23(日) 02:02:44
流れ星の尾みたいなのってどうやって作るんですか?
2422:2010/05/23(日) 02:16:10
自己解決しました。

>>23
単純に先頭の画像を薄めた画像をどんどん重ねる場合もあるし
ラインを書く場合もある
25デフォルトの名無しさん:2010/05/23(日) 03:20:01
流れ星の尾って
モーションブラーみたいなのを言ってるの?
単に軌跡に星みたいなのを飛ばしたいだけ?
26デフォルトの名無しさん:2010/05/23(日) 05:15:23
Game programming gems2を見てカメラの右ベクトルright.x = forward.x;right.z=-forward.x;right.y=0;として
final.x=inputRL*right.x+inputUD*forward.x; final.z=inputRL*right.z+inputUD*forward.zとしたのですが逆方向に動いたりします
場合分けして入れ替えないといけないですか?それとも他のとこが間違ってるだけですか?
27デフォルトの名無しさん:2010/05/23(日) 05:50:31
変数名とかどうでもいいから
やりたい事と聞きたいことをはしょらずに丁寧に説明してくれ
28デフォルトの名無しさん:2010/05/23(日) 06:00:52
カメラというか、画面に映ってる座標に合わせて十字キーを右に倒せば画面の右に動く
十字キーを上に倒せば画面の奥に動くようにしたいです
今、たまにその通りになるときもあるのですが、偶然の時が多いです。
カメラの動きを同時にいじってまして、そっちと連携が取れてない可能性が100%なのですが、この式だけで本来ならどのようなカメラの向きでも十字キ
ーに見合った動きになるのか聞きたかったのです。例えば、北向きをz正、東をx正に作ってる時に、カメラが後ろから撮ってて、ワールド座標ではキャラは南を向いてる場合に右を押せば西方向に進む
にはこの式だけでできるのかが聞きたかったのです。
29デフォルトの名無しさん:2010/05/23(日) 06:23:24
とりあえず、カメラの前がforwardで右がrightなら
right.x = forward.x;right.z=-forward.x
じゃなくて
right.x = forward.z; right.z=-forward.x
だと思うけどそこは書きミス?
30デフォルトの名無しさん:2010/05/23(日) 06:26:48
書きミスでしたすいません
ソースではちゃんとなってます
31デフォルトの名無しさん:2010/05/23(日) 06:42:09
できました
ありがとうございました
32デフォルトの名無しさん:2010/05/23(日) 10:30:39
ほへー、あんがとさん。
33デフォルトの名無しさん:2010/05/23(日) 12:08:44
>>24>>25
こんな感じの弾の先から段々薄く広がってく感じの奴を作りたいんですが。
http://hp.vector.co.jp/authors/VA012735/applet/fountain2.htm
34デフォルトの名無しさん:2010/05/23(日) 12:39:24
もしかして流れ星ではなく彗星なんじゃないか
35デフォルトの名無しさん:2010/05/23(日) 12:41:40
>>33
それはフィードバックエフェクト系じゃないの?
簡単に言うと、1フレーム前のバックバッファをボカしてるだけ。
36デフォルトの名無しさん:2010/05/23(日) 15:29:38
エフェクト用のレンダリングターゲットを2枚(A,B)用意して
Aを現在のレンダリング内容
Bを1フレーム前のレンダリング内容とする

Aのカラーとアルファ値をクリアして現在の●を書き込む
その上にBの内容を適当な半透明(もしくは加算合成)で書き込む
出来上がったAを画面に描画する

次のフレームではAとBを入れ替えて
Bを現在用にして
Aには前回の描画内容がそのまま残ってるのでこれをBに合成

以下AとBを毎フレーム入れ替えて繰り返し
37デフォルトの名無しさん:2010/05/23(日) 15:41:08
フィードバックエフェクトってやつだね。
38デフォルトの名無しさん:2010/05/23(日) 15:46:56
ちょっと抽象的な質問なのですが

画面にシャボン玉を出して、シャボン玉の向こう側の景色がちょっと歪んで見える表現。

をやりたいのですが、どんなワードでぐぐれば参考ページがでてきますでしょうか?
シャボン玉 シェーダ
薄膜シェーダ
とかだといまいち違ったものが出てきてしまいまして…

昔泡のウサギをサンプルにしたページをどこかで見かけた記憶があるのですが…
39デフォルトの名無しさん:2010/05/23(日) 16:02:15
レイトレーシングじゃない?
40デフォルトの名無しさん:2010/05/23(日) 16:11:26
球に環境マッピングで向こう側の景色を貼り付ければ歪んでみえるんじゃね?
41デフォルトの名無しさん:2010/05/23(日) 16:19:47
どうでもいいけど、シャボン玉くらいの薄さだと
向こう側はまったくと言っていいほど歪まないよね。
42デフォルトの名無しさん:2010/05/23(日) 16:21:08
>>38
bubble, refraction, distortionとか?

http://developer.amd.com/archive/gpusamples/BubbleShader/Pages/default.aspx
この辺は?
43デフォルトの名無しさん:2010/05/23(日) 16:24:52
これのことじゃね?

http://maverickproj.web.fc2.com/pg60.html
44デフォルトの名無しさん:2010/05/23(日) 17:08:47
>>43
きょきょ?
45デフォルトの名無しさん:2010/05/23(日) 20:03:49
>>38
泡のうさぎって、もしかして、
http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html
の下から17個目くらいのとこにある、Refractive Dispersionのこと?
46デフォルトの名無しさん:2010/05/24(月) 00:07:09
プログラムシェーダーが無いころってどうやって組んでたんですか?
47デフォルトの名無しさん:2010/05/24(月) 00:08:48
D3DXLoadMeshFromXで読み込んだモデルを
複数表示するには?
48デフォルトの名無しさん:2010/05/24(月) 00:11:47
>>47
DrawSubsetを呼ぶ
49デフォルトの名無しさん:2010/05/24(月) 00:12:12
その前になぜ複数表示できないと思ったんだよ?
50デフォルトの名無しさん:2010/05/24(月) 01:25:57
>>35-37
ありがとうございます。
フィードバックエフェクトで調べてみます。
51デフォルトの名無しさん:2010/05/24(月) 01:33:35
>>50
「DirectXシェーダプログラミング 仕組みからわかるゲームエフェクトテクニック」
出版社:ソフトバンククリエイティブ

フィードバックエフェクトはこの本に載ってたよ。
よかったら参考にしてみて。
52デフォルトの名無しさん:2010/05/24(月) 01:37:59
フィードバックエフェクトって一部でしか使われてない造語じゃね?
53デフォルトの名無しさん:2010/05/24(月) 02:20:46
http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?plugin=attach&refer=%A5%AB%A5%E1%A5%E9%A5%C6%A5%AF%A5%CB%A5%C3%A5%AF&openfile=CameraGomu.zip
このページのサンプルをそのまま3Dにしたのですが上手くいきません
カメラが一杯に引いたときに画面が高速でほんの少しの幅だけ振動してしまいます
変えたのは、サンプルのCamera.cpp以外は消してCamera.cppにSprite.cppのSetPos()を作って
描画ループ中でEye、Atにキャラの座標を入れたあと
pCamera->SetPos(Eye.x,Eye.z);
pCamera->Action();
Eye.x = pCamera->m_vec2Pos.x;Eye.z = pCamera->m_vec2Pos.y;
At += 向きベクトル;
D3DXMatrixLookAtLH( & View, & Eye, & At, & Up );
としたのと、同じ意味だと考えて、
void Camera::Action()
{loat fRot = MakeRot(GetRotCamera(),m_pCameraObject->GetRot());
をfloat fRot = GetRotCamera();に変えました
なぜなら、MakeRotは引数から相対角度を取得と書いてあったので3D上ではGetRotCameraだけでできるような気がしたからです。
各所のm_pCameraObject->GetPos()//(.成分)がでてくるのですが、ここにはexternでキャラの座標を直接入れたのでCameraファイル以外を消しました。
よろしくおねがいします


54デフォルトの名無しさん:2010/05/24(月) 02:53:19
俺が頭悪いだけかもしれんが、変換行列とか求めるのって
図書いて導き出せるもんなんですか?線形代数何度も勉強してるがダメだ・・・
55デフォルトの名無しさん:2010/05/24(月) 04:31:09
またお前か
いい加減頭の悪い質問の仕方するのやめろよ
56デフォルトの名無しさん:2010/05/24(月) 05:21:07
図を描いて導くって意味わからん。
数学の話なんだから式をかいてりゃ求まる。
57デフォルトの名無しさん:2010/05/24(月) 05:56:45
>>52
造語じゃなくて、一般的過ぎる言葉って感じ。
フィルタの出力を入力に戻す特殊効果全般を指す言葉。
58デフォルトの名無しさん:2010/05/24(月) 06:32:06
>>53
その書き換えたソースうpってくれよ
59デフォルトの名無しさん:2010/05/24(月) 06:34:49
>>58
ソースくれくれ厨乙
60デフォルトの名無しさん:2010/05/24(月) 06:36:42
なんたる自意識過剰
61デフォルトの名無しさん:2010/05/24(月) 06:37:19
>>54
どの軸を回転させるかというのは計算方法は決まってるから
そういった意味では導ける

変換行列自体の意味を知りたいなら勉強が足りない
もっと調べて本を読め

変換行列から軸の回転具合を逆算するとか言う話なら
別に一つずつの変換行列を保持しておかないと超面倒なことになる
62デフォルトの名無しさん:2010/05/24(月) 06:39:07
>>59
未完成のソースもらったって仕方ないだろ……
何いってんの
63デフォルトの名無しさん:2010/05/24(月) 06:43:27
つか、そのうpした実行ファイルでも
・上下連打するとガクガク
・いっぱいに近づいた時or離れた時にガクガク

元が悪いんじゃね?
64デフォルトの名無しさん:2010/05/24(月) 07:16:18
てかこんな2Dチックな計算してるのを3Dに直すより
行列で回転移動させた方がスマートになるんじゃね?
3Dで表示してる以上キャラのワールド行列はすでに出来上がってるのに
なんでいちいち全部分解して再計算するの?
65デフォルトの名無しさん:2010/05/24(月) 07:27:59
>>64
言ってる意味がよくわからんが、2D上で試すことはたまにやるし
分解しないと計算もへったくれもなくね
66デフォルトの名無しさん:2010/05/24(月) 07:49:38
なぜアークタンジェントが使われるのですか?
67デフォルトの名無しさん:2010/05/24(月) 07:59:33
>>66
質問は具体的に
68デフォルトの名無しさん:2010/05/24(月) 09:17:01
もうほっとけよ
69デフォルトの名無しさん:2010/05/24(月) 09:28:04
2つの2次元ベクトルから相対角度の出し方を教えてください
70デフォルトの名無しさん:2010/05/24(月) 09:40:28
できました
71デフォルトの名無しさん:2010/05/24(月) 10:03:46
まだできてません

>>70
誰ですか?
72デフォルトの名無しさん:2010/05/24(月) 10:04:22
>>71
荒らしは巣に帰れ
73デフォルトの名無しさん:2010/05/24(月) 10:08:25
ミスったorz
>>70
荒らしは巣に帰れ
74デフォルトの名無しさん:2010/05/24(月) 10:13:24
>>73
オマエモナー
75デフォルトの名無しさん:2010/05/24(月) 11:49:56
>>69
素直に数学やれ

内積で出来る
76デフォルトの名無しさん:2010/05/24(月) 12:00:40
>>75
ありがとうございます。全く気付きませんでした
タンジェントの足す公式で今知ったアークタンジェントを使いました 
77デフォルトの名無しさん:2010/05/24(月) 12:14:24
atanってことは外積でやったのか
78デフォルトの名無しさん:2010/05/24(月) 17:25:07
ここ二年ばかり新しい
sdkインストールしてないや
79デフォルトの名無しさん:2010/05/24(月) 17:45:59
ふーん
どうでもいい
80デフォルトの名無しさん:2010/05/24(月) 17:59:51
D3DXMatrixShadowの内部でやってる式が理解できない。。。
ヘルプに式書いてるんだけど分かる人居ます?
81デフォルトの名無しさん:2010/05/24(月) 18:18:13
パス1
82デフォルトの名無しさん:2010/05/24(月) 18:29:28
>>80
Jim Blinn's Corner第1巻の第6章に詳しく載ってる。
俺は英語版しか持ってないけど、何年か前に日本語訳も出てたと思う。
結論だけ書くと、地面の同次座標表現をG(4次元縦ベクトル)、
光源の同時座標表現をL(4次元横ベクトル)とするとき、
 ShadowMatrix = (LG)I - GL
となる。ただし、I は4x4単位行列。
LGがスカラー(内積)でGLが4x4行列になることに注意。
83デフォルトの名無しさん:2010/05/24(月) 18:34:57
>>82
ありがとう
84デフォルトの名無しさん:2010/05/24(月) 18:36:31
あれ?D3DXMatrixShadowのヘルプを見たら>>82の式と符号とか微妙に違うな。
理由はよくわからないけど、基本はBlinn's Cornerの理論と同じだと思う。
85デフォルトの名無しさん:2010/05/24(月) 19:02:30
http://son-son.sakura.ne.jp/programming/opengl_1.html
googleで最初にヒットしたサイトだが、
D3DXMatrixShadowの理屈はここで説明されているものと一緒だろう。
※「X = M*Xs」と書いているが、「Xs = M * X」の間違いかなぁ・・?

まあ、他の線形代数の変換式のように、頭でイメージ出来る類ではなさそうだから
そういうもんだと済ませるのがよさそう。
86デフォルトの名無しさん:2010/05/24(月) 21:44:25
質問です。

レンダリングターゲットにできるテクスチャーをAとします。
Aに対して、Aをテクスチャとして利用しての描画はできるのでしょうか?


曇りガラスのように、向こう側に見える風景をゆがめる物体を表示するとします。
それが複数枚重なっている場合、一番奥にはガラス描画前の風景を。2番目には1番目のガラスを描画した後の風景を…。
といった感じに、テクスチャを渡す必要があると思うのです。

その際、
バックバッファに風景描画
 テクスチャにコピー
そのテクスチャを使ってバックバッファに2枚目を描画
 テクスチャにコピー

とやるのはコストが高い気がしまして。
とはいうものの、Aを参照しながらAに描画なんてことができる気もまたしなくて…。
87デフォルトの名無しさん:2010/05/24(月) 21:53:37
>>86
できない。

その例ではコピーする必要はなくて、レンダリングターゲットを2枚用意して
交互に入れ替えて使えばいい。
88デフォルトの名無しさん:2010/05/24(月) 21:54:57
すまん、何に使うのかよく読んでなかった。
ガラスの描画だと、やっぱりコピーして使うものか。
89デフォルトの名無しさん:2010/05/24(月) 23:05:01
さあ
90デフォルトの名無しさん:2010/05/25(火) 00:02:01
バックバッファと同じサイズのレンダリングターゲットテクスチャAと
適当なサイズの曇りガラス用レンダリングターゲットテクスチャBを用意して

Aに風景をレンダリングする
AをテクスチャとしてBに曇り部分をレンダリングする
BをAにレンダリング

これを曇りガラスの枚数分繰り返して
最後にAをバックバッファにレンダリングでいいんじゃね?
91デフォルトの名無しさん:2010/05/25(火) 04:33:37
詰んだ
forward = Eye - At;D3DXMatrixLookAtLH( & View, & Eye, & At, & Up );
カメラの右ベクトルright.x = forward.z;right.z=-forward.x;right.y=0;
final.x=inputRL*right.x+inputUD*forward.x; final.z=inputRL*right.z+inputUD*forward.z
D3DXVec3Scale( &final, &final, 大きさ)
D3DXVec3Add( & final, & final, & Pos ); Pos = final;Posはマップ上の座標
絶対に値はあってる。はず。90度には動く。ただ画面の軸と関係ないし、マップのx、zとも関係無い何かを左右前後に動く
もう解決策が思いつきません。助けてください

92デフォルトの名無しさん:2010/05/25(火) 05:08:47
ソース出すのは確か嫌なんだよね?

じゃあ、そこに出てる変数を全部ウォッチに登録して
その計算後のすぐ後にブレークポイント打って
適当な方向にキーを入れた時の
全部の変数の値見れるようにしたもののSSをうpしてよ
93デフォルトの名無しさん:2010/05/25(火) 05:11:03
それ以前に
デバッカの使い方しらないから躓いてるんじゃないの?w
94デフォルトの名無しさん:2010/05/25(火) 05:15:55
はい
ブレークポイントで止めるくらいしか知りません。ウォッチもあまりやったことがありません。頑張ってみます
95デフォルトの名無しさん:2010/05/25(火) 05:24:03
D3DXMatrixLookAtLH( &View, &Eye, &At, &Up );
D3DXMATRIX m;
D3DXMatrixIdentity(&m);
m._11 = View._11;m._12 = View._21;m._13 = View._31;
m._21 = View._12;m._22 = View._22;m._23 = View._32;
m._31 = View._13;m._32 = View._23;m._33 = View._33;
D3DXVECTOR3 v( inputRL, 0.0f, inputUD);
D3DXVec3Scale( &v, &v, 大きさ);
D3DXVec3TransformCoord(&v, &v, &m);
Pos += v;
96デフォルトの名無しさん:2010/05/25(火) 05:25:46
エスパーすると

inputUDとinputRLに
アナログキーの情報が-1.0〜1.0fで入ってると仮定して(だよね?)

ワールド座標軸が奥方向がZ+であるのに対して
inputUDのU方向の入力値が-だから
X軸方向には正しく動けるけど
Z軸方向には反転して動いちゃうとかってオチじゃないの?
97デフォルトの名無しさん:2010/05/25(火) 05:40:09
>>95
ありがとうございます。あとでやってみます
At、View、UPがエラーでシンボルが見つかりませんとなります
それと、横を押した時と、その次のコマをうpれば良いですか?
画面が出てこないとキーを押せないのでその間に何回転もしてしまうのですが
98デフォルトの名無しさん:2010/05/25(火) 05:43:38
>>96
ありがとうございます
多分、Atの位置とキャラの座標を結んだ線を中心に前横後ろに移動してしまいます
Atには直前でキャラの座標が入ってるのですが、D3DXMatrixLookAtLHに入れる時にはキャラの向きを大きさ調節して足したのが入ってるのでキャラのちょっと前が今のAtです
自分のイメージでは、カメラとそのAtを結んだ線を基準に前後左右に動きたいのですが、なぜかキャラとAtを結んだ線が基準になってしまいます
99デフォルトの名無しさん:2010/05/25(火) 05:45:10
すみませんPIXでRelaseイベントしかデバッグできません。

100デフォルトの名無しさん:2010/05/25(火) 05:49:38
全部じゃなくて最小に削った奴でいいからもうソース出せって
じゃなかったら、もう少し日本語を磨いてから出直してくれ