【C++】 DirectX初心者質問スレ Part29 【C】
1 :
デフォルトの名無しさん:
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
DirectX10以降ってもう.NETでしか開発できないの?
.NETはまったく別な技術だぜ
まあvista以降は.netflameworkはプリインスコではあるが
7 :
デフォルトの名無しさん:2010/05/21(金) 22:24:21
Xファイル読み込んで表示したら
奥行きは違うけどカメラから見ると重なっている状態だと
手前の部分が透けて奥の部分が見えてしまうことがあるんだけど
どうすればいいの?
モデルはゲームプログラミングwikiのもので、ビューワでは正常に表示される
>>7 奥行きは違うけどカメラから見ると重なっている状態
についてもっとkwskたのむ
9 :
8:2010/05/21(金) 22:50:02
スマン意味が分かった
透ける=前後関係がおかしい
という意味ならzバッファがちゃんと有効になっているかチェックしたらどうだろう
透ける=アルファブレンド
なら、描画する順番、重なり方によっておかしくなる場合がある
__(^^) <ペイピッポォ 欝だ死のうDirectXスレのマスコット、ペイピッポォ君だピー
/__ \
| | | |
(_) (__)
愛用ツール:PIX
>愛用ツール:PIX
なんかワロタw
BGM再生するにはDirectShowでもできるらしいですが,
DirectMusicと比べて長所短所いかがですか?
13 :
924:2010/05/22(土) 21:13:36
DirectShowもDirectMusicも新しいDirectxSDKからは
消えてしまっていなかったっけ
DirectShowはプラットフォームSDKに移動だっけか
BP↑ = s BA↑ + t BC↑
0 ≦ s ≦1
0 ≦ t ≦t
を簡単に表す方法はありますか?
成分で2式連立してs、tを出す方法しか思いつかないのですが
0 ≦ t ≦t
?
BP↑ = s BA↑ + t BC↑
0 ≦ s ≦1
0 ≦ t ≦1
を簡単に表す方法はありますか?
成分で2式連立してs、tを出す方法しか思いつかないのですが
PはAC上のあると考えて良いのか?
それともABC内の全ての点?
BA↑+BC↑の点とA、B、Cとの平行四辺形の内部にPがあるというつもりなのですが・・・
だから多分全ての点だと思います
>>17 その思いついた方法ってやつでいいんじゃないの
何が既知で何が未知なのかもよくわからん質問だ
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 を使用しています。
同じような経験のある方、原因を教えてください。
よろしくお願いします。
流れ星の尾みたいなのってどうやって作るんですか?
24 :
22:2010/05/23(日) 02:16:10
自己解決しました。
>>23 単純に先頭の画像を薄めた画像をどんどん重ねる場合もあるし
ラインを書く場合もある
流れ星の尾って
モーションブラーみたいなのを言ってるの?
単に軌跡に星みたいなのを飛ばしたいだけ?
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としたのですが逆方向に動いたりします
場合分けして入れ替えないといけないですか?それとも他のとこが間違ってるだけですか?
変数名とかどうでもいいから
やりたい事と聞きたいことをはしょらずに丁寧に説明してくれ
カメラというか、画面に映ってる座標に合わせて十字キーを右に倒せば画面の右に動く
十字キーを上に倒せば画面の奥に動くようにしたいです
今、たまにその通りになるときもあるのですが、偶然の時が多いです。
カメラの動きを同時にいじってまして、そっちと連携が取れてない可能性が100%なのですが、この式だけで本来ならどのようなカメラの向きでも十字キ
ーに見合った動きになるのか聞きたかったのです。例えば、北向きをz正、東をx正に作ってる時に、カメラが後ろから撮ってて、ワールド座標ではキャラは南を向いてる場合に右を押せば西方向に進む
にはこの式だけでできるのかが聞きたかったのです。
とりあえず、カメラの前がforwardで右がrightなら
right.x = forward.x;right.z=-forward.x
じゃなくて
right.x = forward.z; right.z=-forward.x
だと思うけどそこは書きミス?
書きミスでしたすいません
ソースではちゃんとなってます
できました
ありがとうございました
ほへー、あんがとさん。
もしかして流れ星ではなく彗星なんじゃないか
>>33 それはフィードバックエフェクト系じゃないの?
簡単に言うと、1フレーム前のバックバッファをボカしてるだけ。
エフェクト用のレンダリングターゲットを2枚(A,B)用意して
Aを現在のレンダリング内容
Bを1フレーム前のレンダリング内容とする
Aのカラーとアルファ値をクリアして現在の●を書き込む
その上にBの内容を適当な半透明(もしくは加算合成)で書き込む
出来上がったAを画面に描画する
次のフレームではAとBを入れ替えて
Bを現在用にして
Aには前回の描画内容がそのまま残ってるのでこれをBに合成
以下AとBを毎フレーム入れ替えて繰り返し
フィードバックエフェクトってやつだね。
ちょっと抽象的な質問なのですが
画面にシャボン玉を出して、シャボン玉の向こう側の景色がちょっと歪んで見える表現。
をやりたいのですが、どんなワードでぐぐれば参考ページがでてきますでしょうか?
シャボン玉 シェーダ
薄膜シェーダ
とかだといまいち違ったものが出てきてしまいまして…
昔泡のウサギをサンプルにしたページをどこかで見かけた記憶があるのですが…
レイトレーシングじゃない?
球に環境マッピングで向こう側の景色を貼り付ければ歪んでみえるんじゃね?
どうでもいいけど、シャボン玉くらいの薄さだと
向こう側はまったくと言っていいほど歪まないよね。
プログラムシェーダーが無いころってどうやって組んでたんですか?
D3DXLoadMeshFromXで読み込んだモデルを
複数表示するには?
その前になぜ複数表示できないと思ったんだよ?
>>35-37 ありがとうございます。
フィードバックエフェクトで調べてみます。
>>50 「DirectXシェーダプログラミング 仕組みからわかるゲームエフェクトテクニック」
出版社:ソフトバンククリエイティブ
フィードバックエフェクトはこの本に載ってたよ。
よかったら参考にしてみて。
フィードバックエフェクトって一部でしか使われてない造語じゃね?
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ファイル以外を消しました。
よろしくおねがいします
俺が頭悪いだけかもしれんが、変換行列とか求めるのって
図書いて導き出せるもんなんですか?線形代数何度も勉強してるがダメだ・・・
またお前か
いい加減頭の悪い質問の仕方するのやめろよ
図を描いて導くって意味わからん。
数学の話なんだから式をかいてりゃ求まる。
>>52 造語じゃなくて、一般的過ぎる言葉って感じ。
フィルタの出力を入力に戻す特殊効果全般を指す言葉。
58 :
デフォルトの名無しさん:2010/05/24(月) 06:32:06
なんたる自意識過剰
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離れた時にガクガク
元が悪いんじゃね?
てかこんな2Dチックな計算してるのを3Dに直すより
行列で回転移動させた方がスマートになるんじゃね?
3Dで表示してる以上キャラのワールド行列はすでに出来上がってるのに
なんでいちいち全部分解して再計算するの?
65 :
デフォルトの名無しさん:2010/05/24(月) 07:27:59
>>64 言ってる意味がよくわからんが、2D上で試すことはたまにやるし
分解しないと計算もへったくれもなくね
なぜアークタンジェントが使われるのですか?
もうほっとけよ
2つの2次元ベクトルから相対角度の出し方を教えてください
できました
72 :
デフォルトの名無しさん:2010/05/24(月) 10:04:22
>>75 ありがとうございます。全く気付きませんでした
タンジェントの足す公式で今知ったアークタンジェントを使いました
atanってことは外積でやったのか
78 :
デフォルトの名無しさん:2010/05/24(月) 17:25:07
ここ二年ばかり新しい
sdkインストールしてないや
ふーん
どうでもいい
D3DXMatrixShadowの内部でやってる式が理解できない。。。
ヘルプに式書いてるんだけど分かる人居ます?
パス1
>>80 Jim Blinn's Corner第1巻の第6章に詳しく載ってる。
俺は英語版しか持ってないけど、何年か前に日本語訳も出てたと思う。
結論だけ書くと、地面の同次座標表現をG(4次元縦ベクトル)、
光源の同時座標表現をL(4次元横ベクトル)とするとき、
ShadowMatrix = (LG)I - GL
となる。ただし、I は4x4単位行列。
LGがスカラー(内積)でGLが4x4行列になることに注意。
あれ?D3DXMatrixShadowのヘルプを見たら
>>82の式と符号とか微妙に違うな。
理由はよくわからないけど、基本はBlinn's Cornerの理論と同じだと思う。
質問です。
レンダリングターゲットにできるテクスチャーをAとします。
Aに対して、Aをテクスチャとして利用しての描画はできるのでしょうか?
曇りガラスのように、向こう側に見える風景をゆがめる物体を表示するとします。
それが複数枚重なっている場合、一番奥にはガラス描画前の風景を。2番目には1番目のガラスを描画した後の風景を…。
といった感じに、テクスチャを渡す必要があると思うのです。
その際、
バックバッファに風景描画
テクスチャにコピー
そのテクスチャを使ってバックバッファに2枚目を描画
テクスチャにコピー
とやるのはコストが高い気がしまして。
とはいうものの、Aを参照しながらAに描画なんてことができる気もまたしなくて…。
>>86 できない。
その例ではコピーする必要はなくて、レンダリングターゲットを2枚用意して
交互に入れ替えて使えばいい。
すまん、何に使うのかよく読んでなかった。
ガラスの描画だと、やっぱりコピーして使うものか。
さあ
バックバッファと同じサイズのレンダリングターゲットテクスチャAと
適当なサイズの曇りガラス用レンダリングターゲットテクスチャBを用意して
Aに風景をレンダリングする
AをテクスチャとしてBに曇り部分をレンダリングする
BをAにレンダリング
これを曇りガラスの枚数分繰り返して
最後にAをバックバッファにレンダリングでいいんじゃね?
詰んだ
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とも関係無い何かを左右前後に動く
もう解決策が思いつきません。助けてください
ソース出すのは確か嫌なんだよね?
じゃあ、そこに出てる変数を全部ウォッチに登録して
その計算後のすぐ後にブレークポイント打って
適当な方向にキーを入れた時の
全部の変数の値見れるようにしたもののSSをうpしてよ
それ以前に
デバッカの使い方しらないから躓いてるんじゃないの?w
はい
ブレークポイントで止めるくらいしか知りません。ウォッチもあまりやったことがありません。頑張ってみます
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;
エスパーすると
inputUDとinputRLに
アナログキーの情報が-1.0〜1.0fで入ってると仮定して(だよね?)
ワールド座標軸が奥方向がZ+であるのに対して
inputUDのU方向の入力値が-だから
X軸方向には正しく動けるけど
Z軸方向には反転して動いちゃうとかってオチじゃないの?
>>95 ありがとうございます。あとでやってみます
At、View、UPがエラーでシンボルが見つかりませんとなります
それと、横を押した時と、その次のコマをうpれば良いですか?
画面が出てこないとキーを押せないのでその間に何回転もしてしまうのですが
>>96 ありがとうございます
多分、Atの位置とキャラの座標を結んだ線を中心に前横後ろに移動してしまいます
Atには直前でキャラの座標が入ってるのですが、D3DXMatrixLookAtLHに入れる時にはキャラの向きを大きさ調節して足したのが入ってるのでキャラのちょっと前が今のAtです
自分のイメージでは、カメラとそのAtを結んだ線を基準に前後左右に動きたいのですが、なぜかキャラとAtを結んだ線が基準になってしまいます
すみませんPIXでRelaseイベントしかデバッグできません。
全部じゃなくて最小に削った奴でいいからもうソース出せって
じゃなかったら、もう少し日本語を磨いてから出直してくれ