【C++】 DirectX初心者質問スレ Part2【C++】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001999
NGNGこれらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する香具師 】
・ どんな事で躓いているのか明確にしる。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
00022=1=1000=999=998
NGNG前スレ>997
これをコンパイルしてみろ
DDの初期化だけのヤツ
リンクの設定もいらんから
パスが通っていたらビルドできるはず
うちではできた
0003前スレ987
NGNG一からといっても以前作ったDirectDrawベースの
簡単なプログラムがあったので、それ使うので
何ら問題無いです。そのプログラムは正常に動きました。
どうもありがとうございました。
0004デフォルトの名無しさん
NGNGスレ立て乙
0005デフォルトの名無しさん
NGNG(*´∀`) n
 ̄ \ ( E) グッジョブ!! >>1
フ /ヽ ヽ_//
00062=1=1000=999=998
NGNGがんがれ
>4,>5
ども
どさくさにまぎれて生まれてはじめての1000ゲット&2ゲットもできたw
0007デフォルトの名無しさん
NGNG乙
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGメタセコでx-file
モーション付けたくなったらBlender(あまりおすすめしないが)とかでアニメーション付x-file
アニメ付はフリーの定番ないよ
高額なら3dsMAX使いが多いっぽいけど
0010デフォルトの名無しさん
NGNG乙だけど、それなら誘導しろよw
0011デフォルトの名無しさん
NGNGXファイルはopenglでも使えますか?
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGGLにID3DXMeshみたな機能は無いね。自分でパーサ書くかIDirectXFile系使うか
D3DX使うかしてメモリ上でGL用に調整するしかねえよ、という話。
つーかGL使う時点でモデルをxで出力する状況が謎。
パーサ書くのが面倒なら他のフォーマットでも大抵は既存のものがあるべ。
0014デフォルトの名無しさん
NGNGアニメーション付きのフォーマットでいいのある?
0015デフォルトの名無しさん
NGNGXfileのロード、表示まではサンプルなど見て簡単にできてしまったのですが、
ポリゴンとマウスの当たり判定をどうするか、とかではなくて、
頂点情報を編集するにはどうすればよいかということが分かりません。
0016デフォルトの名無しさん
NGNG意味が分からん。
0017デフォルトの名無しさん
NGNGそういうことをやろうとするときは、まずD3DXの高レベル関数に頼らず、
自分で読み込み部分を作るところから始めること。
中身を理解せずに使うから、その程度のところで詰まることになる。
0018デフォルトの名無しさん
NGNGアドバイスありがとうございます。自分でもそう思うのですが、
何しろ急ぎというか、便利なもので使えるものは使いたいなと思っております。
例えばスキンメッシュとかも完璧に勉強して自前実装できればよいのですが、
ひとまずそこまでやってられないのでここもモーションつきXfileを使う方針です。
そんなわけで今回はDX関数に頼ってできるものならそれで済ませたいのです。
0019デフォルトの名無しさん
NGNG自前が多いだろうけど、LWのフォーマットは結構使われている気がする
>>18
サンプルにpickっていうのがあるから、それを自分でじっくり調べてから
0020デフォルトの名無しさん
NGNG.Xファイル以外で、アニメーションデータを含むモデルデータを持つことができるフォーマットでいいのがある?
>>18
頂点座標の編集の仕方。
ID3DXBaseMesh::LockVertexBufferを使って頂点データへのアドレスを取得。
データ構造はID3DXBaseMesh::GetFVFで得られるFVFを調べると分かる。
(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)だとは思うが。
目的の頂点情報をいじったら、ID3DXBaseMesh::UnlockVertexBufferで戻す。
0021デフォルトの名無しさん
NGNGありがとうございます。いろんな所からパkってきて最終的に↓のようなかたちで
目的のポリゴンの頂点座標取得まではできました。ここまでの大きな処理の流れ的な部分は
理解できてると思うのですが、実はポインタの扱い方すら実はまだ怪しいという段階なので
ここからどすればよいのか分かりません。v0〜v2の値を適当に弄って戻すには
どんな風に書けばよいのでしょうか。*が二重についてたりしてワケが分かりません…
Cの初心者スレで聞こうと思ったんですが、いきなりDXの話を持ち出しても話が通じなそうなので…
D3DXVECTOR3 v0, v1, v2;
v0 = *(D3DXVECTOR3*)( pVertices + FVFSize*pIndices[0] );
v1 = *(D3DXVECTOR3*)( pVertices + FVFSize*pIndices[1] );
v2 = *(D3DXVECTOR3*)( pVertices + FVFSize*pIndices[2] );
0022デフォルトの名無しさん
NGNG*が二重って、どこよ。
かけ算の*とポインタの*をごっちゃにしてる上に、
キャスト変換について分かってないってとこか。
D3DXVECTOR3 *v0;
v0 = (D3DXVECTOR3*)( pVertices + FVFSize*pIndices[0] );
まずこうしろ。そうすりゃv0->xでX座標を修正できる。
0023デフォルトの名無しさん
NGNG強引なポインタのキャストは危険なのでお勧めしない
多少冗長になっても、きちんと書かないとあとで変なバグのもとになる恐れがある
ポインタがしっかり理解できていないならなおさら
D3DXVECTOR3 v0, v1, v2;
int index = pIndices[0];
v0.x = pVertices [ index ].x;
v0.y = pVertices [ index ].y;
v0.z = pVertices [ index ].z;
で取得して処理が終わったら
int index = pIndices[0];
pVertices [ index ].x = v0.x;
pVertices [ index ].y = v0.y;
pVertices [ index ].z = v0.z;
でもどしてやる
でも慣れても漏れはそんな強引なキャストを使った書き方はできるだけしないようにしている
0024デフォルトの名無しさん
NGNG違う場所の値を引っ張り出して無駄にバグを発生させることになる。
002523
NGNGそうだな
今回pVertices の型について何も書いてないからVOID *かも知れないな
漏れは自分で決めたFVFしか使わないから常にFVFに対応した構造体を準備して使ってるから
ついこう書いてしまった
XMeshなんてしばらくつかってないが、自分の使いたい頂点フォーマットの状態で
読み込む(読み込んだ後コピーする)方法で使ってたし
002615
NGNGDWORD FVFSize;
WORD* pIndices;
BYTE* pVertices;
のように定義されています。
細かい事はよく分からずになんとなく大きな流れだけ追っているのですが
v0 = *(D3DXVECTOR3*)( pVertices + FVFSize*pIndices[0] );
↑の( pVertices + FVFSize*pIndices[0] )で違う型のアドレスの足し算掛け算をして
更にD3DXVECTOR3のポインタにキャストして、その値を参照・・・っていうのが
全くワケがわからないというか、、、(この辺がどういう意味か教えていただけると大変助かります)
ひとまず>>22の方に教えていただいた風にしてみたら
とりあえず頂点を動かせましたが、その頂点を含む周辺の面が全部動くわけではなくて
割れてしまうんですね。。。ってことは3Dモデリングツールのように
モデルの頂点をマウスで掴んで引っ張ったりしたい場合は
その点を含む面を更にどうにかして全て捜査しないといけないのでしょうか?
002715
NGNG今のところD3DXIntersectでマウスとメッシュの当たり判定をとって、
D3DXIntersectが返した面のインデックスをロックして、
それから>>21のようにして頂点を取り出しています。
0028デフォルトの名無しさん
NGNG表示用のモデル → 頂点配列はVertexBufferに。
これ常識、すなわちID3DXMeshは使うなってこった。
0029デフォルトの名無しさん
NGNG22の者だが、
>細かい事はよく分からずになんとなく大きな流れだけ追っているのですが
↑このように宣っている時点で、オマイはプログラムするな。
なんとなくでプログラムできるわけないだろ。
元々のMeshがどういうデータ構造になっているかを丹念に丹念に丹念に調べた上で、
頂点座標をいじるのが普通だ。それが当たり前だ。
初心者だから、なんて言い訳通じないぞ。頂点編集なんて。
003015
NGNG0031デフォルトの名無しさん
NGNG>>26を見る限り
結局はポインタを全然理解してないだけ
割れるか隣のポリゴンが変形してくっついてくるかは
頂点を共有してるかどうかだから
データの持ち方の問題
0032デフォルトの名無しさん
NGNG.Xファイルを読み込んだあとのデータ構造がどうなっているかを理解しないと、
君の望むことはできない。
君が質問している「頂点の編集のしかた」はとてもとても奥の深い話。
ID3DXBaseMeshインターフェイスを駆使してくれ。
003315
NGNG>>28
たしかにID3DXMeshはややこしいのですが、
そういう方法を使うとD3DXIntersectとかも使えなくなりそうな、、、
余裕ができたらゆくゆく移行したいと思います。
>>31
実際やってみたときに頂点を共有してないんだなとは感じたんですが、
ではこれはどうやったら共有させられるのでしょうか。
現在テストしているモデルはライトウェーブで作った単純な格子状のメッシュです。
まず一枚の四角ポリゴンに対し一つのUVを割り当ててテクスチャを貼り、
それをコピーし格子状に沢山並べて、頂点をマージしてまとめたものです。
それをプラグインのエクスポーターでXfileに出力しています(そのとき三角分割されます)。
そのメッシュでテストしてみると、全部の面が三角形にばらばらになるというわけではなく、
UVの単位(元の四角形単位)でばらばらになっているようでした。
>>32さんのおっしゃるように、読み込んだあとの
データの持ち方(持たせ方)の問題だと思うのですが、
D3DPT_TRIANGLESTRIPとかD3DPT_TRIANGLELISTとかっていうのは
単に「描画」の問題で頂点定義のされ方とは別の問題ですよね?
003415
NGNGもしまだ面倒見てやろうという方がおられましたら
あっちの方で教えてください。
他の方の質問を流してしまったかもしれません。すいません。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG次の質問まだ〜?チンチン
0037デフォルトの名無しさん
NGNGよくRTSとかMMOとかでユニットを選択した時などに
地面にマーキングされるやつありますよね。
ああいう事をやりたいんですが、
あれはテクスチャを地面に投影したりしてるんでしょうか。
一枚ポリゴンをその場に置くだけだと角度の違うポリゴンを跨いだ時に
浮いてしまうんで、見た目が良くなさそうです。
なんかテクニックの名前とかついてたら調べますので教えてください。
もちろんずばり方法を教えてくれれば一番嬉しいのですが。
0038デフォルトの名無しさん
NGNGhttp://pcweb.mycom.co.jp/news/2002/04/26/03dl.jpg
こんなん?
ようしらんけど、Z深度が足りないだけって話じゃないの?
もちっとニアとファーを近づけてみたらどう?
俺はそういうテクニックあんまりしらんけど床があんまり凸凹してなけりゃZクリアしちゃうけどね。
ってそりゃねーか?
0039デフォルトの名無しさん
NGNGテクスチャを地面などに投影したい、と言葉でいうのは簡単なんですが
実際やるとなったらどうやるのか全く見当がつかないので
どこかに参考になる資料でもあればよいのですが・・
>ようしらんけど、Z深度が足りないだけって話じゃないの?
>もちっとニアとファーを近づけてみたらどう?
いやまだ実際になにかを作ったわけではないのですが、
その前にどういった方法があるのかなと思いましてお聞きしました。
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNGL : ライティング済み
0043デフォルトの名無しさん
NGNGrhwってなんですか。
SDKドキュメントの日本語は意味不明。
0044デフォルトの名無しさん
NGNG同次座標のw成分の逆数
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGそれで分かったら聞かないって。
0047デフォルトの名無しさん
NGNGZバッファが邪魔するなら、それを描画するときだけZテストをOFFにする。
前景キャラとの兼ね合いがあるので、地面描画(Zテストあり)→
マーカ描画(Zテストなし)→その他描画(Zテストあり)とする。
0048デフォルトの名無しさん
NGNG単にテクスチャの投影のやり方とかの話をしているのではないか。
0049デフォルトの名無しさん
NGNG本質は頂点のViewProjトランスフォームと同じ。
結局出力先がx,y=-1.0〜1.0のレンジを持つバックバッファなのか
x,y=0.0〜1.0のレンジを持つテクスチャなのか、違いはそれだけ。
float offsetX= 0.5f + (0.5f / (float)texture_width_precision);
float offsetY= 0.5f + (0.5f / (float)texture_height_precision);
float4x4 mScaleBias(
0.5f,0.0f,0.0f,0.0f,
0.0f,-0.5f,0.0f,0.0f,
0.0f,0.0f,1.0f,0.0f,
offsetX,offsetY,0.0f,1.0f);
float4x4 mTexProj = mModelWorld * mTexVeiw * mTexProj * mmScaleBias;
extern float3 vPosInWorld;
extern sampler spTexSorce;
float4 vTexCoord = mul( float4(vPosInWorld, 1.0f), mTexProj);
float4 vTexColor = tex2Dproj( spTexSorce, vTexCoord);
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGデカール用Projection Matrixの算出方法をご存じないでしょうか?
手動でやればそこそこ綺麗なのが出来るんだけど、
まさか視野角かえるたびに、ユーザに手動でやらせるわけには行かないしねぇ…。
0052デフォルトの名無しさん
NGNG歪む。
要は、色セロファンを貼ったスポットライトだと思えばいい。
0053デフォルトの名無しさん
NGNG詳しい解説キボンします。
0054デフォルトの名無しさん
NGNGxyzの3次元の空間の内、目に見える領域(視錘台)を切り取って
xy(-1.0〜1.0)z(0.0〜1.0)の範囲に収まるよう変換し(射影トランスフォーム)、
この立方体状になった空間を、xy(-1.0〜1.0)の2次元の空間に変換すること。
投影テクスチャでは、これとまったく同じ方法で、
xyz3次元の頂点座標をバックバッファではなくテクスチャのxy(0.0〜1.0)の2次元空間に変換する。
そうすると、この頂点の位置に対しテクスチャのどのテクセルが対応するかわかる訳だ。
0055デフォルトの名無しさん
NGNG切り取らないといけないような。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGどうすればよいのでしょうか?
sndPlaySoundはすぐに鳴ります。
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG質問する側もばしっと質問してないからな。
0062デフォルトの名無しさん
NGNGそれぞれ別の位置座標float X, Y, Zと、回転角度float H,P,Bの状態をもっています。
これらの物体に、現在のそれぞれの位置・相対位置関係を保持したまま
親子関係を持たせようとしています。
BをAの子にするとして、Aを移動、回転させるとBはそれに従うようにし、
Bは今まで通りに自由に移動回転できるようにしたいです。
それで、単純に、子の変換マトリックス(回転行列*移動行列)の右に、
親の変換マトリックスを掛けてみたんですが、
親子関係を組んだ瞬間に、子の位置が、「親の位置座標分」ずれてしまいました。
(親子関係を組んだ時の親の位置が(0,0,-1)だったら、子が(0,0,-1)の分だけ現在位置からずれる)
なので最後に親の移動行列の逆行列を掛けてみたんですが、
今度は親の移動に子がついてこなくなってしまいました。
それはそれで当たり前な感じもするのですが、ではどうしたらよいのでしょうか。
教えてくださいお願いします。9.0bを使ってます。
(ばしっと質問できているだろうか…)
0063デフォルトの名無しさん
NGNG親子関係をつけたら、親からの相対位置になるのは当たり前。
親の逆行列をかけるって発想は良い。が、「現在の行列の逆行列」ではダメ。
初期位置の逆行列を掛ければよい。
0064デフォルトの名無しさん
NGNGありがとうございます。
初期位置っていうのは、親子関係を組んだ瞬間の親の位置って事ですよね?
そう解釈して、
「子の(回転*移動)行列」*「親の(回転*移動)行列」*「親子関係を組んだ瞬間の親の((回転*移動)行列)の逆行列」
としてみたんですが、
一応、親子関係を組んだ瞬間に子がずれることはなくなり、
親の移動にも子がついてくるようになったものの、
親を回転したときに、子の回転の中心がよく分からない場所になってしまいました。
一応、全ての子がどこかを中心に衛星的に回転しているのですが、親中心ではありません。
掛ける順番とかが間違ってますでしょうか?
0065デフォルトの名無しさん
NGNG次からその値を使えばいいだけなので、以降逆行列を使う必要性はない。
0066デフォルトの名無しさん
NGNGまずお互いの関係を決める
親と子の関係行列 = (子の初期位置の行列) * 「親の初期位置の逆行列」
以降は
子の行列 = 「親と子の関係行列」 * 「親の回転移動行列」
ちなみに子を親を中心に回転させたいときは
子の行列 = 「親と子の関係行列」 * 「子を親を中心に回転させる行列」 * 「親の回転移動行列」
子をローカルで回転させたいときは
子の行列 = 「子の回転行列」 * 「親と子の関係行列」 * 「親の回転*移動行列」
子をローカルで回転させつつさらに親を中心に回転させたいときは
子の行列 = 「子の回転行列」 * 「親と子の関係行列」 * 「子を親を中心に回転させる行列」 * 「親の回転移動行列」
つまり「親と子の関係行列」をかける前は子のローカル座標系
「親と子の関係行列」をかけた後は親のローカル座標系
最後の「親の回転移動行列」をかけた後はワールド座標系
0067デフォルトの名無しさん
NGNGがんばって書いたので遅いかもしれんが書いておく…
親を中心に回転させたいのなら
「子と回転行列の軸になる位置との相対位置」が「子と親の相対位置」
と一致する状態にして回転させないとダメ
↓参考までに
親も子も元のデータとしては0,0,0
移動行列が親はz=-1で子がz=-3
最初は回転していないものとする
この状態で親子関係を組み
Y軸中心に反時計周りに90度回転させることを考える
>>64の順だと
子は自分の行列で(回転しないので)z=-3に
親の回転行列でx=3に移動してから
移動行列でx=3,z=-1に移動
親の初期の逆行列でzが+1されてx=3にきてしまう
(この例だとY軸中心で回転してしまう)
自分の行列をかけた後(z=-3)
親の初期座標の逆行列でzを+1移動させ(z=-2)
親の行列をかけると(回転してx=2、移動してx=2,z=-1)
希望通りに親を中心として回転する
006862
NGNG最終的には
「子の(回転*移動)行列」*「親子関係を組んだ瞬間の親の((回転*移動)行列)の逆行列」*「親の(回転*移動)行列」
として、
なんだか上手くいっている模様です。
なんとなくしか理解できてないので、
頂いたレスは後々の為にとりあえずコピペしてとっときます。
ありがとうございました。
0069デフォルトの名無しさん
NGNGそれを自分で作ったんですけど
自分で作った方は何故かメッシュがぺちゃんこです。
サンプルの方はふんわり膨らんでて、
なんかパンの焼く前、焼いた後(BEFORE,AFTER)みたいで。
どうすると、膨らむんでしょうか。パン...ではなく。。。
0070デフォルトの名無しさん
NGNG質問をできるだけ詳細に的確に伝える為の努力をして下さい。
007169
NGNGサンプルの方は2倍くらい分厚い。
横はそのままサンプルと同じ。
視点を色々変えて見たので見間違えではないです。
メッシュはUFOです。
位置を指定しそのまま表示してます。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGアスペクト比かFOVYの設定が違うんじゃないか
とりあえずそこを見直すか、いじってみれ
あとはメッシュ用のマトリクスに変なマトリクスをかけていないか
多分これのどちらか
関係ないけど
D3DXMatrixPerspectiveFovRH(LH)の
Aspect
[in] アスペクト比。 ビュー空間の高さを幅で除算した値として定義される。 (日本語ヘルプ)
[in] Aspect ratio, defined as view space width divided by height. (英語ヘルプ)
この誤訳は最新版では修正されてるのか?
0074デフォルトの名無しさん
NGNGhttp://rupan.zive.net/~kain/cgi-bin/upload/src/up14316.bmp
火を加えると
http://rupan.zive.net/~kain/cgi-bin/upload/src/up14314.bmp
アスペクト比でした。変えたら今度はたこ焼きみたいになった。
ありがとうございました。
0075デフォルトの名無しさん
NGNGそのままDrawsubsetでレンダーしてるんですが、
もしこれをワイヤーフレームで表示したい場合は
やはり自分でVertexBufferに入れなおしてDrawPrimitiveとかで
描画しないと無理ですか?(ピクセルシェーダーとかは使わずに)
バージョンは9.0bです。
0076デフォルトの名無しさん
NGNG「ふぃふぉ」って言うな!!
ムカつく!!
0077デフォルトの名無しさん
NGNG今までのヘルプ
[in] アスペクト比。 ビュー空間の高さを幅で除算した値として定義される。
October 2004 ヘルプ
[in] ビュー空間の幅を高さで乗算して定義したアスペクト比。
また微妙に間違っとるな
0078デフォルトの名無しさん
NGNGSetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
この質問が多いのは、ヘルプの検索が「ワイヤーフレーム」じゃなく
「ワイヤフレーム」じゃないと引っかからないのが一因なんだろうな。
0079デフォルトの名無しさん
NGNGじゃねえの?
まあ実際エフアイエフオーって言うけどさ
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGサンクスコ!
顔謝します!
0082デフォルトの名無しさん
NGNGふぃふぉ ふぃふぉ ふぃふぉふぃふぉふぃふぉ
ふぃふぉ 仕事が好き
0083デフォルトの名無しさん
NGNGそういわれると白雪姫思い出してしょうがねえんだ。
仕事に差し障る。やめろ。
0084デフォルトの名無しさん
NGNGより酷くなってるw
こんな翻訳した香具師くびにしろ
0085デフォルトの名無しさん
NGNGFILO フィロ
LIFO リフォ
LILO リロ
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNGマイクロソフトはゲイツ以外全部AIですが何か?(最近はゲイツももしかしたらAI)
0088デフォルトの名無しさん
NGNGHPの社長だっけ?
0089デフォルトの名無しさん
NGNGDirectXのプログラムを作るのに他に何か必要でしょうか?
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGんなこと訊いているってことは無能なんだろ。
というわけで、ちみに必要なのは能力です。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG綺麗なポリゴンを表示することは出来ないでしょうか。
今はこの画像の下の長方体の様に、同じ向きでも面ごとに色が違ってしまっています。
ttp://data.uploda.net/anonymous/etc2/dat2/upload23100.gif
せめて多少違うなぁ、くらいに抑えたいのですが、どうしたら良い物か・・・。
ちなみに上の長方体がグーローシェーディング+頂点法線(黄色の線)です。
グーローなら問題ありません。法線計算も間違っていないようです。
もちろん1点1法線ではなく、面ごとに個別に頂点と法線を設定すれば、
綺麗に表示されますが、頂点数を増やさずになんとかならないでしょうか。
0095デフォルトの名無しさん
NGNGもう割り切って、どれかの面に対して垂直にするとか。
0096デフォルトの名無しさん
NGNG上のほうはマグロっぽいな。関係ないけど。
009794
NGNGレスありがとうございます!早速やってみました。
ttp://data.uploda.net/anonymous/etc2/dat5/upload23103.gif
おかげで色に統一感を出すことができました。
エッジが消えてしまったのが残念ですが。
下のが理想ではあるのですが、これはどうも1点1法線では構造的に無理っぽいですねぇ。
と、95さんのやり方を実装しながら気づく事ができました。
>>96
それもかなり安い赤身っすね
最近食べてないなぁ
009895
NGNGせめてこうして欲しかった・・・
0099デフォルトの名無しさん
NGNG判定したいオブジェクトの逆行列を求め、それをRayPosに加えていますが、回転したときの判定がうまく
動作していません。
Y軸回転すると 数角度ずつに当たり判定になったり、ならなかったり、ころころ変わります。
プログラムは以下のように組んでいます。
D3DXMATRIX revmat, mat, mTrans, mScale, mRot;
D3DXMatrixIdentity(&mat);
D3DXMatrixTranslation( &mTrans, pos.x, pos.y, pos.z ); // 平行移動
D3DXMatrixScaling( &mScale, fScale, fScale, fScale ); // 拡大縮小
D3DXMatrixRotationYawPitchRoll( &mRot, rot.y, rot.x, rot.z ); // 回転
mat = mRot * mScale * mTrans; // オブジェクトの行列
D3DXMatrixInverse( &revmat, 0, &mat );// 逆行列
D3DXVECTOR3 RayPos = D3DXVECTOR3( 0, -1, 0 ); // 地面との判定
D3DXVec3TransformCoord( &RayPos, &RayPos, &revmat ); // RayPosに逆行列を加える
// 当たり判定
D3DXIntersect( pData->pD3DMesh, &RayPos, &D3DXVECTOR3( 0, -1, 0 ), &bHit, &FaceIndex,
&U, &V, &Dist, 0, 0 );
if ( bHit ) { 当たり判定処理 }
どこが変なのか教えてください。
0100デフォルトの名無しさん
NGNG"レイの方向"にも逆行列を掛ける必要がある
(平行移動を無視するために D3DXVec3TransformNormal を使う)
0101デフォルトの名無しさん
NGNGfor( DWORD i=0; i < dwNumMaterials; i++ ){
D3DDev->SetMaterial( &pMeshMaterials[i] );
D3DDevv->SetTexture( 0, pMeshTextures[i] );
pMesh->DrawSubset( i );}
↑のような描画関数を含むメッシュクラスがあり、これ自体は上手く動いています。
これとは別に、新たに↓のようなビルボードのクラスを作りました。
struct LVERTEX
{float x,y,z;
float nx,ny,nz;
float tu,tv;};
と、FVFを定義し、
D3DDev->SetTexture(0,m_pTexture);
D3DDev->SetStreamSource(0,m_pVB,0,sizeof(LVERTEX));
D3DDev->SetFVF( D3DFVF_LVERTEX );
D3DDev->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
こんな感じの描画関数を持ってます。
それで、これらをメインループ内から次のように呼んでいます。
billboard.Render();
mesh.Render();
このように二つとも呼ぶと上手く描画されます。
メッシュクラスの方は以前から上手く動いていましたのでこちら単体では問題は出ません。
ですが、ビルボードの方だけを呼ぶと、テクスチャなどが反映されず真っ黒に表示されます。
呼ぶ順番を変えてもやはり同じくおかしいです。
原因が分からないのですが、何か手続きが抜けている、など、問題はありますでしょうか?
9.0summerを使っています。なにかまずそうなところがあったら教えてください。お願いします。
0102ko
NGNG正確に表示されません。棒は右端に表示させるようにしてます。
周波数、(処理後の時間 − 処理前の時間)をつかって、描画時間は1/60
と考えてるのですが、うまくいきません。
わかる方、良き回答を!!!
0103デフォルトの名無しさん
NGNGそのコードだけではどこがまずいのかはわからん。
どうせm_pVBの内容がおかしいんだろ。
>>102
エスパーでも無い限り、オマエがしたいことは意味不明。日本語の勉強から出直してこい。
0104デフォルトの名無しさん
NGNGもしかしてプログレスバーのことか?
0105285
NGNG*のマーク
これの送り先ってどこにいくの:?
0106デフォルトの名無しさん
NGNG意味不明
0107デフォルトの名無しさん
NGNG>105は誤爆だろ
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNGttp://www.chukyo-gun.co.jp/cgi-bin/chukyo-gun/sitemaker.cgi?mode=item_detail3&page=page3&category=4&no=6
0110デフォルトの名無しさん
NGNGレイの方向にも逆行列を掛けましたが、やっぱり数角度ずつ
当たり判定になったり、ならなかったりを繰り返します。
なぜでしょうか。
0111デフォルトの名無しさん
NGNGRayPos=(0,-1,0) は何を表してるの?
(実際はプレイヤーの位置とかが入るのかな)
あと、行列の合成は Scale -> Rotate -> Trans の順が自然だと思う。
(R->S->T だと拡大率が x,y,z それぞれ異なる場合におかしくなる。)
"数角度づつ"はようわからん。角度はもちろんラジアン角使ってる?
0112101
NGNGども。何とか自己解決に至りました。
ビルボードクラスの方でマテリアルを設定してないというオチでした。
FVFに頂点カラーを持たせてないのでマテリアルは関係ないしなー
とか思ってましたが、別物でした。
それで、メッシュクラスのレンダーを呼んだときに
そっちではマテリアルがセットされていたので
そのためビルボードの方も運良く発色していた、ということでした。
すいません。
0113デフォルトの名無しさん
NGNGDirectX9.0をダウンロードして、実行可能ファイルを試してみたんですが、
とんでもなく遅いです。Javaが遅いとかいう遅さではありません。
パソコンが古いなら買い換えますが、でも、ほんの2年前のもの。
何か間違っているでしょうか?もし、買い替えが必要なら、注意点を
教えてください。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGRayPos の ( 0, -1, 0 ) は 地面の座標を表しています
実際はプレイヤーの座標をいれて、プレイヤーがどの場所に移動してもそこに地面があるように
するべきなんですが、これは 0, -1, 0 の地点のみに地面があるようにしています。
当たり判定を検出した位置で、回転させると、判定されたり、判定されなかったりを繰り返します。
この間隔が、数角度ずつです。
もちろんラジアン角を使っています・・・・・・・と思ったところ
ラジアン角に直していませんでした;;
最初はちゃんと直していたんですが、どうやらここに書き込むときに
わかりやすいように直して間違って消してしまったようです。
ありがとうございました。
0116デフォルトの名無しさん
NGNGレスサンクスです。
CPU AMD 902MHz
RAM 496MB
ビデオカード わかりません
ビデオカードはデバイスマネージャを見ると不明となってます。
マシンはソニーのVAIOです。
0118デフォルトの名無しさん
NGNG初心者板行き
0119113
NGNGしかし、雰囲気からするとビデオカードでしょうか。
そもそもDirectXを使うためには高価なビデオカードを使わないとだめなんでしょうか。
だとすると、自分のマシンで開発できても、人のマシンで実行できないわけですよね。
ハードの足りない部分はソフトで埋めるということでしたが、それがこんなに遅いのでは。
0120113
NGNGどなたかの解説をお待ちします。
0121デフォルトの名無しさん
NGNGPC初心者
http://pc6.2ch.net/pcqa/
0122デフォルトの名無しさん
NGNGまあどうせそういう部類だ。
0123デフォルトの名無しさん
NGNGDirectX9を使ったアプリケーションを快適に動作させるためには
DirectX9に対応したハードウェアが必要
未対応でも動作はするが、経験したとおりの状況になる
プログラムを作成することはそのマシンでも可能だが
動作確認を行うためにはDirectX9に対応したグラボを積んだPC必須
>116で
>ビデオカード わかりません
メーカー製のPCの場合メーカーのHPにスペックが載っているはずなので確認してください
ビデオカードの名前よりも、どのDirectXに対応しているかをまずは確認してください
DirectX9とかDirectX8とか特に書いていない場合はまず間違いなく
DirectX6以前のものです
>119
>だとすると、自分のマシンで開発できても、人のマシンで実行できないわけですよね。
そうです。常識です。普通です。
なのでより多くの人の環境で動作するプログラムを作る場合は
今ならDirectX9ではなくDirectX8やDirectX7で開発します
とにかくあなたは現状で知識が足りなさ過ぎます。初心者以前です。
そのような人はまずある程度知識を溜めてからまたきてください
ここでいちいち基本的すぎることについての質問返答を繰り返すと他の人の迷惑になります
疑問に思ったらまず過去ログを見たり、ネットで検索したりしてください
超基本的な知識は容易にに得られると思います
0124デフォルトの名無しさん
NGNGオブジェクトを拡大、縮小すると光の当たり具合がかわってしまいます。
縮小すると 光が強くなる
拡大すると光が弱くなる
この原因は何かわからないでしょうか。
0125デフォルトの名無しさん
NGNG>>124に答えてやってくださ〜い
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGSetRenderState( D3DRS_NORMALIZENORMALS, TRUE );
0129デフォルトの名無しさん
NGNG違うかもしれないけど、一応、かなり疑わしい。
それ以上具体的なことについては中身をみなきゃ分からない。
それがでてこない>>125は実力不足だと思う。
そしてもっと具体的な内容を提示して質問しない>>124もなってないと思う。
0130デフォルトの名無しさん
NGNGもしかしたら124はのぞみの回答をみごとに引き出す
質問のプロフェッショナルかもしれない。
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG昔似たような事をやった覚えがあるw
0134124
NGNGありがとうございました。
0135デフォルトの名無しさん
NGNG>>124に答えてやってくださいなんて、私は>>124ですって言ってるようなもんだろ
0136デフォルトの名無しさん
NGNGint* c = new int[N];
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
return c;
}
これってコンパイルとラン可能ですよね?
自分でやってみたら、動いたんですけど。。。
でもエラーとか不利点とか、あるみたいで、それがいまいち、よく分からないんですが。。。
ポインターって、関数で、&パス(リファレンス)できないですよね?
なんでですか?
0137デフォルトの名無しさん
NGNGコンパイラ何?
>int* c = new int[N];
からもわかるとおりC++だぞ
あと関数宣言とmain書けよ
関数内部でnewしてるから
ちゃんと外で開放しろよ
さっぱりわからないんだったら
地道に勉強すべし
人のソース追っかけるんじゃなくて
疑問に思ったことをコードに起こして
動作を確認しながらひとつずつ理解していかないと
挫折するぞ
特にポインタとか
ちなみにDirectXはまったく関係ないぞ
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140113
NGNGレスありがとう。
だいたいわかりました。
>疑問に思ったらまず過去ログを見たり、ネットで検索したりしてください
>超基本的な知識は容易にに得られると思います
ここは初心者質問スレですし、実際、容易に必要な知識が得られましたよ。(w
それにしても、そんなに機種依存なら、なんだかあまり価値がないような気がしてきました。
でわ、でわ。
0141113
NGNG結論として、DirectXはやめて、OpenGLにします。
0142デフォルトの名無しさん
NGNG| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ >>141
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0143デフォルトの名無しさん
NGNG0144113
NGNGなくなるわけですよね。でわでわ。
0145デフォルトの名無しさん
NGNG速度は上がらないぞ。
0146デフォルトの名無しさん
NGNG透過をした部分が重なると上手く抜けないっていう記事がありました。
実際、自分でそれを参考に組んだらおかしくなりました。
ですが、SDKサンプルや、工学社本のDX8実践プログラミングのサンプルでは
上手く透過できてる模様です。なぜですか。
0147デフォルトの名無しさん
NGNG多分それはポイントスプライトに限らない問題だと思う
半透明のポリゴンは奥から描いていかないとだめ
ポイントスプライトの頂点の順番も同じ
サンプルなんかはそのあたりうまく頂点の順番を決めてるんじゃないの?
もしくはZ書き込みor比較をOFFにしてるかだな
D3DRS_ZENABLEとかD3DRS_ZWRITEENABLEとか
なぜ奥から描いていかないといけないかというと…
まぁ自分で考えてみて
Zバッファの仕組みを考えれば理解できるはず
0149デフォルトの名無しさん
NGNG・・・と、なんか偽装さわぎになっていますが、私は124以外書き込んでいません。
そのほかはすべて偽物ですよ。しばらく書き込んでいなかったからこうなってしまったのかな^^;;;
みなさんが言うとおり法線の問題だったようです。
>>128 さんがずばりと示していただいた方法でずばり解決しました。
ありがとうございました^^
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNGない。
MSのサンプルですら、DLLのファイルバージョンをいっこいっこifで調べて
バージョン調査してる。
サンプルのGetDXVersion関数まわりをおとなしくコピペしたほうがいいと思うよ。
0152デフォルトの名無しさん
NGNG内容が全く変わっていないものもある。
必要な機能はそのつど適切なものが入っているか調べるべき。
0153デフォルトの名無しさん
NGNG今向いているX,Z軸方向にN進むにはどうしたらいいんでしょうか。
注視点をPに設定し、角度によって、カメラの始点を変更しているのですが、
X,Z方向にNだけ進むことができません。
X軸回転もありますので、上下への動作も含まれてしまっています。
どのように行列プログラムに直せばいいのでしょうか。
0154デフォルトの名無しさん
NGNGあとは角度と(P'-N)で位置は割り出せる。
0155デフォルトの名無しさん
NGNGできれば、簡単なサンプルを記述していただけないでしょうか。
頭でわかっていても、行列式に直すことができないんです。
いろんな人のサンプルを見て何となく理解はしているんですが。
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGそれならできるでしょ
0158デフォルトの名無しさん
NGNGもうちょっと整理して順を追って書いてくれないと
何がしたいのかわからん
>X,Z軸方向
X軸方向またはZ軸方向なのか
(1, 0, 1)の方向なのかわからない
>今向いている
てことはカメラのローカル座標系でってこと?
>X,Z方向にNだけ進むことができません。
この間もPからR離れた地点を回転している動作はするの?
Rていう制限がある限り移動できないのでは?
それとも2つの異なった動作を別々に行うってこと?
0159デフォルトの名無しさん
NGNGちょっと安心した。
0160デフォルトの名無しさん
NGNGプレイヤー(座標P)を中心にカメラをぐるぐる回すことができ
プレイヤーからの距離を任意に調節できる(=XZ平面上で向いている方向に進む)
ということかと思ったが
>>X軸回転もありますので、上下への動作も含まれてしまっています。
そうなるとこれがよくわからん
0161デフォルトの名無しさん
NGNGP座標をカメラの注視点とし、そのP座標を中心とした半径Rの位置にカメラの視点を置きます。
X,Y軸回転を加えたとき、カメラの視点が半径Rにそって回転します。
カメラは回転中も常にP座標を見ています。(注視点がP座標)
このとき、カメラが向いている方向にまっすぐNだけ進みたいと思っています。
Y軸方向に進んでしまうと 上にのぼっていってしまったり、下に下っていってしまうため、
あくまで 進む方向はX軸方向、Z軸方向の合成です。
皆さんは、どうやってこれを計算式に直していくのでしょうか。
0162デフォルトの名無しさん
NGNG注視点と視点の距離Rをつねに維持しつつ、注視点と、視点の両方ともが移動します。
0163デフォルトの名無しさん
NGNG漏れが何か勘違いしてる?
0164デフォルトの名無しさん
NGNGV=注視点-視点
Y成分がじゃまなので
V.y = 0.0f
でVを正規化して移動させたい量(N)をかけてやる
V*N
これが移動用のベクトル
これをPに足してやればいいんでないかい?
0165デフォルトの名無しさん
NGNGv * 3x3mat;
v.y = 0;
|v| = N;
pos += v;
0166デフォルトの名無しさん
NGNGふぅ・・ 胸の痞えが取れたぜ。
0167デフォルトの名無しさん
NGNG自分なりに以下のように組んでみましたが、やはり動作が変です。
どこを直せばいいのでしょうか。
m_MovePos.z = 移動値N
m_fDistance = 半径R
m_LookPos = 座標P(注視点)
vec = 視点
D3DXVECTOR3 vec( 0, 0, -1 );
D3DXMATRIX mat, matx, maty;
D3DXMatrixRotationYawPitchRoll( &mat,
D3DXToRadian( m_Rotate.y ), D3DXToRadian( m_Rotate.x ), 0 );
D3DXVECTOR3 vUpDir, vZDir;
D3DXVec3TransformCoord( &vUpDir, &D3DXVECTOR3( 0, 1, 0 ), &mat );
D3DXVec3TransformCoord( &vZDir, &D3DXVECTOR3( 0, 0, 1 ), &mat );
vZDir *= m_MovePos.z;
vZDir.y = 0;
m_LookPos += vZDir;
D3DXVec3TransformCoord( &vec, &vec, &mat );
vec = m_fDistance * vec + m_LookPos;
D3DXMatrixLookAtLH( &m_mView, &vec, &m_LookPos, &vUpDir );
d3d.m_pD3DDev->SetTransform( D3DTS_VIEW, &m_mView );
0168デフォルトの名無しさん
NGNGいや素直にそのまま
m_LookPos = 座標P(注視点)
m_Rotate 多分カメラの回転関係
D3DXVECTOR3 v=D3DXVECTOR3(0,0,1,);//v = (0, 0, 1)
D3DXMatrixRotationYawPitchRoll( &mat,
D3DXToRadian( m_Rotate.y ), D3DXToRadian( m_Rotate.x ), 0 );
D3DXVECTOR3 move_vec;
D3DXVec3Transform( &move_vec, &v, &mat );//v * 3x3mat; 4x4でやってるけど同じ
&move_vec.y = 0.0f;//v.y = 0;
//|v| = Nはvの長さをNにするってこと
D3DXVec3Normalize( &move_vec, &move_vec );// まず長さを1にする
D3DVec3Scale( &move_vec, &move_vec, N );// 長さ1のベクトルにNをかければ長さNのベクトルになる
m_LookPos += move_vec,;// 位置の更新
// 以上
>D3DXMatrixLookAtLH( &m_mView, &vec, &m_LookPos, &vUpDir );
>d3d.m_pD3DDev->SetTransform( D3DTS_VIEW, &m_mView );
これはココでは関係ない
するなら
D3DMATRIX mat_t;
D3DXMatrixTranslation( &mat_t, m_LookPos.x, m_LookPos.y, m_LookPos.z );
d3d.m_pD3DDev->SetTransform( D3DTS_WORLD, &mat_t );
// でモデル描画では?
0169168
NGNG0170デフォルトの名無しさん
NGNGm_fDistance = 半径R
m_LookPos = 座標P(注視点)
vEyePos = 視点
// カメラの姿勢
D3DXMATRIX mat;
D3DXMatrixRotationYawPitchRoll( &mat,
D3DXToRadian( m_Rotate.y ), D3DXToRadian( m_Rotate.x ), 0 );
// カメラのZ軸 (y無視、正規化)
D3DXVECTOR3 vZDir;
vZDir.x = mat._31;
vZDir.y = 0.0f;
vZDir.z = mat._33;
D3DXVec3Normalize( &vZDir, &vZDir );
// カメラ(視点)から座標Pへの差分ベクトル (正規化)
D3DXVECTOR3 vSub;
D3DXVec3Subtract( &vSub, &m_LookPos, &vEyePos );
D3DXVec3Normalize( &vSub, &vSub );
// 移動後の座標P'
m_LookPos += vZDir * m_MovePos.z;
// 座標P'に対するカメラ(視点)の新しい位置 (向き・距離を保つ)
vEyePos = m_LookPos + (-vSub * m_fDistance);
0171デフォルトの名無しさん
NGNG教えていただいた通りやってみましたが、無理なようです。
視点と注視点の高さ(Y軸)が常に一緒で、X軸回転などの回転が動作しなくなってしまいました。
カメラのビューや、プロジェクションのトランスフォームは実行する必要はないんでしょうか。
D3DXVec3TransformCoordに直すところはD3DXVec3Transformの部分であっていますでしょうか。
0172170
NGNGただし、動作未確認。
書く必要は無いかもしれないが、>170の続き・・・
D3DXMatrixLookAtLH( &m_mView, &vEyePos, &m_LookPos, &D3DXVECTOR3(0,1,0) );
d3d.m_pD3DDev->SetTransform( D3DTS_VIEW, &m_mView );
0173デフォルトの名無しさん
NGNGこちらも試してみましたが、やはりうまく動作しませんでした;;
やはりX軸回転などの回転処理が適切に行われていませんでした。
0174デフォルトの名無しさん
NGNG付き合わされるのは無駄。
0175168
NGNG1.物体を視点の向きに移動させる
2.カメラを物体を中心に回転させる
2つに分けて考えて、ひとつずつ解決していかないとこんがらがるよ
まずはカメラの回転はすてて「1.物体を視点の向きに移動させる」が
きちんと動作するようにしたほうがいい
で、きちんと動作したら次に「2.カメラを物体を中心に回転させる」を
解決すべし
多分大幅な書き換えになってるだろうから、一発でうまくいくなんてありえない
問題を切り分けてひとつずつ解決していってくれ
0176デフォルトの名無しさん
NGNG同意w
ひさびさにスレが伸びてるかと思ったらこれかよw
また、座標変換もろくにできねぇ糞餓鬼がきてるなw
初心者質問スレったってこのレベルの奴に何を教えられるのかとw
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG長い事2ちゃんにいるけどこの類の回答を2ちゃんで得るのは不可能だと言っておこう。
まず、こんなのがわかんねぇ奴は3Dプログラムをするための基礎体力がまったく足りてない。
この状態で誰がどんな説明をしても無駄にスレを費やすだけでまったく意味がない。
とどのつまり座標変換がわかってないんだ。
数学Cにのってる一次変換の説明からしないといけない。
もう、教科書買えと、2ちゃんで説明なんかできるかと。
よしんば教えるにしたって図がない。
あえてアドバイスするならはじめから3軸でやるなというところか。
0179gucchi
NGNGオシエラレナイノモショウガアルマイ
0180デフォルトの名無しさん
NGNGまあ、そういうことだな。
わかったら、散った散った。
0181デフォルトの名無しさん
NGNG>>175
いろいろとありがとうございました。
もう少し自分で考えてみようと思います。
0182デフォルトの名無しさん
NGNG簡単な質問だろう。キミに質問者を納得させる力がないだけじゃねーの。
他の聞き上手、教え上手がなんとかするからスルーしといてよ。
初心者を見下して悦にいるのが趣味な人は必要ないから。
0183デフォルトの名無しさん
NGNG貴様の理論はリフレッシュレート論争を強引に進めようとする厨房と変わらんな。
もし、どうしてもやりたければ座標変換スレをたてるがよい。
うまく説明できれば需要は確実にある。
なんたってこれができなきゃはじまらないw
0184デフォルトの名無しさん
NGNGなお、もし座標変換スレが立ったなら俺は1レスたりとも書き込まないと誓おう。
0185デフォルトの名無しさん
NGNG1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
0186デフォルトの名無しさん
NGNGdirectX関係の本やインターネットで調べてみると、
大きく分けて二つの方法があるようなのでどれを
使えばいいのかが分かりません。
�@【directdrawを使ったダブルバッファリング】
オフスクリーンサーフェス、バックバッファ、プライマリサーフェスを
作成して、バックバッファからプライマリサーフェスへフリップして
画面へ2次元画像を描画。
�A【ポリゴンへテクスチャマッピング】
平面ポリゴンを作成しそこへテクスチャをマッピングする。
�@の方法がインターネットを使ってdirectXプログラム
関係のページを参考にして分かった方法で、
�Aの方法が割と新し目のdirectX関係の本を買って
参考にして分かった方法です。
あるページには『DirectDraw』が廃止され『Direct3D』で従来と
同じような2D描画を行うことが出来るみたいなことが書いて
ありましたが、これは�Aの方法の事を指しているのでしょうか?
初心者ではありますが自分が思うに、わざわざポリゴンを作成
してそこにマッピングする�Aの方法よりは明らかに
�@の方法の方が効率的で速度も速いと思うのですが、
3D描画を全く含まないプログラムを作る時、どっちの方法が
効率的なのでしょうか?どなたか回答お願いします。
あと大きく二つの方法があると先に述べましたが、まだまだ
この勉強を始めたばかりで他にどのような2D描画の方法が
あるのか分かりません。もし他に効率的な方法があれば
そちらも一緒に回答して頂けると助かります。
0187デフォルトの名無しさん
NGNGならこのスレで座標変換の質問があったときも一レスたりとも
書き込まないでいただけると皆にとって都合がいいので、そうして下さい。
0188デフォルトの名無しさん
NGNGDX8以降は�Aしか選択肢がない
けど上手くラッパーなりライブラリなり一度作ってしまえば
使い勝手は�@と変わらない
速度に関してはグラフィックアクセラレータ(グラボね)が
ポリゴン表示用に最適化されてるから消して遅くはないと思う
2Dに限っていえば�Aの利点はアルファブレンディングとか
画像の回転拡大縮小が簡単だということ
そりゃポリゴンだからね
�@の方はシンプルなところが(特に学習者にとって)利点だけど
DirectDrawの初期化とかお世辞にもシンプルとはいえない
もし2DからじっくりやっていくんだったらSDLなんかのライブラリを
やったほうがいいと思う
ちなみに最新のSDKでも過去のDirectXのバージョンの開発ができるので
DirectX9SDKのなかにはDirectDrawは入っている
ddraw.hをインクルードして必要なライブラリをリンクすれば
DirectX7時代の書籍や記事、解説はそのまま活用できる
どこをスタート地点にするかは自分で決めるしかない
まずはポリゴン触ってみて「まだ難い」と感じたら
DirectDrawやSDLに乗り換えるのもありだと思う
0189デフォルトの名無しさん
NGNG皆?wお前だけだろ?w
0190デフォルトの名無しさん
NGNG・3D演算をHWサポートしていないビデオカード(ほとんど存在しないが・・・)もターゲット。
・必要な画像処理は自分で実装できる。
・D3Dの冗長処理が気にいらない。(速度重視)
ならば�@
・画像の変換・アルファブレンド等の機能を簡単に使いたい。
・なんとなく3Dにも興味がある。
ならば�A
ここにもw厨が来てるのか・・・
0191186
NGNG>>190
早い回答ありがとうございます。
やはり今は�Aの方法が主流なのですね。
回答にあったように取り敢えず�Aの方法から勉強
していこうと思います。
それから�@の方法について考えていこうと思います。
詳しい回答ありがとうございました。
(突然PROXY規制に引っ掛かってしまった為、携帯から返事させて頂きます。IDが違うのはその為です。)
0192デフォルトの名無しさん
NGNG�@は矩形しか転送しないため、転送元と転送先のピクセルのメモリを
単純にコピーすればいい為、最適化されているという意味で高速。
�Aのポリゴンという手法は転送元と転送先を決定する際に乗算が少々
行われるので、そのぶん遅くなる。
�Aで行われる転送の際の演算はハードウェアのサポートを受けることができるため
(旧称)Direct3Dをサポートしているアクセラレータがあれば殆ど�@と差は出ない。
速度以外の面では
�@は前述のとおり、結局は「ピクセルデータのメモリコピー」しか行わない為、
せいぜい拡大縮小くらいしかできない。
�Aは「転送先・元の形状を常に演算で求めている」ので、拡縮の是非・対象の回転等の
効果はなんの制約も受けずに実行できる。
またピクセルを置く段に当たって、ステンシルやZバッファの参照、アルファ等のピクセル合成
高度なハード支援があれば直接アセンブラ的にデータを操作できるシェーダなど
様々な特殊処理をサポートしている。
0194デフォルトの名無しさん
NGNGDirectXは8を使って作成しています。
ID3DXFontを使ってテキストの描画を作ってみたのですが、
ウィンドウモードで起動→フルスクリーンに変更→ウィンドウモードに戻す
といった動作をすると、文字が滲んだような(アンチエイリアス?)感じになってしまいます。
最初の起動時は普通にはっきりと出るので、良く分からないです。
ここを間違えたら、この症状が出るというのが分かる方いましたら教えてください。
0195デフォルトの名無しさん
NGNGここしか考えられない
0196194
NGNGアドバイスありがとうございます。
スプライト描画をとりあえず使ってるのですが、そっちはしっかりできていたり。
デバイスの復元がうまくいかないと普通落ちるし…、とお手上げ状態です。
他に何かアドバイスありましたらお願いします。
少ない情報で申し訳ありません。
0197デフォルトの名無しさん
NGNG一体何なんだ...
0198194
NGNGBackBafferFormatを現在の画面モードを使用にしてたんですが、
フルスクリーン時のFormatをちゃんと指定したら直りました。
ご迷惑おかけしました。
0199デフォルトの名無しさん
NGNGSetRenderStateで D3DRS_ZENABLE、D3DRS_ZWRITEENABLE、D3DRS_LIGHTING
をTRUE に設定し、
SetStreamSource()
SetFVF()
DrawPrimitive()
の順に描画しています。
2Dの場合はちゃんと描画されています。
2Dの場合は
D3DFVF_2DVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 )
3Dの場合は
D3DFVF_3DVERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 )
を指定しています。
教えてください。
0200デフォルトの名無しさん
NGNGライトやマテリアルの設定はしてるの?
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGまた、XFileを表示すると 頂点バッファも表示されるようになるんですが、設定されているテクスチャが変な色
になっており、UV座標も設定したものと違ってしまっています。
マテリアル設定というのはやっていないのですが、頂点バッファでもする必要があるのでしょうか?
法線のこともよくわからないのですが、これも設定とかする必要があるのでしょうか。
0203デフォルトの名無しさん
NGNG茶色になっており、カラーを変更しても茶色のままかわりません。
何か原因がわかりるでしょうか。
0204デフォルトの名無しさん
NGNG頂点などを格納していた構造体に float rhw が存在していたことと、ライティングがONになっていたことが
原因だったようでうs。
でもなぜライティングをONにすると真っ暗になるのだろう・・・3Dなのに。
0205デフォルトの名無しさん
NGNG「3Dなのに」を説明せよ。
ライティングONで黒くなる=法線ベクトルが(0,0,0)だ。
0206デフォルトの名無しさん
NGNGなるほど。
今設定しているVertex構造体は ライティング済みの頂点フォーマットらしいんですが
それだと法線ベクトルが(0,0,0)になるんでしょうか。
頂点バッファでライトの影響を受けるようにしたい場合はどうやったらいいんでしょうか。
0207デフォルトの名無しさん
NGNG頂点フラグに D3DFVF_NORMALを加えて、 頂点フォーマットに法線変数を加えたらできました。
ちょっと勉強になったかも
0208デフォルトの名無しさん
NGNG礼も無しで去っていく奴を相手しているお前らが、哀れでならない
0209デフォルトの名無しさん
NGNGで、何が言いたいんだ?
「自分も回答してみたいけれど実力ないし、
周りをけなせば自分が優位に立てる」という
勘違いをしたいのか?
0210デフォルトの名無しさん
NGNGママはぼくちんに食事作ってくれて当たり前。
先生はぼくちんに教えてくれて当然。
まだそういう年齢なんだろ。
…たまに新人でもこういうのはいるが。
0211デフォルトの名無しさん
NGNGありがとうございました。
常に法線ベクトルが関係してくるということが今回やってよくわかりました。
0212デフォルトの名無しさん
NGNG「・・・3Dなのに」というくだりがどうしても解釈できないので、
なぜそのような推測に至ったのかを説明して欲しい。
EX. 「3DだからライティングONにすれば必ずシェーディングされるはず」
0213デフォルトの名無しさん
NGNG確かにこれは当たり前だな。
ま、大概ママは先に死ぬわけだからそれまでにゃ
自分でエサ取れるようにならないとますいけどな。
>先生はぼくちんに教えてくれて当然。
対価を支払ってるなら教えてくれて当たり前でないと困るな。
ここでは教えてくれたらラッキー&感謝だな。
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG人にモノを教えるってのは、自分の勉強にもなる。
頭の中で漠然と理解していることを文章化するということは、
理解を明確化することにつながる。
ゆえにオレは回答する。気が向いたときに。
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG別に深い理由はないんですが、ライティングが設定済みの2Dと違って、3Dを使っているのに
なぜライティングの影響を受けないのだろうと思っていました。
実際はライティングの影響を受けたら暗くなったんですが、法線の方向はポリゴンを作ったときに
自動的に決まるものだと思っていたので、なぜ暗くなるのかわからなかったんですよね。
0220デフォルトの名無しさん
NGNG3DかDirectXの初心者サイトなり書籍なり読んで
3Dに対する知識を深めたほうがいいね
0221デフォルトの名無しさん
NGNG>>219を見る限り日本語から…
0222美酔 ◆t19NxEZjm2
NGNGDirectX9SDKでも開発は可能でしょうか?
0223デフォルトの名無しさん
NGNGWindowsさえ正常に動作するのなら可能。
コンパイルするのにビデオカードの性能などいらない。
0224美酔 ◆t19NxEZjm2
NGNG開発は可能だけれども動作確認ができない可能性があるということですね?
動作確認までしたいので、DirectX8SDK辺りが欲しいんですけれども、見つからないんです。
何かいい方法はありませんか?
0225デフォルトの名無しさん
NGNGDirectX9でもハードウェア支援がある機能と
ソフトウェア処理でも速度に問題がないもの
だけ使えばいい。
0227デフォルトの名無しさん
NGNGそちらをリンクすれば多分いけると思います
0228デフォルトの名無しさん
NGNG(=9で追加された機能を使わない)
・DX9相当のグラフィックボードを買ってくる
0229デフォルトの名無しさん
NGNGCマガなどの雑誌のバックナンバーを漁ったらいいんじゃないか?
もし入手できるならDX7のヘルプもいいこと書いてあるぞ
0230デフォルトの名無しさん
NGNGLPD3DXMESH m_pMesh;
D3DXCreateMeshFVF(numFaces, // 面の数
numVertices,// 頂点の数
D3DXMESH_MANAGED, D3DFVF_XYZ|D3DFVF_NORMAL, device, &m_pMesh);
numFaces, numVertices以上の面,頂点を追加したい場合どうしたらよいのでしょうか?
新たにLPD3DXMESHを宣言,
D3DXCreateMeshFVFで追加後の面の数と頂点の数を設定して
頂点とインデックスバッファを1つずつコピーしてCloneMeshをしなければならないのでしょうか?
また,初期化の時点では利用しないけれど,予め多めに面と頂点の数を設定しても構わないのでしょうか?
0231デフォルトの名無しさん
NGNGDirectX9SDKをインストールしておけば、DirectX8SDK環境で制作することが可能です
もちろん7でも6でも可
lib 追加して Direct3Dインターフェイスを取得するときにバージョン指定でOKだと思います
>>229
普通に手に入りマスタ
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=09343A34-6D91-4708-A2DA-7E98CF7EC872
0232デフォルトの名無しさん
NGNGソフトウェアでもDirectX9は起動できないわけだが
0233デフォルトの名無しさん
NGNG唯一あるとすれば>>232の脳内だけ。
0234デフォルトの名無しさん
NGNG0235232
NGNG0236デフォルトの名無しさん
NGNGDrawを使って画像を描画しているのですが、
壁が四角形だけではなく微妙に湾曲したり菱形だったりしたいのです。
こういう場合の当たり判定はどうすればいいのでしょうか?
(9.0b)
0237デフォルトの名無しさん
NGNG用語の使い方が適切でない以外にも、
DirectX9から3Dデバイスが使えないという認識も間違っている。
ステンシルバッファが使えないなど、基本的な機能が欠落しているだけで、
HALで動作するプログラムは書けるし、実際にテストして確認済み。
馬鹿の上に知ったかで、どうしようもないわけだが。
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG動かないと勝手に思いこんだアホがいるのはこのスレですか?
0240デフォルトの名無しさん
NGNG3Dの線をどうやって表示するか分からないんです。
グリッドを表示したいんだけど・・・
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG今が冬だから命が芽吹く季節が待ち遠しいのか
太平洋戦争を何故今振り返っているのかとか
じつに紛らわしいんじゃコラ!!!!!!!!!!!!!!!!!
0244デフォルトの名無しさん
NGNGパーティクルエディタなんて作る前に
初心者本でも目を通してください
てか調べもしてないだろ?
>1読めよ
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
調べもしてない人はこのスレで質問する権利はありません
本気で調べたなら聞くまでもないだろ?
そもそも自分のソース見てみろよ
ワイヤーフレームじゃなくてポリゴンで表示するように指定してるところがあるだろ?
何でそこのパラメータをいじればできるんじゃないかとか予測もつかないのか不思議でならない
0245236
NGNG0246デフォルトの名無しさん
NGNGDirectXの問題じゃないからな。
点と直線の公式を使って距離を計算しろ。
0247デフォルトの名無しさん
NGNG・ハル
・エイチエーエル
・ハードウェアアブストラクションレイヤ
・ハードウェア抽象化レイヤ
・その他
0248デフォルトの名無しさん
NGNGなにキれてるんだ?
ハルとヘル。それでいいじゃないか。
0249デフォルトの名無しさん
NGNG綺麗なカーブじゃなく変則的な曲線を描いている場合ってどう計算すればいいんだろ・・
0250デフォルトの名無しさん
NGNGcharを「キャラ」「キャラクター型」「チャー」「チャラ」「文字型」って、知人の間で呼び方がバラバラ……訳の分からんのも混じってるし…
せめて、聞いた時に何を言いたいのか分かる表現にしてほしいな(何の話か意味が分からなくなったりする)
0251デフォルトの名無しさん
NGNG仮令変則的であろうとも曲線が与えられているなら計算可能では?
0252232
NGNG>>DirectX9から3Dデバイスが使えないという認識も間違っている。
どう変換したらそうなるんだ、そんなこと書いてないが
>>233-234と同レベルだぞ?
>>239
>>動かないと勝手に思いこんだアホがいるのはこのスレですか?
んなアフォではないがな
0253デフォルトの名無しさん
NGNG曲線の式があるならそれで計算すればいいし
人の手の書いた画像で式も出せないなら
ピクセル単位で計算すればいい
あたり用の画像を準備するのがてっとりばやいかな?
白黒の2値画像で黒の部分があたりになるようなルールで画像を作って
それをもとに判定をするとか
0255デフォルトの名無しさん
NGNGデータの持ち方、描画の方法など、どうすればよいか迷っています。
よくある2DRPG用のマップエディタのような感じで
・縦×横で指定した広さで格子状のマス目を用意し、
・テクスチャを貼った四角ポリゴンを敷き詰めていきながら
・高さをペインティング
というような作業でエディットするようにしようと思ってます。
データの持ち方としては、今のところ、マス目一つごと(四角ポリ一枚(三角ポリ2枚)ごと)の
テクスチャの種類(ここは砂、とか、ここは草、等…)の配列と、
「縦×横」分の高さデータの配列を作ろうと考えています。
それで現状では描画の方はマス目一つずつ(”四角1枚”=”三角2枚”)
DrawPrimitiveしていくしかないような気がしているのですが、
それでは速度的に大分厳しいのではないかと考えています。
マスごとにテクスチャはころころ代わるので「一つの大きな頂点バッファを用意して一気に描画」したりとか
ストリップで描画するのもできないですよね?
テクスチャも一種類につき126*126とかの解像度が必要なので
やはりマスを一枚描画するごとに毎回テクスチャをセットしてDrawPrimitiveしないといけない気がします。
(一枚のテクスチャに何種類も収めてUV操作で描き分けるような事はできない)
お聞きしたいのは、上の考え方や理解が間違ってますでしょうか?ということと、
皆さんだったら上のような仕様のものを作るとして、どんな感じでデータを持たせ描画するでしょうか?
ということです。その他アドバイスやアイデアなどもあったらなんでも教えて頂きたいです。
もちろん、技術のある方が高度な事をしようと思えば幾らでもできることだと思うのですが、
私はまだ大したことはできませんので、上の質問からレベルをなんとなく察して頂いて、
それに見合う、シンプルで分かりやすいアプローチがあればそういうものの方が助かります。
よろしくお願いします。環境は2003Summerです。
0256236
NGNGこの関数を使えとかこれでググれというのがあれば助言お願いします(´・ω・`)
0257デフォルトの名無しさん
NGNG速度的に問題が出るようなら、
あらかじめテクスチャごとに描画するマスを分けておいて、
まとめて描画するとかの工夫が必要かもね
0258デフォルトの名無しさん
NGNGDirectX9.0 oct (最新版)
を入れたら、新規作成プロジェクト(VC++)からDirectXプロジェクトが無くなってしまいました。
何故か分かる方いらっしゃいますか???
最新版のD3DFrameが欲しいのですが、、、
0259デフォルトの名無しさん
NGNG手書きなら>>253の言うマスク画像が良いと思う
裏でモノクロ画像を作って位置判定させて、黒い画像の上に来たら壁って感じで
0260236
NGNGVBで色判定を習ったのですがそれとは違うのでしょうか?
マスク自体はまだやったことがありませんが簡単にできそう・・・としても、
PosX,PisYの色が0x000000(になるのかな?)という式の使い方が分かりません(´・ω・`)
0261デフォルトの名無しさん
NGNG恥の上塗りご苦労様。
> まあintel 810とか815のオンボードだと
> ソフトウェアでもDirectX9は起動できないわけだが
知ったかでこういういい加減な発言をする前に、
少しは自分でプログラムを組め。
0263デフォルトの名無しさん
NGNGサポート外のパラメータを設定しただけだろう。
結局>>262が無能なだけ。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGとりあえず消えてください。
お願いします。
0266デフォルトの名無しさん
NGNG・16bitしかサポートしていないビデオカードで24/32カラーモードの指定した
・ステンシルバッファがサポートされていないビデオカードで無理に使おうとした
0267デフォルトの名無しさん
NGNGGamDevPukiWiki - 点が三角形内に含まれるか調べる
http://gamdev.org/w/?%5B%5B%C5%C0%A4%AC%BB%B0%B3%D1%B7%C1%C6%E2%A4%CB%B4%DE%A4%DE%A4%EC%A4%EB%A4%AB%C4%B4%A4%D9%A4%EB%5D%5D
これの応用で多角形の判断OK
凸でも凹でも楽勝ッス
0268236
NGNGありがとうございます。
これで多角形の当たり判定はどうにかなりそうです。
問題は綺麗なカーブを描いていない曲線(スキーのジャンプ台みたいに徐々に曲線がきつくなる等)・・・。
やはり>>253と>>259に書いてある色判定が気になりますので、
色情報の取得の仕方について助言(これでググれなど)を所望してます。
0269デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/DirectX9_c/directx/htm/selectingacapturedevice.asp
の方法で名前の列挙は出来そうなんですが、その先が良く分かりません。
http://www.microsoft.com/JAPAN/developer/library/jpdx8_c/ds/AppDev/Capture_Intro.htm
を元にプログラムを作っているのですが、
>// 最初のモニカをフィルタ オブジェクトにバインドする。
>pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
の部分は、どうすれば良いのでしょうか?(今回は最初のものではなく、ユーザが選択したものを使用)
pClassEnum->Nextでは、一つずつデバイスを検索しているので、リストで選択した何番目まで、Resetしてから検索しなおすべきなのでしょうか?
0270デフォルトの名無しさん
NGNGそういう機能があるわけじゃないよ
ビットマップといってもただのバイナリファイルだからフォーマットさえわかれば
自分で読み込めば、情報を取得できる
fopenは知ってる?
だからこの場合「BMP ファイルフォーマット」で検索すれば出てくると思う
BMPは数種類のビット深度があるけど、とりあえず24ビットのBMPに限定とか
無圧縮限定とかにすれば、読み込みの処理はそんなに難しくないと思う
0271デフォルトの名無しさん
NGNG言語VBっぽくない?
VB詳しくないけど、fopenだっけ?
0272デフォルトの名無しさん
NGNGげ、VBっぽい
漏れはVBなんてやったこともない
でもバイナリファイル読めるんじゃないの?
ファイル処理はどの言語でも基本だろうし
0273デフォルトの名無しさん
NGNG実際に表示するサーフェスとは別に当たり判定用に描く。
メリット
・自機がいる範囲(32x32程度?)だけチェックすればいい
・2値なので描画が高速
∴この2点から処理速度が高速
・当たり判定のために画像作成に制限を受けない
・実装が容易
デメリット
・当たり判定用の白黒画像を用意する必要がある
0274デフォルトの名無しさん
NGNG敵と敵との判定をやってくれ、とか余裕で仕様変更来るのでだめぽ
0275236
NGNG>>273
白黒の画像はすでに用意できているのですが、そのチェックの方法が分からないんです(´・ω・`)
>>274
玉ころがしに敵はでてきません。
もし対戦みたいにするなら、自分も玉なら相手も玉なので普通に円の当たり判定で問題ないっす。
0276デフォルトの名無しさん
NGNGチェック方法とはなんぞや?
ビットマップ画像へのポインタを取得できれば実データにアクセスできるから、
あとは位置(X,Y)の色を調べるだけよ。
0277デフォルトの名無しさん
NGNGそんなのいくらでも方法はあるだろ
ファイル自前で読み込んでアクセスっていうのは前にも書いたが
他にも、別にツールを作るという手もある
ツールは非DirectXのアプリケーションとして作って、
ウィンドウにBMP表示させてサイズとAPIのGetPixelを使って色を取得して
テキストデータなり、バイナリデータなり自分で扱えるフォーマットに出力して、
それを読み込んで使えばいい
ファイル処理はプログラムの基本だと思うんだがなぁ
なんでそこすっ飛ばしてDirectXなんかやってるんだ?
非常に不思議
完全に順番間違ってるよ
0278デフォルトの名無しさん
NGNG「DirectXでゲームプログラミング」みたいな本みて、”ゲーム”に飛びついたとか
0279デフォルトの名無しさん
NGNG今時のにわかSE候補PGとかじゃなければ
ベーマガのソース打ち込みからやろうぜ
0280255
NGNGテクスチャごとにまとめるのは有効そうですね。
ありがとうございます。
もうちょっと皆さんの意見を色々お聞きしたいのですが
あんまりないようなのでまた某所に行ってきます。ありがとうございました。
0281デフォルトの名無しさん
NGNG>>257が言われているのは、あくまで速度的に問題がある場合なので、
実際に問題がない限りするべきじゃないと思う。
ほとんどの場合、速度的に問題はないと思うので、そんなに気にすることもない気がする
逆に、そういう仕様にしてしまうと あとあと仕様変更に耐えられなくなると思う
本当に 速度に問題がある場合は 他にネックになっている部分があるのではないかと思われる
0282236
NGNGレスありがとうございます。
そか、バイナリを調べればよかったのか。
いちいち画像を描画して、画面上のX,Y座標の色情報を取得しようと奮闘してますた(´・ω・`)
スレ違いっぽい質問なのにほんとありがとうございます。
基本なことでも学んだ時にどういう場面で使ったらいいのか分からず、
今まですっかり忘れてましたよ、ええ○| ̄|_ 多分もう忘れないかt
0283デフォルトの名無しさん
NGNGまぁ、これも勉強だよ
失敗した時の方が勉強になる事が多い
0284デフォルトの名無しさん
NGNG「ゲーム開発のための物理シミュレーション入門」
(o'reillyの「Physics for game deveropers」の日本訳版)
を持ってる人がいそうなのでお聞きしたいのですが、
「17章、粒子系」のソースで
for(r=0; r<=NUMROWS; r++){
for(c=0; c<=NUMCOLUMNS; c++){
// calc mass of this particle
if((r == 0) && (c == 0))
f = 1;
else if((r == NUMROWS) && (c == 0))
f = 2;
else if((r == 0) && (c == NUMCOLUMNS))
f = 2;
else if((r == NUMROWS) && (c == NUMCOLUMNS))
f = 1;
else if(((r == 0) || (r == NUMROWS)) && ((c != 0) && (c != NUMCOLUMNS)))
f = 3;
else
f = 6;
Particles[r][c].fMass = (f * MASSPERFACE) / 3;
:
:
というところがあるのですが、このf=1、2、3、6 ってのが分かりません。
コメントには粒子の質量を計算するとありますが、何を意味してるんでしょうか。
マススプリングやったことある方とかいらっしゃいましたら教えてください。
0285デフォルトの名無しさん
NGNG本は読んだ事ないが、コードを見た限りでは
「質点に連結する(もしくは、関連する)スプリング数」だと思われ。
0288デフォルトの名無しさん
NGNGどうやんだ?
0289デフォルトの名無しさん
NGNGあわせて傾かせるのってクオータニオンとか使わないと無理ですか?
徐々に綺麗に補完してあわせたりする必要はなくて、
スパっと一発で合わせるのでよければオイラーでもできるんでしょうか。
地面の法線は、そのポリゴンを構成する二辺の外積で求めるとして、
その方向ベクトルをどうしたらキャラクターの回転角に変換できるのでしょうか?
ご存知の方がいらっしゃいましたら教えてください。お願いします。
環境はvc6とdx9 2003summerです。
0290デフォルトの名無しさん
NGNGスペック的にアップグレードしても無駄なので、
古いものは捨てて、新しいものに買い換えてください。
0291デフォルトの名無しさん
NGNGすいません。仕様かもしれません。
内積で地面の法線とのなす角を求まるとして、
それはどっちの方向に回転させればよいのでしょうか
最終的にはキャラクターの回転の変換行列を求めたいのですが…
後半2行は意味が分かりません。
0292デフォルトの名無しさん
NGNG内積とったベクトルで外積とれ
0293デフォルトの名無しさん
NGNG非常に処理が重くなってしまいます。
2D空間だけの描画でいいのですが、通常使われている描画処理はどのようにされているんでしょうか?
Draw( 開始, 終了 ) のように描画したいと思っています。
0294デフォルトの名無しさん
NGNG頂点フォーマットにRHW指定してワイヤフレームで表示
初心者本なり初心者サイトなりで順を追ってやっていったら?
大体取り扱ってると思うんだけど…
0295デフォルトの名無しさん
NGNGありがとうございます。
ワイヤーフレームではなく、D3DPT_LINELISTで描画を試していて、うまくいかなかったんですが、
rhwを含む頂点フォーマットにするのを忘れていました^^;
LINELISTでもワイヤーフレームでもいいのですが、
この線の幅の調整とかってできるんでしょうか?
0297デフォルトの名無しさん
NGNG0298289
NGNGありがとうございます。キャラの↑方向のベクトルと、
現在キャラが載ってる地面のポリゴンの法線ベクトルでできる
平面に沿って(つまり外積を軸に)回転すればよい、ということですね。
理屈と図は頭の中で分かっていると思うのですが、
「あるベクトルを、別のあるベクトルを軸に〜度回転させる」
というのはやっぱりクオータニオンを使わないとできないでしょうか。
もう少し具体的にどういう計算をして
最終的にキャラクターの回転変換行列(HPB or YPR)に入れる度数に
すればよいか教えていただけると助かるのですが。
0299デフォルトの名無しさん
NGNGD3DXMatrixRotationAxis
0300デフォルトの名無しさん
NGNGID3DXLine
DirectX9から搭載された機能
0301297
NGNGthx
ヘルプ見たらあった
0302デフォルトの名無しさん
NGNG線が二重になってしまったり、円弧の向きがプラスとマイナス逆になったりと、
うまいこと描画してくれません。どの辺を改良したら良いのでしょうか?
for(t=0; t<3; t++){
cx = a[0][3]/2; cy = a[1][3]/2; /*中心点*/
r = sqrt((arcx[t]-cx)*(arcx[t]-cx)) + ((arcy[t]-cy)*(arcy[t]-cy)); /*半径*/
pi = (2.0*asin(1.0));
rad = (pi/180.0);
kaku = (arcx[t] -cx)/r;
kakudo0[t] = acos(kaku)*(180/pi);
kakudo9[t] = asin((arcy[t] -cy)/r)*(180/pi);
ra[t] = (kakudo0[t])*(pi/180.0);
sinx = (arcy[t]-cy)/r; cosx = (arcx[t]-cx)/r; tanx = (arcy[t]-cy)/(arcx[t]-cx);
w = r*cosx; v = r*sinx;
kakudo1 = (ra[0]/pi*180) - (ra[1]/pi*180); kakudo2 = (ra[1]/pi*180) - (ra[2]/pi*180);
kakudo3 = kakudo2 + kakudo1; kakubun = kakudo3/40;
for(e=0; e<43; e++){
enkoz = ((kakudo3) - (kakubun * e))/180*pi;
co = cos(enkoz); si = sin(enkoz);
enkox[e] = co*r+cx; enkoy[e] = si*r+cy;
arc[z][e+3].sx = enkox[e]; arc[z][e+3].sy = enkoy[e];
/* 円弧の分割点 */
arcx[e+3] = arc[z][e+3].sx; arcy[e+3] = arc[z][e+3].sy; arcz[e+3] = arc[z][e+3].sz;
}
0303デフォルトの名無しさん
NGNG場所がわからない・・・
0304デフォルトの名無しさん
NGNG調べてみたところ、トゥーンシェーダというのは一般に、法線から算出した
ライティング情報をテクスチャのUV値としてアウトプットし、
あらかじめグラデーション済みのテクスチャと合わせてレンダリングするもの
…だと思うのですが、これはつまり通常のテクスチャとの共存は出来ないのでしょうか。
或いは実用的な速度にならないのでしょうか。
0305デフォルトの名無しさん
NGNG>或いは実用的な速度にならないのでしょうか。
実装次第
0306デフォルトの名無しさん
NGNGすいません、重ねてお尋ねしたいのですが、その実装、
もしかして頂点シェーダのほうで2つのテクスチャ分の情報を出して、
ピクセルシェーダ側で合わせる程度で済むのでしょうか?
素人考えだと、それだけならそれほど重くならない様に思えてしまうのですが、
あちこちのログでピクセルシェーダ自体が鬼門……というか重いという記述を見かけましたので、
その程度でも結構な負荷になるのでしょうか?
0307デフォルトの名無しさん
NGNGマルチテクスチャってのは知ってるか?
>303
DirectX9SDKでもDirectX8の開発できるから
DirectX8SDKをダウンロードする必要はない
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNGここでマルチテクスチャを出して頂いたと言うことは、
つまりピクセルシェーダを使わずに済む方法と言うことでしょうか?
想像ですが、モデル側のUV値は頂点シェーダを利用して計算し、
そのUV値をトゥーン用、それとは別に通常のUV値をD3DFVF_TEX2として持ち
マルチテクスチャを使った固定機能でレンダリングするみたいな話でしょうか。
いずれにせよ通常のテクスチャ付きトゥーンシェーディングは、本職の方ならどうやら難しく無さそうですね。
モデル作ってプレゼンしなければだったのですが、どうやら普通にテクスチャ有りで行けそうで一安心。
お付き合いありがとうございました。
0310デフォルトの名無しさん
NGNGそれでいけるはず
注意するとすればマルチテクスチャするときはテクスチャステージステートの設定が必要なことぐらい?
ググれば多分ピクセルシェーダを使わないトゥーンシェーディングやってる
サンプルとかみつかるんじゃないかな?
できればUV値の計算は頂点シェーダでやったほうがいいけど
プレゼンくらいなら無理しなくてもいいのかな?
0311デフォルトの名無しさん
NGNGいや助かります。出しゃばりすぎるのは最悪としても、
ある程度知識がないと誘導しづらいものでして。
レスを参考にもう少し勉めてみます。重ね重ね感謝です。
0312デフォルトの名無しさん
NGNGまずカメラが移動回転してない時の視錐台(の6平面ボックス)を求めるまでは良いとして、
カメラが移動回転した時の視錐台(の6平面ボックス)へ掛ける変換行列を求めたいです。
カメラは
D3DXMatrixLookAtLH( &m_matView, &m_vLookFrom, &m_vLookTo, &m_vUpVec );
D3DDevice->SetTransform( D3DTS_VIEW, &m_matView );
として、視点と注視点の座標を入れて設定しているだけなので、
ここからカメラの移動回転変換行列を求めるにはどうしたらよいのでしょうか。
上の「m_matView」を使ってよいのでしょうか?
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG上でいうm_matViewの逆行列ってことですね。サンクスコ。
0315デフォルトの名無しさん
NGNG・Xfileを読み込んでID3DXBaseMeshの形で持っているメッシュの境界球を
D3DXComputeBoundingSphereで求めようとしているのですが、
第一引数の「最初の位置へのポインタ」っていうのはなんでしょうか?
どうしたらこの「最初の位置へのポインタ」を得る事ができるでしょうか。
・DrawSubsetでメッシュをレンダリングする際、
テクスチャありのメッシュをSetTextureをして描画したあとに
続けてノンテクスチャの物体を描画するにはどうしたらよいでしょうか。
前のテクスチャ情報が残ってしまうので、これをクリアする方法を教えてください。
以上です。よろしくお願いします。
0316315
NGNGID3DMeshのもってる頂点バッファの最初の位置へのポインタだと分かりました。
で、以下のようにしてみたのですが、実行すると強制終了します。
D3DXComputeBoundingSphereの第一引数はLPD3DXVECTOR3です。
Lockの第三引数の書き方などがよく理解できておらず、この辺りが怪しいと思うのですが、
どう書けばよいか分からないので教えて頂けるとうれしいです。
LPDIRECT3DVERTEXBUFFER9 pVB;
D3DXVECTOR3* pV;
pMesh->GetVertexBuffer(&pVB);
pVB->Lock(0,0,(void**)&pV,0);
D3DXComputeBoundingSphere(
pV,
pMesh->GetNumVertices(),
pMesh->GetFVF(),
&m_vCenter,&m_fRadius);
pVB->Unlock();
0317315
NGNGD3DXComputeBoundingSphereの第三引数が間違えてました。
ここはFVFのサイズなので
D3DXGetFVFVertexSize(pMesh->GetFVF())
とすべきでした。
引き続き2個目の質問の方をよろしくお願いします。
0318デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG0321315
NGNG今度はD3DXCreateSphereでメッシュを作り、
そのメッシュの頂点を動かしてみようと思ったのですが、
また強制終了して原因がよくわかりません。
下のようにしてみましたが、何所かおかしいでしょうか。
何か根本的に間違ってますでしょうか?
LPDIRECT3DVERTEXBUFFER9 pVB;
WORD* pV;
DWORD FVFSize
D3DXVECTOR3 *v;
//球メッシュ生成
D3DXCreateSphere(pd3dDev,1,20,10,&m_pMesh,NULL);
FVFSize = D3DXGetFVFVertexSize( m_pMesh->GetFVF() ); //fvfのサイズを取得
m_pMesh->GetVertexBuffer(&pVB); //頂点バッファ取得
pVB->Lock(0,0,(void**)&pV,0); //頂点バッファロック
//+y方向に移動してみる
for(int i=0;i<m_pMesh->GetNumVertices();i++)
{
v = (D3DXVECTOR3*)(FVFSize * i);
v->y+=1;
}
0322315
NGNG下から三行目、正しくは下のようにしています。
v = (D3DXVECTOR3*)( pV + (FVFSize * i) );
0323デフォルトの名無しさん
NGNGpVがWORD*だからだろ。
BYTE*にしな。
0324デフォルトの名無しさん
NGNGいけました!ありがとうございます。
0325デフォルトの名無しさん
NGNGこのたび訳あってDrawIndexedPrimitiveで描画してみました。
すると今までDrawSubsetではまともに描画できてたポリゴンが原形をとどめないほど滅茶苦茶に
なってしまったのです。
誰かこの原因がわかる方いらっしゃらないでしょうか?
もしいらしたら何卒ご教授お願い致します。
ちなみに使用した頂点バッファとインデックスバッファはID3DXMeshのGetVertexBufferとGetIndexBufferで
取得したものです。1マテリアルのモデルしか使ってないので頂点バッファもインデックスバッファもオフセット
は0です。
0326デフォルトの名無しさん
NGNGなぜ謝ってるんですか?
わけがわかりません。
0327デフォルトの名無しさん
NGNGお前等当てずっぽうで答えを探れっていうことですか。
(そんな風に思って無くても結果的にそういうことをしている)
結局こういう人って、すいませんとか言っておきながら
その実全然そんな風に思ってないってのが手に取るように分かる。
口だけで謙ったフリ。
0328デフォルトの名無しさん
NGNGFVFとプリミティブタイプはきちんと取得してものを使ってるか?
0329デフォルトの名無しさん
NGNG日本語独特の
すみません=ごめんくださいませ
だと思われ。
0330325
NGNG申し訳ありませんでした。自分でもどの辺に原因があるのか見当が付いてないのでソース
のどの部分を貼るべきか判断が付かなかったもので・・・。全部貼るのはさすがに迷惑だ
と思うので今度からは少なくとも自分なりに原因がありそうな所がわかってから書き込む
ようにします。
>>328
まず頂点の定義は
#define D3DFVF_MYVERTEX D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1|D3DFVF_TEX2
struct MYVERTEX//D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1|D3DFVF_TEX2
{
float x,y,z;//座標
float nx,ny,nz;//法線
float u1,v1;//UV1
float u2,v2;//UV2
};
で、
g_pMesh->CloneMeshFVF(D3DXMESH_SYSTEMMEM,D3DFVF_MYVERTEX,g_pD3DDevice,&g_pMesh);
としてメッシュを自前のFVFで作り直しました。
描画時のプリミティブタイプはD3DPT_TRIANGLELISTを使っています。
0331デフォルトの名無しさん
NGNG>のどの部分を貼るべきか判断が付かなかったもので・・・
うそこけ。しらじらしい。
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335325
NGNGいやいやいや!>>333は俺じゃないっす!本当です。
>>331
>自分でもどの辺に原因があるのか見当が付いてないのでソース
>のどの部分を貼るべきか判断が付かなかったもので・・・
これも嘘じゃないです。まぁ、確かにこれが貼らなかった理由の全てではないんですけど。
とりあえず見られたら自殺モノの恥ずかしい変数名とコメントを全部書き直してから貼ろう
と思ってたってのもありまして・・・。
とにかく当分の間自己解決目指してやってみます。
どうもお騒がせしました!
0336デフォルトの名無しさん
NGNG0337325
NGNGどうも皆さんご迷惑おかけしました〜!
0338デフォルトの名無しさん
NGNG自己解決したらどうやって解決したか書くのが礼儀ってもんだろ?
やっぱこういう奴なんだよ。もう人間性が根っからのクソ。氏んでいいよ。
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGそうか、もう2度とくるなよw
0341デフォルトの名無しさん
NGNG簡単な2DRPGなどをGDIで作ってみたことがある方は分かると思うんですが、
マップチップなどの背景をスクロールさせるとき、
バックバッファに上下左右を一マス分だけ余計に読み込んでおく事で
滑らかにスクロールさせたりする方法があるじゃないですか?
例えばキャラを上方向に動かすときに、ぱっと一気にマップチップ全体を
下に一マス分ずらすことでスクロールさせる(したようにみせる)のではなくて、
ちゃんと下に消えたドット分が上から徐々に現れ、滑らかにスクロールして
一マス分動いたところで止まる、というような。
いま、DXを使って3Dのゲームを作っているのですが、
ゲーム内のウィンドウを自作したいと思っていまして、
(ウィンドウの表示自体は変換済みポリゴンを使う予定)
そのウィンドウ内で、アイテム(に限らずですが)の一覧表示・スクロールをするときに、
上の2DRPGのマップのように滑らかにスクロールさせたいと思っています。
そうしたい場合、その2DRPGのマップスクロールのような要領で、
一時的にどこかに一マス分だけ大きく一覧を表示しておいて、
必要な部分だけ拾って表示するようにすれば
滑らかにスクロールさせられますよね?
それで、ここから質問なのですが、そのように表示を一時退避させて、
かつ必要な所だけ取ってこれるビットマップ領域みたいなのは
DXで自由に作れるんでしょうか?
できるとしたらどうやればよいか教えてください。
もしくは、別の方法でこうすればできる、という方法などあれば
教えていただけると嬉しいです。よろしくお願いします。DXは9.0を使ってます。
0342デフォルトの名無しさん
NGNGRenderTargetをテクスチャにすればできると思うが、あんまりメリットを感じないなぁ
マップチップのサイズと画面サイズと作り方によるけど多くても2000〜3000頂点かな
確かに平均的には頂点計算は減るけど描画するピクセルの面積は変わらないから
そんなに高速化できるとは思えない
0343デフォルトの名無しさん
NGNGなんとなく質問の意図が伝わっていないような気がするのでありますが、
やりたいことは
マップチップとかいう概念を使った2DRPGのマップをDXで作りたいのではなくて、
それに用いられるようなスクロール法を用いた
「3Dゲームに使う自作ウィンドウ内での、アイテム(など)の滑らかなスクロール付き一覧表示」です。
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNG>表示を一時退避させて
という手段にこだわりすぎだと思うよ。
目的は要するに固定領域内のすきな位置にアイコンなんかを描画したくて
上下ワクで切れてるようにしたいってことじゃない?
ビューポート指定してレンダリング範囲ちぎるとか
ウィンドウ画像のまんなかに穴あけてZバッファ利用して隠すとか
富豪的にステンシるとか
0346デフォルトの名無しさん
NGNG自由に使えるオフスクリーンサーフィスは無いと考えた方が良いよ。
0349341
NGNG>目的は要するに固定領域内のすきな位置にアイコンなんかを描画したくて
>上下ワクで切れてるようにしたいってことじゃない?
まさにそれです。ウィンドウに穴をあけて
奥行き情報使ってはみ出し部分を隠すのも思いついたんですが、
これだとウィンドウのデザインに制限ができそうだったので諦めました。
ビューポート使う方法はよく自動車ゲーのバックミラーなんかで使われるアレですね。
なんとなくよさげなので使ってみようと思います。
あとオフスクリーンサーフェイスを使えないっていうのは信じてよいですか?(失礼)
なんか文字表示をするときにオフスクリーン領域から部分的に拾って〜みたいな
のを見たことがあった気がするので、
そんな感じの方法でできるのかと思っていたのですが。
0350デフォルトの名無しさん
NGNG346が言ってるのは「自由に使える」ってことで、不自由なのなら有る。
ファイルから画像を読み込んだりしておくのにはそれで十分。
でも書き換えには時間がかかるから、スクロールさせるたびにそれを使う人はいない。
0352デフォルトの名無しさん
NGNGビルドしようとすると以下のエラーが出ます。
このD3DRMってなんかかなり昔のDXのものだった気がするのですが、
今時のDX9を使ったサンプルとしてこれはアリなんでしょうか…
普通に使うものですか?
あと、これをビルドするにはRM用のlibとか必要でしょうか?
検索してみたもののどこにも落ちてなさそうなのです。
VC6とDX9 2003Summer(だったかな)でビルドしようとしています。
よろしくお願いします。
error LNK2001: 外部シンボル "_TID_D3DRMFrameTransformMatrix" は未解決です
error LNK2001: 外部シンボル "_TID_D3DRMFrame" は未解決です
error LNK2001: 外部シンボル "_TID_D3DRMFrame" は未解決です
error LNK2001: 外部シンボル "_TID_D3DRMAnimationKey" は未解決です
error LNK2001: 外部シンボル "_TID_D3DRMAnimation" は未解決です
error LNK2001: 外部シンボル "_TID_D3DRMAnimationSet" は未解決です
0353デフォルトの名無しさん
NGNGフルスクリーンにした後、RestoreDisplayMode と DDSCL_NORMALで
元に戻しても、最前面表示が解除されないのですが、
どうすればいいのでしょうか?
SetWindowPos(,HWND_NOTOPMOST...では解除できませんでした。
0354デフォルトの名無しさん
NGNGジョイスティックで描画されたものを自在に動かせるようにしたいのですが、
どこをどう手をつければ良いのか分からないので、
どなたかアドバイスいただけないでしょうか。
ちなみにDirectGraphicsのTutorials4にDirectImputのジョイスティックを貼り付けて
エラーは全て消せましたが、この後どこをどう改良すればよいでしょうか。
0355デフォルトの名無しさん
NGNG0356354
NGNG0357デフォルトの名無しさん
NGNG0358354
NGNG0359デフォルトの名無しさん
NGNGもう少しシンプルに設計できないものだろうか
ゴテゴテしすぎているように思えるのだけど・・・
0360デフォルトの名無しさん
NGNGDirectI m put だから、難しいんだろうよ。
>>359
WinFXで幸せになれる・・・・わけは無い。
0362345
NGNGこんな意味不明なこと書かれてアドバイスしようがあるとでも思うのか…
0363362
NGNG0364354
NGNG動かせるようにするには、どうしたらよいのでしょうか。
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNGDirectXヘルプのDirectInput C/C++チュートリアル3を嫁。
コールバック使って接続しているジョイスティックを列挙しないと
ならないってあたりが難しさのポイント。
分からなければ joyGetPosEx を使え。
0367デフォルトの名無しさん
NGNG何故無駄に使いたがる人がいるんだろう?
0368デフォルトの名無しさん
NGNGForceFeedBackを使いたいんじゃない?
0369デフォルトの名無しさん
NGNGおまえ>1見てる?
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
せめて以下のキーワードでググれよ
DirectInput サンプル ソース
掲示板でDirectInputの使い方を1〜10まで教えてもらうつもりなら帰れ
ネットや書籍で解説してあるのを一通りやって、ピンポイントで
疑問に思ったことを掲示板でたずねるってやりかたじゃないと
効率悪いってことぐらい考えてくれ
まずはググって調べるだけ調べてからまたきてくれ]
>352
DIRECT3D_VERSIONでググってみそ
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG質問者じゃないけど、8以降もVersion指定だけでいけるんだっけ?
0372352
NGNGありがとうございます。
ググってみました。
8以降は意味ないって出てました…orz
ちなみにSDKサンプルのSkinnedMeshでも同じエラーでコンパイルできませんでした。
もしかして2003summerで仕様変更とかあったんですかね?
変更あったならあったで、どこがどう変更になったかが分かれば直しようもあるのですが、
SDKマニュアルでD3DRMとか検索しても全く引っかからないという状況なので困ってます。
>>352で引っかかってる関数が何に変更になったかご存知の方はいらっしゃいませんでしょうか。。。
0373デフォルトの名無しさん
NGNGPCキーボード使って鳴らす簡単なサンプルを見つけて改造してました。
演奏をwavに書き出したくてDirectSoundBufferを色々いじってたんですが
どうも上手くいきません。良い方法を知っていたらご教授願います。
DirectShowフィルタとかつかうのだろうか・・・?んー
0374デフォルトの名無しさん
NGNG3Dを扱えるいい時代になったな。
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGここは、その「分からない人」と
「分からない人に教える人」が来るスレなので、
あなたは必要ないですからもう来ないで下さい。
0377デフォルトの名無しさん
NGNGGUIDと3Dは何の関係もないなぁ。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNGDirectX総合スレ (Part2)
http://pc5.2ch.net/test/read.cgi/gamedev/1095863432/
0380デフォルトの名無しさん
NGNGさぁRMなんて過去の遺物だから変更なんてないと思うがどうなんだろ
ソース中のLPDIRECT3DDEVICE*の数字はなんて書いてある?
0381デフォルトの名無しさん
NGNGD3DXの高レベル関数に頼り切ってるから、その程度も分からなくなる。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG私へのアンカーミスかどうかわかりませんが、
ちょっと質問の意味がわかりません。。。
ソースの中では、普通にデバイス作ったときに
デバイスへのポインタのアドレスが入れられるだけだと思うのですが、
そういうことではないですか?
とりあえずヘッダを見てみたらSDKのバージョンは31とありました。
皆さんは普通にそのままSkinMeshのサンプルなどはコンパイルできるんですかね?
>>381
すいません、そのXFile用のGUIDっていうのがわからないんですが、
単刀直入に、どこをどうしたらビルドできるようになるんでしょうか。
なにやらd3dx9mesh.hの中をみたらGUIDとかいうのが
沢山定義されてましたが、あれに何の意味があるのか分かりません。。。
0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNG0386352
NGNGd3dxof.lib はプロジェクトに参加させております。
>>372で書きました通り、
SDKサンプルのSkinnedMeshもビルドできないという状況です。
これはサンプルのプロジェクトファイルをそのまま読み込んで試しましたので、
d3dxof.lib は当然プロジェクトに参加させられています。
エラーは352にあるようなRM関係のリンクエラーです。
0387デフォルトの名無しさん
NGNGつーかそのエラーdxguid.libのリンク忘れに出てくる気が…。
0388352
NGNGありがとうございます。
SDKサンプルのSkinnedMeshのプロジェクトファイルをそのまま開いてますので、
dxguid.libはプロジェクトに当然参加させてあります。
rmxfguid.hもワークスペースの外部依存のところに入っていますし、
ソースのなかでもちゃんとincludeしているようです。
0389デフォルトの名無しさん
NGNG0390352
NGNG0391デフォルトの名無しさん
NGNGincludeやlibの読み込みディレクトリの優先順位が
メチャクチャになってんじゃないの?
0392デフォルトの名無しさん
NGNG0393352
NGNG>>392
ありがとうございます。・…できました。
両方とも一番上に持ってきたらできました。
こういうことがあるんですか…知りませんでした。
許してくださいorz
そしてお付き合いいただいた皆さんありがとうございました。
0394391
NGNGまあ初心者スレだしな。しょうがない。
0395デフォルトの名無しさん
NGNG初心者スレだし・・・
0396デフォルトの名無しさん
NGNG理屈を端的に教えて欲しいんですが。
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG>>397の言うとおり、バージョンの違う同一名称のファイルがあるから。
cl.exeもlink.exeも、includeやlibの登録したディレクトリを順番に探して、
指定したファイル名が一致した時点でそれ以上探さない。
0399デフォルトの名無しさん
NGNG例えばDirectXのincludeやlibのフォルダを一番上にしてあった場合は、
指定ファイルが全部見つかっても次のフォルダには飛ばずに最後まで読むんですか?
スキップしちゃうのは一番最後に置いてあるフォルダだけってこと?
0400デフォルトの名無しさん
NGNG最後まで読む(何を?)必要もない。
0401デフォルトの名無しさん
NGNG一番上に無かったことが原因でリンクが通ってなかったのが、
上にしたら通りました、っていう流れでしょ?
で、それはなぜか?といったら、
バージョンの違う同一名称のファイルがあって
指定したファイル名が見つかった時点でそれ以上探さない為、だと。
(つまり目的のバージョンのファイルが見つかる前に走査を終了してしまう)
ってことは、上にあるときはそれ以上探して(目的のバージョンのがあるまで探す)、
下にあるときはそれ以上探さない、って言ってることになるやん?
0402デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNG上にあろうが下にあろうがあろうが
関係ねぇじゃねぇかっつってんだろうが!
0404デフォルトの名無しさん
NGNGあったからそっちが使われてるんだっていってんのに何でわからねえんだよ!
0405デフォルトの名無しさん
NGNGそのぐらい知っとけや。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNGなるほどそういうことですか。納得した。>>404もこう言ってくれなきゃー。
同じ事を何回言っても分かってない相手には分かんないままですから。
回答者スキルをアップして神回答者となってください。ありがとう。
0408デフォルトの名無しさん
NGNG0409407
NGNG俺の頭がおかしかったですね。ごめんなさい。
0410デフォルトの名無しさん
NGNG(;´Д`)< ・・・・・・
-=≡ / ヽ \_____________
. /| | |. |
-=≡ /. \ヽ/\\_
/ ヽ⌒)==ヽ_)= ∧_∧
-= / /⌒\.\ || || (*´Д`)
/ / > ) || || ( つ旦O ←>>407
/ / / /_||_ || と_)_) _.
し' (_つ ̄(_)) ̄ (.)) ̄ (_)) ̄(.))
0411デフォルトの名無しさん
NGNG例えばincludeの方はDX8が優先になっていて、libがDX9優先だったりして。
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGradeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。
0414デフォルトの名無しさん
NGNG- DirectX Info Lib (デバイス情報のデータベース。すばらしい!)
ttp://www.netsphere.jp/dxinfo/
0415デフォルトの名無しさん
NGNGDirectX 9 SDKの環境でコンパイルしようとすると、d3dx8.hがインクルードできませんと
出てきます。d3d8.hの方はあるようなのですがd3dx8.hは検索にかけても見当たりません。
そもそも、DirectX 9 SDKの環境ではDirectX 8で作成されたものはコンパイルできないんでしょうか。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418413
NGNGども。凄いですねそこ。
とりあえず9600シリーズならシェーダプログラムできると考えていいんですかね。
ただSEで満足に動くのかというのが不安です。
こんなショボいボードでシェーダやってるよとかいう人いませんかー
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG正常に動いているサンプルを自分のプログラムに組み込もうとして失敗しました。
自分のプログラムの前にサンプルをそのまま入れ、別ウィンドウでサンプルを動かすことはできました。
****(一部抜粋)****
if( g_lpDIDevice!=NULL )
{
HRESULT hr;
// デバイスの直接データを取得する
hr = g_lpDIDevice->Poll();
*******************
このhrの値が『S_OK』となってほしいのに、『0x8007000c アクセス コードが無効です。』と出てきます。
どう理由でこのエラーが発生するのか、また解決方法がお分かりの方がいたら助言お願いします。
0421デフォルトの名無しさん
NGNGヘルプに書いてある「pollする前に・・・」とかいうとこは読んだんだよな?
0422413
NGNG俺ですか?
いや、今使ってるのはシェーダ対応してないのです。
でシェーダプログラムやるにあたってグラボ買おうかなと思うものの、金が無くて。
本とかめちゃくちゃ高いし。
だから安いボードでどのくらい動くものかなというのが知りたいです。
0424デフォルトの名無しさん
NGNG0425420
NGNG『pollする前に』でヘルプを検索しても『する前に』がヒットしない(=事前処理が書かれていない)のですが。
ググっても『■ 息抜きせよ!投票せよ! ■』といったような関係のないものばかり出てきます。
一体>>421は何を見せたかったのか分からないので、半端なまま放置されても(´・ω・`)
0426デフォルトの名無しさん
NGNGMSDNでPollを検索しろよ、この糞野郎
http://www.microsoft.com/japan/msdn/library/ja/jpdx8_c/hh/directx8_c/_dx_idirectinputdevice8_poll_dinput.asp
0427デフォルトの名無しさん
NGNG相手にしてたらスレが無駄に流れてしゃーない。
0428420
NGNGありがとうございます。
>>420のプログラムの前に別ウインドウでちゃんと動いているのでデバイスの取得などはできているとは思いますが、
そこまでにデータが失われている(受け渡されていない)可能性があるので調べなおしてみます。
>>427
昨日Win32APIスレでDirectInputについて初めて知ったので、その人と同じようなことするかもです(´・ω・`)
0429デフォルトの名無しさん
NGNG>>417
いや、本当にないんですよ。
ハードディスク全体に検索かけても。
SDK Update (December 2004)をダウンロードしたんですけど、
ほかにダウンロードする必要のあるファイルってありますか?
もしくはVC++6.0だとできないケースってありますか?
ちなみに、d3d8.hは入っています。
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGあるって
0432デフォルトの名無しさん
NGNGサンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人
0433420
NGNG色々ありがとうございました。
0434デフォルトの名無しさん
NGNGどうすればいいのですか。
本を見ただけでは本に書いてあることより上のことはできません。
手法が問題なのだから、想像力で補える部分じゃありません。
シェーはフリーソフトなんかにゃほとんど使われません。
市販のゲームはソース見られません。
どうすりゃいいのですか。
∧⊂ヽ
(゚Д゚ )ノ
| ⊃|
| |
⊂ノ〜
∪
0435デフォルトの名無しさん
NGNG0436413
NGNGGLスレ逝ってきます。レスくれた人ありがとう。
0437デフォルトの名無しさん
NGNGやったとしてもサンデープログラマのように
ピクセル一つ出力しただけで騒いでそこで満足して終了か
いずれにしても大規模なシェーダは100%無理。
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG無意味な行間からおかしな臭いがぷんぷん臭ってくるよ。
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNG図星に確実にヒットした証拠ではないかと
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG413 :デフォルトの名無しさん :04/12/23 16:48:35
シェーダープログラムやりたいんだけど、
radeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。
432 :デフォルトの名無しさん :04/12/24 18:50:37
413見て気になったんだけど、GPUGEMって名前からいかにも
サンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人
0444デフォルトの名無しさん
NGNGシェーダって一つ書けばそれで終わりと思ってる人もいるから手に負えない。
必要レベルが1000個だったらどうするつもりなんだろ
0445デフォルトの名無しさん
NGNGAGPかPCI-Expressかの指定もない
GPU Gemsの内容について少なくともこのスレでは必要スペックを提示すべき
そしてそれが出来るなら適当な板は自作板だろう
1万円で動作確認程度ならGeForce6200が最適
>>432
DirectX、OpenGL、Cg、HLSLなど混在
0446デフォルトの名無しさん
NGNG無駄な話で逃げ回らず、大規模なシェーダの具体例をどうぞ。
0447デフォルトの名無しさん
NGNGわざわざこれから9600SE買おうっつうくらいだからだいたいAGPってわかるやん?
>GPU Gemsの内容について少なくともこのスレでは必要スペックを提示すべき
>そしてそれが出来るなら適当な板は自作板だろう
誰か翻訳して?
>DirectX、OpenGL、Cg、HLSLなど混在
これ、答えになってるのん?
0448デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGなぜ>>232の恥ずかしい過去を引きずって復活?
0451デフォルトの名無しさん
NGNG命令数が多くてもいいし
0452デフォルトの名無しさん
NGNG413 :デフォルトの名無しさん :04/12/23 16:48:35
シェーダープログラムやりたいんだけど、
radeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。
432 :デフォルトの名無しさん :04/12/24 18:50:37
413見て気になったんだけど、GPUGEMって名前からいかにも
サンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人
0453デフォルトの名無しさん
NGNG数を増やすだけでは単に遅くなるだけ。
何をするときに大規模にする必用があるのか、具体的例を挙げてくれ。
0454デフォルトの名無しさん
NGNG数百、数千種類ってわけじゃないよね。
いわゆるライト1個違いとかの派生も含めてってことで。
でもそう考えてもそれだけの数になるってのは、
自分はヘタレなのでピンとこない。教えて大規模のひと。
0455デフォルトの名無しさん
NGNGC#でコード書けるようになるまで待つのが基地。
今は単純にコンパイラによる制限が大きいだけだからな
0456デフォルトの名無しさん
NGNGなんで頂点シェーダー一本にしないの? 利点は頂点シェーダーが多いのに・・
DirectXでいう、HALとREFの関係?
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG実装上の理由。
頂点処理はフレームあたりの実行回数は少ない、しかし内容は複雑。
ピクセル処理はフレームあたりの実行回数はとても多い、しかし内容は複雑じゃない。
この折半が現在のShaderのデザインに。
しかし>>456の意見はもっとも、俺もそう思う。
0460デフォルトの名無しさん
NGNG本当にそう思うのか。
駄目だこりゃ。
0461456
NGNG違うのね、根本的に。 勉強しなおしてきます。
0462デフォルトの名無しさん
NGNGFarCry、OpenGLだがDOOM3、HL2と最近の3Dゲームはこぞって
1000個2000個と増えてきているが、それは幻と。
DX8世代は1モデルに50個、100個のシェーダとかザラだったが
それは重くなるんだそうだ。
0463デフォルトの名無しさん
NGNG個数に基準とかいいとか悪いとかあんの?
全く意味不明なんだけど。
0464アーサー
NGNG0465デフォルトの名無しさん
NGNGhttp://if.dynsite.net/t-pot/program/12_font/index.html
逝ってらっしゃい
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG仕様がいつの間にか変わってんじゃねーか!!!!!!!!!
以前挫折したままだったから再挑戦しようかと思ったのに!!!!!
サンプル拾ってきてコンパイルしたらワケワカランエラーが出たからググってみたら
仕様変更らしいじゃねーか!!!!
ID3DSprite::Begin(void) だったのに
ID3DSprite::Begin(DWORD Flags) になってるじゃねーか!!!!!
どうしろって言うんだよ畜生め!!!!!!!
バージョン指定で回避しようかと思ってググったけどわかんねーし!!!!!!
それ以外の解決法はもうわかんねーし!!!!!!!!!!
その他にも変数の型とか変わってるし!!!!!!
D3DXVECTOR3 * とか!!!!!!
変数までバージョンうpしてんじゃねーか!!!!!!!!!
ただでさえワケワカランだったのが更にワケワカランくなっちまったじゃねーか!!!!!
AirH"で数日がかりで落としたのによぉぉぉぉぉぉぉぉぉ!!!!!!!
落としてる間に DirectX 9.0 SDK Update (December 2004) がリリースされてるし!!!!!!!
どうすれば解決できるでしょうか?
以下のどちらかの解決方法をお願いします。
1:今のソースコードをコンパイルできるようにする。
2:新しい仕様のサンプルソース(Direct3DXでの2Dの描画)。
環境:BCC
DirectXSDKのバージョン:DirectX 9.0 SDK Update (October 2004)
0468デフォルトの名無しさん
NGNGそしてこういう風に環境を記号のように書く人間の
礼儀というものに対する感覚が理解できない。
質問部分だけは答えが欲しいもんだから謙って書いて、
環境を書くときはもう書けばいいんだろうといわんばかりの書き方。
0469デフォルトの名無しさん
NGNG変更点を追ってまで使う意味がまったくないものを使用しないこと。
0470デフォルトの名無しさん
NGNG素晴らしい
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNGインターフェイスで何の速度が変わるのか知らないが分けて考えてるあたり
どうもバカが紛れ込んでいるような気がしてならない。
0474467
NGNGありがとうございます。
Spriteってそんなに変更が多いものなんですね。
でもそうすると、どうやればいいのか完全に分からなくなります。
昔StretchRectのやつで表示してたら、それでは背景色の透過やなんかができないから
スプライトでやれと言われたのですが。
スプライトって3Dの板のことですよね・・・?
今回は英語版のMSDN見ながら修正してなんとかいけました。
日本語のほうはまだ更新されてないようです。
>>468
教えられない馬鹿は黙ってろよ。
・・・っと釣られちまったorz
0475デフォルトの名無しさん
NGNGお約束「具体的に書け」
1. (トラブルシューティング) 具体的に書いて進展解決したためしはない
2. (手法)例えばスキミング。「スキミング」という「単語」こそ使っていないものの、
書いた文を読めば「これで実現できることはスキミング以外にない」ことがわかるはずだが
これがわからない。「単語」で表わされないと理解できない。表されても理解できないもの多い。
読解力14位になるはずだ。
0476デフォルトの名無しさん
NGNG>>474
そのくらい直せ、最新の情報はなんでも英語で
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/d3dx/interfaces/ID3DXSprite/Begin.asp
みてないが恐らく英語の最新docがSDKにもあるはず
D3DXVECTOR3は昔からある
3はバージョンではなく、成分数
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG>・・・っと釣られちまったorz
な?やっぱこういう奴。教えてやる価値なんてない。
ですますなんてのは上っ面。答えを引き出すための偽装。
0479デフォルトの名無しさん
NGNGこいつは浅いな
0480デフォルトの名無しさん
NGNG2次元から逆に3次元に変換してポリゴンとの交点を検出するイメージ?
0481デフォルトの名無しさん
NGNGDirectX総合スレ (Part2)
http://pc5.2ch.net/test/read.cgi/gamedev/1095863432/
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGD3DXIntersect
昔のSDKならPickサンプル入ってるよ
0484デフォルトの名無しさん
NGNGSM3.0に対応してたら何でもいいんじゃねーの?
0485デフォルトの名無しさん
NGNG3D Chipset Specs
http://users.erols.com/chare/video.htm
0486デフォルトの名無しさん
NGNGどんぐらい空いてるかって
調べる方法ないんでしょうか?
0487デフォルトの名無しさん
NGNGVRAMが足りなくなることなんかないですよ
0488デフォルトの名無しさん
NGNGさんくすこ。でもマネージだとInteresectでSDKドキュメント引っかからない・・・
0489デフォルトの名無しさん
NGNG○ : Intersect
0490デフォルトの名無しさん
NGNGなんで?
0491デフォルトの名無しさん
NGNGそんな大した画になることはないから
0492デフォルトの名無しさん
NGNGサンプル弄ってるレベルの話でしょ?
0493デフォルトの名無しさん
NGNGそのつどVRAMに転送するって発想だからなのかな…
まとめてVRAMに載せておくって発想とかないんだろうね
ATIとかnVidiaのデモは、
最初のロードで必要な物は
全てVRAMに送ってしまっていると思うけど
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG君には到達不可能なレベルの話
0496デフォルトの名無しさん
NGNG教えられない馬鹿は黙ってろよ。
0497デフォルトの名無しさん
NGNG今は頭のいい人達にいろいろ実験してもらって、
俺はそのうちワケわかんなくても使えるくらい資料豊富になったときに
ソースぱくって使わせてもらえばいいや。
0498デフォルトの名無しさん
NGNGその描写をDirectX8でやろうと思って初期化を試みておりますが
失敗してしまいます。
Create(HWND hwndParent)
この関数でウィンドウハンドルを取得して
と同時にDX8を初期化しています。
すると、デバイスの作成で失敗してしまいます。
if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwndApp,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dppApp,&pD3DDevice))){
if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwndApp,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dppApp,&pD3DDevice)))
return FALSE;
}
どうすれば初期化できるでしょうか、、ご教授ください。
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNGCの基礎から勉強しなおして来てください。
0501498
NGNGチュートリアルは全部やりました。
WMP10SDKの視覚エフェクトのチュートリアルにはDXを利用した描写がなく、
デバイスコンテキストを利用した描写方法しかのってないのです。
0502デフォルトの名無しさん
NGNG次はDXのSDKチュートリアルをやってください。
0503デフォルトの名無しさん
NGNGデバイスの作成すら出来ない時点で、チュートリアルが正しく理解できていません。
四の五の言わずに言われたことをやってください。
あなたに余計なことを発言する権利はありません。
0504デフォルトの名無しさん
NGNGわからないなら口だすなて
>>498
ウィンドウハンドルの取得方法が間違ってる。
そのメソッドじゃないよ。
0505デフォルトの名無しさん
NGNGどもです。
RenderWindowed内で取得するとうまくいきました。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
0508デフォルトの名無しさん
NGNG甘い顔でオムツ変えまでしてくれるような回答者だけにレス。
氏ね糞野郎。ほんとうにこういう中身のない上っ面野郎って氏んで欲しい。
こんな馬鹿に「どもです」とか言われたいがために
糞質問に答えてしまう馬鹿回答者も消えて欲しい。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNGよくできたネタだな。
0511デフォルトの名無しさん
NGNGクラス化したってパブリックにするでしょ?
なんでいちいち取得する必要があるの?
つーか結果的にDirectXじゃないでしょ?
そういう時はハンドル取得できてるかどうか確認しろよ基本だろ
だから基礎からって言う人がいたんだよ
0512デフォルトの名無しさん
NGNG>>509
0513デフォルトの名無しさん
NGNGなんか外しまくってるぞ。
もちつきなさい。
0514デフォルトの名無しさん
NGNG顔が真っ赤になってることに気づこう
0515デフォルトの名無しさん
NGNG便宜上線引きしてあるだけであって、どっちも同じだろ。
0516デフォルトの名無しさん
NGNG…
0517デフォルトの名無しさん
NGNGその中でIVideoWindow2で画面表示までやりたいんですけど
具体的にはどのようなコードを書くのさ?
0518デフォルトの名無しさん
NGNG面対称のオブジェクトをテクスチャにレンダリング→
テクスチャを水面オブジェクトに投影(カメラマッピング?)
→バンプマップをかける
というアプローチで合ってますでしょうか?
0519デフォルトの名無しさん
NGNG試してうまくいかなくての質問ならまだ判るんだけど。
0520デフォルトの名無しさん
NGNG初めてお目にかかります。こちらにお世話になってるAの母です。
Aはこちらのダイレクティング・ペケなるものが大好きなようで、毎日毎日学校から帰ってくるなり
パソコンのスイッチを入れては、夜遅くまでガタガタやっているようです。
つい先だってはマグニチュード9.9の地震まで起きました。芸術点です。
それだけダイレクティング・ペケが素敵なところということでしょうし、娘も楽しそうにしているので
特に問題とは思っておりませんでした。
しかし、HALを「ハル」と読みだすようになってしまい、先日生まれてはじめてハルノートを使用することに。
そして、もうすぐ入試を控えている身であるにも関わらず、ダイレクティング・ペケにのめりこんで
しまいまったく勉強もおぼつかない状態です。
私どもの都合で大変申し訳ないのですが、どうかHALをハルと読むのをやめるという
形にしてはいただけないでしょうか。
コーデル・ハルみたいですげぇムカつきます。
勿論、入試が終わるまでの期間で結構ですので、どうぞよろしくお願いします。
0521デフォルトの名無しさん
NGNG締め切りまで時間がないので簡単な方法がないか
お聞きしたかったんです。
けっこうありがちなエフェクトなのでもっと
エレガントな方法があるのではないかと思いまして・・・。
0522デフォルトの名無しさん
NGNGよく考えてみると良い。
0523デフォルトの名無しさん
NGNGできてたかもしれません。ありがとうございました。
0524デフォルトの名無しさん
NGNGD3DVERTEXELEMENT9で頂点宣言を行うが、オフセットは自分で
計算しないとならないのが面倒くさい。頂点構造体から半自動的に
オフセットを定義する方法はないのだろうか。
0525デフォルトの名無しさん
NGNG行なわない、行なわない
>オフセットは自分で計算しないとならないのが面倒くさい。
何のオフセットを、何処でだ?
>頂点構造体から半自動的にオフセットを定義する方法
D3DVERTEXELEMENT9で頂点宣言を行うと思ってるから思いつかないんじゃないの…
以上があってるか間違ってるかの問題はさておき
そのオフセットとやらは、使用する直前で決まる動的なサイズなの?
違うと思うんだけど…
#define
って知ってる?(これを使用する問題なのかもさておき)
それとも構造体を書いた、そのサイズの高々数バイトを暗算して
defineする手間を言ってるの?
ともかく、もっと具体的に
0526デフォルトの名無しさん
NGNGD3DVERTEXELEMENT9 g_decl[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
要はこれの 0,12,24をハードコードせず自動的にってことだよね。
し ら ん 。
0527デフォルトの名無しさん
NGNG分かってないならレスするな。ヘルプで「頂点宣言」を検索してみろ。
defineとか筋違いなこと言ってんじゃねえ。
>>526
そう、それ。やっぱ手動か。
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG単純に動的に代入しちゃいけないの?
0530デフォルトの名無しさん
NGNGD3DDECLTYPE_FLOAT3なら
sizeof(float) * 3
www
0531デフォルトの名無しさん
NGNG#define B 8
#define C 12
#define D 16
.
.
.
以下お好きなだけどうぞ
0532デフォルトの名無しさん
NGNG計算間違いしたらイヤだろ。それに頂点要素を後から追加するときに
オフセット計算しなおしになったらめんどくさいんだよ。
>>529
動的代入したいって話なんだよ。
>>530
それは今やっている方法だ。問題は頂点構造体に要素を追加したい場合に
任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。
0533デフォルトの名無しさん
NGNG今どうやってるって? 計算できているなら動的に代入できるんでないの?
0534デフォルトの名無しさん
NGNG分かってないくせにレスつけて気取ってんじゃねえ。
t-potでも100回読み直してから出直してこい。
0535デフォルトの名無しさん
NGNG頂点構造体のメンバのオフセット位置を計算しないとならない。
構造体メンバの先頭からのバイト数を知るための式があると楽なんだが。
0536デフォルトの名無しさん
NGNG8の頃もDWORDの配列で宣言しててDWORDじゃ宣言してないと思ったけど?
D3DVERTEXELEMENT9構造体、単体で頂点宣言って言うの?
頂点要素が一つでもD3DDECL_END()で終わる配列でしょ…
細かい事だが、質問者で、日本語の不備(これの事)を指摘されて
それを分ってないって言うならね…
0537デフォルトの名無しさん
NGNGそれがDX9での売りだろ
頂点ストリームだけのD3DVERTEXELEMENT9構造体
法線ストリームだけのD3DVERTEXELEMENT9構造体
頂点カラーストリームだけのD3DVERTEXELEMENT9構造体
UVストリームだけのD3DVERTEXELEMENT9構造体
それらを組み合わせて使える(シェーダーだけどな)
t-potのサイト名を出して、さも自分は理解してると言わんばかりなんだから
知ってるんだろw
0538デフォルトの名無しさん
NGNG頂点宣言という言葉はDirectX9ヘルプに書いてあったのでそれを使っている。
どうも用語の使い方に曖昧さがあるか間違っているようなので、言い直す。
D3DVERTEXELEMENT9構造体のOffsetメンバを自動的に決定するための
簡易な方法はないだろうか。この場合、オーバーラップが無いものとする。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG寝るよ、おやすみ。
0541デフォルトの名無しさん
NGNG質問してるくせに随分と偉そうな物言いだな。
0542デフォルトの名無しさん
NGNGその程度のレスしかつけられないなら自慢げにレスしてんじゃねえよ。
0543デフォルトの名無しさん
NGNGここは初心者スレだったね。
質問場所を間違えたよ。今は反省している。
うん。おやすみ。
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG>簡易な方法はないだろうか。
自動的に暗算できる程度の”算数”の学力を手にれる
0546デフォルトの名無しさん
NGNGしっかり
>D3DVERTEXELEMENT9 構造体の配列として表現される。
>配列の各要素で、1 つの頂点要素を記述する。
と書かれていました。
0547デフォルトの名無しさん
NGNGD3DVERTEXELEMENT9 g_decl[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 1, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 2, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
ってやって別のストリームで流せばオフセットなんて計算する必要ないんだよ。
ってそれはわかってる状態でわざわざオフセットを計算する方法を聞いてるってこと?
0548デフォルトの名無しさん
NGNG当然わかっていらっしゃるだろう。
失礼な事を言うものではない、547よ…
0549デフォルトの名無しさん
NGNG(int)((char*)&hoge.tu - (char*)&hoge.x);
(int)((char*)&hoge.nx - (char*)&hoge.x);
みたいなことをやりたいってこと? 手で計算した方が早いだろ。
0550420
NGNGToruの(ttp://www.geocities.jp/toru_website/di/5.html) サンプルを自分のプログラムに組み込めました(433)。
動作(速度)が一定ではないのでフレームレートを出してみました。
ジョイパッドがない状態(又はDirectInputを入れる前)では30〜45fpsでした。
DirectInputでパッドを使うと何故か60fpsになります。
しかし重い処理と軽い処理を行き来するとだんだんfpsが落ちて40fps以下に下がってしまいます。
一応30fpsでも、0.5秒間60fpsで0.5秒間止まるというのを繰り返している感じです。
組み込んだ部分を絞っていくと、
hr = g_lpDIDevice->GetCapabilities( &g_diDevCaps );
の1行が原因ではないかと思われます。
コメントアウトしてもパッドは使えますが、フレームレートは30〜45fpsになります。
(日本語が下手でスマソ(´・ω・`))
つまり、
・どうしてGetCapabilities(?)を使うと60fpsになるのか。
└その後、毎秒の停止(空白)時間徐々に増えていくのは何故か。
・この1行以外の処理は全く同じで、今まで30〜45fpsだったのに60fpsで表示できるなら、60fpsを維持することができるのか。
MSDNを見ても『DirectInputDevice オブジェクトの能力を取得する』と書かれてますし、他の設定を弄っているわけでもなさそうですし。
何かお分かりの方がいればご助言お願いしますorz
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG各要素間に余分なブランクがなく詰まっていると仮定すれば
要素のサイズを D3DVERTEXELEMENT9 の Type メンバから求めていけば、
オフセットは求められるけど。例えばこんな感じか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/48.txt
0553デフォルトの名無しさん
NGNG>任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
>オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。
その理論だと、追加する事自体がエレガントではないと思わないのか?
0554デフォルトの名無しさん
NGNGでは、D3DVERTEXELEMENT9の配列の各要素を定義する時に
その定義途中の各要素に順にアクセスして、
合計のoffsetを計算する方法をご教授してください。
つまり、配列定義中の各要素の値の一部を決定するのに
その各要素をピックアップ出来るか?って事です。
お願いします。
0556デフォルトの名無しさん
NGNGどうして頂点ストリームを使わないでオフセットに拘るの?
もし、そうしなけりゃいけないような設計にしてしまったとかいうなら
早めに設計をみなおした方がいいよ。
0557デフォルトの名無しさん
NGNGプログラムは「めんどくさ回避」で進化してきた。
シェーダも3.0を迎えるにあたり「2.0ではめんどくさかったから3.0ではラクに」
結局これも「めんどくさ回避」なのだが
手 を 抜 い て い い と こ ろ と 悪 い と こ ろ が あ る
ことを理解していないセイガクが多すぎる。
「自分でやるべきところは面倒くさかろうが難しかろうが自分でやれ」
0558デフォルトの名無しさん
NGNGそれってD3DVERTEXELEMENT9の配列が定義終わってないと使えないでしょ?
かの御仁の要求は、面倒、計算ミスが心配、エレガントではない
と言った理由により、定義をする時点で求めたいと言った主旨でしょ?
0559デフォルトの名無しさん
NGNG日本語を勉強しましょう
「C」つってんのに勝手に脳内で「C++」に置き換えんなや!
みてえな
0560デフォルトの名無しさん
NGNGD3DVERTEXELEMENT9 decl = {
{ 0, 0/* この時点で" 0"が欲しい */, ..../*略*/},
{ 0,12/*この時点で今までの要素を受けて自動(半)で"12"が欲しい*/, ..../*略*/},
{ 0,24/*この時点で今までの要素を受けて自動(半)で"24"が欲しい*/, ..../*略*/},
D3DDECL_END()
};
要は定数直書きが気に入らないって奴だろ
0561デフォルトの名無しさん
NGNGなんか動的代入したい、とか書いてあったので勘違いしました。
定義の段階で求めようと思ったら、551さんの言うようにoffsetofマクロを
使うことになるのかな。
struct MyVertex
{
float x, y, z;
float nx, ny, nz;
float tx, ty;
};
D3DVERTEXELEMENT9 g_decl[] =
{
{ 0, offsetof(MyVertex, x), ...
};
中でstructを使えば多少みやすくなる…かな。
struct MyVertex
{
struct { float x, y, z; } Position;
struct { float nx, ny, nz; } Normal;
struct { float tx, ty; } Texture;
};
D3DVERTEXELEMENT9 g_decl[] =
{
{ 0, offsetof(MyVertex, Position), ...
};
エレガントからかけ離れていく悪寒。
0562デフォルトの名無しさん
NGNG12byteや4byte単位の足し算を面倒と言って、
しかも途中に違うストリームを挿入したら、以降は書き換えとか発生して面倒と言ってるんだから
その方法も面倒だし
頂点構造体の方も書き換えになって、意味ないじゃんと思う。
そもそも、任意の要素を追加していくタイプの配列で
最新の要素が、その今までの任意の要素に影響をうける場合
そのコードを書いている、その場で手動でコーディングがもっとも効率が良いと思うけど
そう考えられないなら、その内に究極的に言うと
変数の型を宣言するのは面倒です。コードからどう言った型で使っているか読み取って
プリコンパイル時か何かに、自動で型を認識してくれる方法はないですか?
とか言い出すのと同じレベルの”面倒”って奴だと思う
0563デフォルトの名無しさん
NGNGswitch(decl[n*5+4]){
case D3DDECLUSAGE_POSITION:
case D3DDECLUSAGE_NORMAL:
offset = offset + 4*3;
break;
case D3DDECLUSAGE_TEXCOORD:
offset = offset + 4*2;
break;
}
decl[(n+1)*5 + 1] = offset;
0564デフォルトの名無しさん
NGNGここのオフセット指定に関しては
なんでDirectXの関数がオフセットを欲しがるのか個人的には謎なんだけど。
だって配列に設定されてる値から確実に求められるじゃん。
ここでどうしてオフセットを求めてくるのかわからん。
0565デフォルトの名無しさん
NGNGtypedef struct _VERTEX {
float x, y, z;
float tu, tv;
DWORD diffuse;
} VERTEX;
この頂点構造体で作られた頂点バッファの値を使い回して
テクスチャなしのポリゴン描画に流用しようとしたとして
D3DVERTEXELEMENT9の宣言時にテクスチャストリームを無くして
オフセットをテクスチャ分薦めた物を宣言して使用すれば
その頂点バッファを使い回し可能だとか…
0566デフォルトの名無しさん
NGNGスレのにぎわいに貢献できたと自負しております。
>>552の方法はオレも考えた。それを実装しようと思っていたところだった。
手動でオフセット計算するにせよ、正しい値かどうかを確認するルーチンが
欲しいというのもある。
>>556
1.これまで単一ストリームでプログラムしていたので、その姿勢を引きずっていたため。
2.複数のストリームに対して個別に複数の頂点バッファを作成するのがイヤ。
3.一つの頂点バッファで複数のストリームを表現したい場合は、ストライドを
計算しないとならない。これってつまりオフセットそのもの。
ところでオフセット値なのだけれど、4とか12という固定値で決め打ち
しているソースが意外と多く見つかって、sizeof演算子を使っているほうが
少ないと感じた。型の幅はCPU/OS依存なので固定値にしてはならないと
昔習ったオレとしては気持ち悪いのだけれど、今時はこれでいいわけ?
0567デフォルトの名無しさん
NGNGんなわけないだろ。
コンパイラ依存。
0568デフォルトの名無しさん
NGNG頂点ストリーム使ったことないでしょ?
俺が色々やってみた結果これが一番シンプルに組めるよ。
ストリーム0をPosition
ストリーム1をNormal
ストリーム2を〜以下略って設定していくだけですごく簡単だよ。
わずらわしいこと1つも無かったよ。
単一のストリームでやっちゃうと同じ位置情報の処理なのに
別ルーチンが必要になったりしてプログラムが大変なことになるでしょ?
そんなアホなことしてないで頂点ストリーム使えるようになりなよ。
よく調べもしないで見当違いな結論出して苦労してんのみっともないよ。
0569デフォルトの名無しさん
NGNG失敬。その通り。
>>568
君の言うことを検討してみた。
頂点バッファが複数になることを懸念していたが、よくよく考えてみると
OpenGLのArray系での配列指定時には座標配列、法線配列など個別に
指定せざるを得ない。そのように考えれば複数ストリームもアリだな。
0570デフォルトの名無しさん
NGNGんで動的にIDirect3DVertexDeclaration9を作ってる。
これってDirectX9からCOMインターフェイスになったんだよなあ、これは改悪と思う。
0571420=550
NGNG0572デフォルトの名無しさん
NGNGやはりオレが燃料を投下しないとダメなのか。罪な奴だなオレ様も。
HLSLでグローバル変数にセマンティクスを記述しても無視されるが、
敢えて記述する利点はなんだろう? MS公式本のソースコードには
セマンティクスが書いてあるグローバル変数と書いてないのと
混在しているが。
0573デフォルトの名無しさん
NGNGそもそも機能追加してfpsが上がるプログラムが疑問
0574420=550
NGNG追加したところ(DirectInput関係)以外を削ってみてもやはりGetCapabilitiesを使うと60fpsから始まります。
もちろんループをしているところもfps表示に加え、画像の描画で負荷をかけても同様です。
fpsが上がる要因となる部分はこれしかないし、何が問題なのかとorz
ウインドウモードですがVC++とギコナビ以外特に負荷のかかることはやってませんし。
ちなみにGetCapabilitiesを使って60fps0.5s/停止0.5sまで処理がおかしくなると、
ウインドウを動かすとタイトルバーが透明になったり、閉じたあとIEも含めたアプリケーションの動作が鈍くなったりします。
0575デフォルトの名無しさん
NGNGそりゃお前、そんなところみてるより他の部分の処理がおかしいって疑ったほうがいいんじゃねぇか。
0576デフォルトの名無しさん
NGNGGetCapabilities動かす->内部モード変更->今回の動きにベストマッチ ってかんじじゃないのか?
ほかのやつでも試してみなよ
0577420=550
NGNGだから他のところコメントアウトして削ったってorz
フレームレートの調整なんかやり方知らないから元々やってないし、Sleepは0だし・・・。
>>576
相性と言うか開発では9だけどグラボは8.1だからでしょうか
もう1台のPCはスペックに差がありすぎて常に61〜60fps(;´Д`) (グラボは9)
0578デフォルトの名無しさん
NGNGIDirectInputDevice8::SetCooperativeLevelというか協調レベルについてです
HRESULT SetCooperativeLevel(HWND hwnd,DWORD dwFlags);
にて
hwnd:デバイスに関連付けられているウィンドウ ハンドル。このパラメータは、
このプロセスに属する最上位の有効なウィンドウ ハンドルでなければならない。
デバイスに関連付けられたウィンドウは、MicrosoftR DirectInputR デバイスの中でアクティブである間は、破棄してはならない。
とのことなのですが
メインウィンドウ1つでゲームオンリーなアプリの場合は
トップウィンドウ=hwnd
になりますが
ビューワーアプリなどでDirectXを使用する場合
DirectXのターゲットウィンドウは最上位のウィンドウでなく
WS_CHILD フラグのない子ウィンドウがターゲットウィンドウだったりします。
この子ウィンドウでDirectInputを有効にするにはどのようにすればよいのでしょうか?
※hwndに親hwndを渡せばS_OKは返しますが、dwFlagsがDISCL_FOREGROUNDの時は
親ウィンドウにフォーカスがないと子ウィンドウでDirectInputが有効になりません。
当然DISCL_BACKGROUNDであれば問題ないのですが
あくまで今想定しているのはDISCL_FOREGROUND | DISCL_NONEXCLUSIVEという状況下での解決ということでお願いします
以上よろしくお願いします
0579デフォルトの名無しさん
NGNGSetCooperativeLevel を親と子で2回呼ぶか
あるいはデバイス2個作るとかってやり方じゃないのかな
たぶん
0580デフォルトの名無しさん
NGNG>SetCooperativeLevel を親と子で2回呼ぶか
これに関しては
hwndがプロセスに属する最上位の有効なウィンドウハンドルって限定されてるので
どこで呼んでもhwndには同じウィンドウハンドルを指定しなければならないので無理でした。
最上位でないハンドル、たとえば子ウィンドウのハンドルなどを指定すると
S_FALSEが返ってきます。
>デバイス2個作る
IDirectInput8::CreateDevice
には
IDirect3D9::CreateDevice のようにD3DPRESENT_PARAMETERSなどの
ウィンドウハンドルやターゲットを指定するようなパラメータがないのでやり方がわかりませんでした。
指定のしかたがあるのでしょうか?あれば教えてください〜
0581デフォルトの名無しさん
NGNGいわゆるモーションブラーなどの「視覚エフェクト」に関して詳しいページなどありませんでしょうか。
D3Dを使った2Dアクションを作っているのですが、やはりエフェクトが充実していないと
映えないようでして…。
いちおうモーションブラーくらいは自力実装しましたが、さらにステップアップするための参考物が欲しいしだいです。
よろしくお願いいたします。
書籍でも構いません。
0582デフォルトの名無しさん
NGNGサンプル色々あってよさそう。
0583デフォルトの名無しさん
NGNGありがとうございます。
その方のWebPageも丁寧でいいですね。
書籍も探してみます。
0584デフォルトの名無しさん
NGNG知り合いのマシンでシェーダをテストしてみたところ、対応していないものが多すぎるようです。
ハイエンド向けなら良いのですが、2Dアクションゲームでそれはちょっと…。
(シェーダ自体は面白そうなので個人では遊ばせてもらいますが)
シェーダに頼らないエフェクトについて、参考になるものもあればご教授いただけると幸いです。
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGプログラムはVBちょこっととエクセル程度です。
ちなみにCGの原理と用語はほとんど知っています。
スレ違いでスミマセン・・・m(_ _)m
0588デフォルトの名無しさん
NGNGあなたの努力しだいだけど一年あったらできるんじゃない?
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNG喫茶店でも開くのか?
0591デフォルトの名無しさん
NGNGがどの程度かにもよる
0592デフォルトの名無しさん
NGNGマスターはマスターなのである。
それ以上でもそれ以下でもない。
マスターの一般的な意味合いが
「世界最高」なら「世界最高」
「とりあえず組むのに困らない」なら
「とりあえず組むのに困らない」
よくこんな程度が分からないでプログラムが出来るものだ
それとも出来ないのかも知れないが
0593デフォルトの名無しさん
NGNGだから疑問が出るわけなのに、それすら理解できない>>592は、
プログラム以前に設計段階で破綻するだろう。
0594デフォルトの名無しさん
NGNGマスター -10点
VBちょこっと -20点
CGの原理と用語 +5点
スレ違い -10点
計 -5点/100点
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG業界人はこんなところに書き込まないよ。どうせお前らオタクだろ。
0598デフォルトの名無しさん
NGNGError 計算結果が違います。
0599デフォルトの名無しさん
NGNGやる気 +5点
0600デフォルトの名無しさん
NGNGD3DXMatrixReflect()とD3DXMatrixShadow()使ったらでけました〜。
エクステンション便利杉。ありがとうマイクロソフトさん
と思ったら今度はテクスチャが
AddressU = Wrap;
AddressV = Wrap;
にしてるにも関わらず3回目からクランプになります。
下がピクセルシェーダ部分です。
float4 PS_BumpMapping ( VS_OUTPUT_POSCOLORTEX2 In ) : COLOR
{
float2 uv = tex2D( SampBump, In.Tex1 ).xy;
uv.x = uv.x * g_matBump._m00 + uv.y * g_matBump._m10;
uv.y = uv.x * g_matBump._m01 + uv.y * g_matBump._m11;
return tex2D( SampFilter, In.Tex0 + uv ) * In.Color;
}
ピクセルシェーダは1.4を使ってるんですが・・・。
0601デフォルトの名無しさん
NGNGってか学校のPCでも動かなくなってしまったよ。
1.4で回避するほうほうはないですかね?
0602デフォルトの名無しさん
NGNGまともに3Dのゲームが作れるようになるには2年は必要だね。
0603デフォルトの名無しさん
NGNGそうだな。
でも、2年で一人前とは言えないまでも使える人間が育つこの業界は楽だなw
0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNGDirectX8で2Dのライブラリ等を作って、次は3Dをやってみようとしています。
ただ、難しさは相当違う感じなんで、何か良い勉強法等あったら教えていただきたいです。
また、TWINTAIL LOVERS等を参考にしているのですが、他に良いサイトありましたら教えてください。
具体的ではない質問ですが、よろしくお願いします。
0606デフォルトの名無しさん
NGNGDirectX によるゲームプログラミング入門 : 第 1 章 3D ゲームプログラムの基礎
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
0607デフォルトの名無しさん
NGNGサイズとか、同じテクスチャをうまくつかいまわす?とか
0608デフォルトの名無しさん
NGNGお早い返答ありがとうございます。
そのページを参考に勉強してみます。
0609デフォルトの名無しさん
NGNG/::::::: \ /\___/ヽ
.|:::. '''''' '''''' | / :::::::\
|::::.,(一), 、(一)| | '''''' '''''' .:::|
.|::::::: ノ ,,ノ(、_, )ヽ、,, | |(●), 、(●)、.::::|
\:::::.ヽ`-=ニ=- ' / | ,,ノ(、_, )ヽ、,, .:::::::|
/ `一`ニニ´-,ー´ \ `-=ニ=- ' .:::::/
/ | | / | `ー`ニニ´-一´ヽ、
/ | | / | | / _ l
/ l | / | | /  ̄`Y´ ヾ;/ |
__/ | ⊥_ーー | ⊥_ _____________,| | |´ ハ
| `ーヽl_l_l.} ヽl_l_l.} | | |-‐'i′l
(、`ーー、ィ } ̄` ノ |__ | _| 7'′
`ー、、___/`"''−‐" �I ( (  ̄ノ `ー-'′\
�D �@  ̄  ̄ \
0610デフォルトの名無しさん
05/01/19 00:47:39加算合成だと、色変わってしまうんでそれ以外でお願いします。
0611デフォルトの名無しさん
05/01/19 23:16:39意味がわからん
「アンチェリ」ってアンチエイリアス(anti-alias)のこと?
0612デフォルトの名無しさん
05/01/19 23:18:400613デフォルトの名無しさん
05/01/19 23:39:370614デフォルトの名無しさん
05/01/20 00:00:13複数の画像を画面の上下に分けて別々に描画したいのですが、どういうやり方があるのでしょうか?
Drawで画像を描画して、Presentで画面の更新をしています。
普通に机と●と△の画像を描画して表示させると
_____________
| _________ |
| \ ● △ ●\ |
| ||\ \|
| ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ |
| || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| |
| .|| || |こうなります。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
自分がやりたいのは上下に分ける(これは左右に分けてますが)
__________
|____|____ |
| △ | ● △|
| | |
| ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
| ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
| ||| | こういう感じです。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0615デフォルトの名無しさん
05/01/20 00:04:360617デフォルトの名無しさん
05/01/20 00:41:41何がしたいのだろうか
0618デフォルトの名無しさん
05/01/20 20:29:13のScaleCenterがうまく機能しないんだけど
ちゃんと動作ができている人いますか?
ScaleCenterの値をどんな値に変更しても
なぜか常に画像の0,0の位置から拡大に・・・
0619デフォルトの名無しさん
05/01/20 22:18:28Presentは一回ですむ
0620デフォルトの名無しさん
05/01/21 09:37:47対戦ロボゲーとかじゃないか?
0621デフォルトの名無しさん
05/01/21 10:26:260622デフォルトの名無しさん
05/01/21 11:36:08誰か助けてください まじで。
0623デフォルトの名無しさん
05/01/21 14:28:510624デフォルトの名無しさん
05/01/21 17:38:350625614
05/01/21 17:46:04ありがとうございます。
>>617>>620
対戦するゲームって大抵画面を分割するから、もし作るとしたらどうなるのかなと思って(・ω・)
Presentを2回する方法だと処理は余裕があるはずなのに動きが遅くなります(2分の1ぐらい)。
描画を2回やるだけなら問題ないのですが。
なのでSetViewportと言うのを調べて使ってみます。
>>621では効率が悪いと書いていますが、他にもあるのでしょうか。
やはり慣れるまではSetViewportを使って、それで処理落ちするようになったら他の方法を探したほうがいいのかな。
0626デフォルトの名無しさん
05/01/21 18:07:430627614
05/01/21 18:20:32CPUフルでやってるのかと(´・ω・`)
0628デフォルトの名無しさん
05/01/21 20:29:000629デフォルトの名無しさん
05/01/21 20:53:28取り敢えずその辺のソースをさらしてみ。
0630デフォルトの名無しさん
05/01/21 21:26:01// トランスフォーム行列を作る
D3DXVECTOR2 Translation( x, y );
D3DXMATRIX mat;
D3DXMatrixTransformation2D( &mat, &( pInfo->ScalingCenter ), 0,
&( pInfo->scale ), &( pInfo->RotationCenter ), pInfo->angle, &Translation );
// トンランスフォームをセットする
m_pSprite->SetTransform( &mat );
// 描画位置
D3DXVECTOR3 Position( 0, 0, z );
// 描画
hr = m_pSprite->Draw( pTexture, &(pInfo->rect), 0, &Position, pInfo->color );
if ( FAILED( hr ) ) {
return false;
}
こんな感じです。
x, y には描画する座標が入ります。
pInfoとは 各情報が格納されている構造のインスタンスです。
( pInfo->ScalingCenter ) と書かれている部分を &D3DXVECTOR2( 64, 64 ) という風に
数値を直接書いても、全く変わりませんでした。
0631デフォルトの名無しさん
05/01/21 21:36:29D3DXSpriteの場合はDrawの引数のpCenterに
ScalingCenterを自己解決しました。
自作Spriteも修正中
0632631
05/01/21 21:44:03自作Spriteは4角形ポリゴンで表示しているため、座標にどのような修正をしたらいいのかが
いまいち分かりません。
処理は
D3DXMatrixTransformation2D で行列をつくって、それを反映させて、
ローカル座標とUV座標を入力、色を入力した4角形座標で
ポリゴンを表示するといった流れでやっています。
0633デフォルトの名無しさん
05/01/21 21:57:01ローカル座標 から 中心座標の値をあらかじめ引いておくことで
ちゃんと中心座標から拡大されるようになりました。
ここにソースを載せて改めて自分で見て、気づいたことだったので
>>630 さんに感謝してます。
ありがとうございました。
0634デフォルトの名無しさん
05/01/21 21:57:56>>630さん じゃなくて >>629 さんでした
0635デフォルトの名無しさん
05/01/24 06:09:20メインのスレッドでデータを補充してストリーム再生を実現させるためにはどのようにすればいいでしょうか?
0636デフォルトの名無しさん
05/01/24 07:54:37処理落ちを考慮して先読みするだけ。
例えば常に2秒先まで補充しておけば問題ない。
0637420
05/01/24 18:51:50DirectInputでゲームパッドを2つ以上で使いたい場合、どこをどうすればいいのでしょうか?
PC[USB]─[コンバーター]─[1P]
└─[2P]
こんな感じに分かれてて、現在1P側にさしたコントローラーだけに反応します。
1P側を差さずに2P側を差しても反応しなかったので、現状のプログラムは1P側のコントローラの情報を取得していると思います。
検索をしたり本を調べてみましたが2Pのことは書かれてませんでした。
出来れば以下のどちらかで、ここをこうしろ!という点がありましたら助言お願いしますorz
ttp://www.geocities.jp/toru_website/di/index.html
Samples\C++\DirectInput\Joystick
0638デフォルトの名無しさん
05/01/24 19:54:240639420
05/01/24 23:16:58>>638
少なくともmsdnは見てますよorz
接続されているジョイパッド1つだけ(1P優先)なら出来ますが、2つ以上接続した際にどうやってコントローラーを入れ替えるのかが分かりません。
変数名1と同じ動作を変数名2にさせてみたら2つ目のコントローラーのデータが取得できるかと思ったらやっぱり1Pでした・・・トポステ..
0640デフォルトの名無しさん
05/01/25 00:36:262つはやったことないが
>>638に書いてある通り
EnumDevicesでスティックを列挙して
コールバック関数でデバイス作ればできるんじゃないのか?
2つ接続したら2回呼ばれるだろうから
そのとき同じLPDIRECTINPUTDEVICEにポインタ入れないようにして
MSDN見てるっていうなら>>638のやり方はやったのか?
0641デフォルトの名無しさん
05/01/25 00:39:300642420
05/01/25 01:00:07SDKのサンプル(Samples\C++\DirectInput\Joystick)でもやっています。
g_pJoystickと同じことをg_pJoystick2でも(ry
もちろんjsもjs2が同じことをしています。
2Pの十字キー(左スティック)の情報が入っていると思っていたjs2.lX js2.lYは1Pですたorz
0643デフォルトの名無しさん
05/01/25 01:22:40質問。
EnumDevicesで指定したコールバック関数は何回呼ばれてる?
0644640
05/01/25 02:19:23はっきり言って書き方からして理解してなさそうな感じがするんだが
自分もそのうちやるかもしれんので試してみた
↓こんな感じでちゃんと2つ取得できた
これでわからんならヘルプなりサイトなりでDirectInput自体をちゃんと理解しれ
LPDIRECTINPUT8 g_pDInput;
LPDIRECTINPUTDEVICE8 g_pDIDevice[2];
INT DeviceCount = 0;
g_pDInput->EnumDevices(DI8DEVCLASS_GAMECTRL,DIEnumDevicesCallback,&DeviceCount,DIEDFL_ALLDEVICES);
BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi,LPVOID DeviceCount)
{
g_pDInput->CreateDevice(lpddi->guidInstance,&g_pDIDevice[(*(int*)DeviceCount)],NULL);
g_pDIDevice[(*(int*)DeviceCount)]->SetDataFormat(&c_dfDIJoystick);
g_pDIDevice[(*(int*)DeviceCount)]->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
(*(int*)DeviceCount)++;
if((*(int*)DeviceCount) == 2)
return DIENUM_STOP;
return DIENUM_CONTINUE;
}
0645420
05/01/25 08:01:07ありがとうございます。
家に帰ってから早速試してみたと思います。
>>643
変数を変えずに(ただのコピーで)2回やってましたがやっぱり1Pでした。
どっかで動作を勘違いしている部分があると思うので、644のプログラムを試してから色々いじってみます(´・ω・`)
0646デフォルトの名無しさん
05/01/25 16:25:14何をどこから手を付けていいか、わからない・・・。
0647デフォルトの名無しさん
05/01/25 16:33:150648デフォルトの名無しさん
05/01/25 18:45:53クォータニオンの積が角度の足し算とか 距離がノルムとか
任意の軸で回転できるとか、なんとなくわかったけど、
それをベクトル(座標)に落とす方法が良くわからんのです。
例として、
v1 に v0 から q角度分3進んだ 座標を入れたいんです。
D3DXVECTOR3v0,v1;
D3DXQUATERNIONq;
v0 = D3DXVECTOR3( ... );//適当な座標
D3DXQuaternionRotationYawPitchRoll(&q,...);//適当にクォータニオン作る
// v1 に 位置v0 から q角度で3進んだ 座標を入れたい。
v1 = v0 + q * 3; //< これじゃ駄目なのです。
↑っぽい式は、どう書けばいいんですか?
行列に変換して行列演算して行列から座標拾うとかで出来そうだけど
本当はそんなんじゃないよね?
あとその場合、計算した行列から位置(Translation?)を取得するのは、
xyz成分 それぞれ mat._41 ,mat._42 ,mat._43 .でいいんですか?
MSのビルボードのサンプルっぽいのがそうやってた。
0649デフォルトの名無しさん
05/01/25 19:07:20v1 = v0 + step;
角度0の時のstepベクトルの値は?
0650420
05/01/25 19:28:01orz
やっぱり1Pのみです。
644のプログラムを試したり、パッドを3つつないでも1Pのみorz
DIJOYSTATE dijs;
g_pDIDevice[0]->GetDeviceState( sizeof(DIJOYSTATE), &dijs );
DIJOYSTATE dijs2;
g_pDIDevice[1]->GetDeviceState( sizeof(DIJOYSTATE), &dijs2 );
dijs.lX
dijs2.lX
出力はこれで別々に出るはずですよね?
エラー判定を入れているけど問題なく通っているし、どこかで1Pの情報を2Pに入れているのだろうか(´・ω::,,...
0651デフォルトの名無しさん
05/01/25 19:34:06クォータニオンはあくまで回転情報なので、
例えば+Z方向を向いてるときをニュートラルだとしたら
クォータニオンを行列に戻して ベクトル(0,0,1)を掛けて
それに距離を掛ければ移動量になるんじゃないかな。
0652デフォルトの名無しさん
05/01/25 19:46:04コールバック関数がちゃんと2回呼ばれてるか
CreateDeviceの戻り値取得してデバイス作成に成功してるか
確認を
データの取得はそれでちゃんと別々にできる
デバイス列挙とか作成あたりどう書いてるんだ
0653420
05/01/25 20:11:21g_lpDIDevice[0]->SetDataFormat( &c_dfDIJoystick );
g_lpDIDevice[1]->SetDataFormat( &c_dfDIJoystick );
g_lpDIDevice[0]->SetCooperativeLevel( g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE );
g_lpDIDevice[1]->SetCooperativeLevel( g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE );
BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* lpddi, LPVOID lpContext )
{
g_lpDI->CreateDevice( lpddi->guidInstance, &g_lpDIDevice[0], NULL );
g_diDevCaps[0].dwSize = sizeof(DIDEVCAPS);
g_lpDIDevice[0]->GetCapabilities( &g_diDevCaps[0] );
g_lpDI->CreateDevice( lpddi->guidInstance, &g_lpDIDevice[1], NULL );
g_diDevCaps[1].dwSize = sizeof(DIDEVCAPS);
g_lpDIDevice[1]->GetCapabilities( &g_diDevCaps[1] );
return DIENUM_STOP;
}
644のプログラムと同じく配列化。
実際は1つ1つにif( FAILED〜)を付けていますがエラーは出ていませんorz
0654420
05/01/25 20:15:040655デフォルトの名無しさん
05/01/25 20:17:580656420
05/01/25 20:21:19ノ( へへ
0657644
05/01/25 20:29:19なんでわざわざ
(*(int*)DeviceCount)
なんていうわけわからんことをやってまで
変数参照してるか考えてください
この場合のデバイスを列挙するというのがどういうことなのかも
0658デフォルトの名無しさん
05/01/25 20:36:04EnumJoysticksCallback( 2Pコントローラ情報, LPVOID lpContext );
・
・
・
(デバイスの数分だけ呼ばれる)
とでも書けば分かるのかな?
0659デフォルトの名無しさん
05/01/25 20:51:040660420
05/01/25 20:58:34DIENUM〜というのが単純にNULLやS_OKなどを返しているのかと思ってました。
659の通りコールバック関数について勉強してみます。
その前に試行錯誤した残骸を隔離するなり処分するなりせねば (;´・ω|
0661デフォルトの名無しさん
05/01/26 02:28:42でも、DirectInputで特定のボタンが押されたときに
SendMessage(hWnd,WM_KEYDOWN,VK_ESCAPE,0);
を実行すると落ちます。なぜでしょうか?
0662デフォルトの名無しさん
05/01/26 02:43:47UPしてくれませんか?
かなり探しましたがどこにもありません。
0663デフォルトの名無しさん
05/01/26 03:09:34うっかりDefWindowProcにもメッセージを渡してるんじゃないか?
>>662
うpろだ用意しる!
0664デフォルトの名無しさん
05/01/26 09:46:08今のSDK(インストール前のパッケージ)には入ってないのかな?
Cマガの2004年1月号収録のSummer2003には7.0から9.0の日本語版が揃ってたよ。
インストール前のExtrasフォルダね。
0665デフォルトの名無しさん
05/01/26 10:58:26ネトゲじゃない普通のでもフリーウェアとかでも同じです。
0666デフォルトの名無しさん
05/01/26 11:51:01まずはHDDをフォーマットせよ。
0667デフォルトの名無しさん
05/01/26 12:49:07そんなことがあるのか。
なるほど、そういう症状が出たら俺も気をつけよう。
0668デフォルトの名無しさん
05/01/26 15:58:27ええと何だったっけな
ウィルスや、スパイウェアとかじゃ無いんだけど、そういうのあるのよ
ある意味スパイウェアだけど
0669665
05/01/26 16:14:00DirectXの中に何かそういうのがあるのでしょうか?
普通にWinAPIだけで作ったものは動かしても何もないのに、
たとえばDirectDrawで作っただけでも動かすとネットにつなげようとします。
DirectPlayとか使ってるならわかるのですが・・・。
ノートンとかで遮断すれば済む話なんですが、
配布して遊んでくれた人から「これ何してんだ?」というメールをもらいます。
知らない人からみればパソコンから何か情報盗んでるみたいで不快です。
なにか設定とかプログラム側で対処できないでしょうか?
0670デフォルトの名無しさん
05/01/26 19:58:59OS入れ直す
一度もネットに繋げないままで
新たにプロジェクト作ってソースをコピペしてコンパイルまでやる
これで同じようなことするexeができたらお手上げ
0671デフォルトの名無しさん
05/01/26 21:10:420672デフォルトの名無しさん
05/01/26 22:39:16いや確かランタイム側の話なんで、OS再インスコや、新たにプロジェクト云々はやっても意味無いよ。
0673665
05/01/26 22:53:14新規インストールした3つのパソコンで確認しましたが、
何れもネットにつなげようとしました。
(2000+7a、2000+8.1、XP+9c)
>>672
なるほどDirectXランタイム側の問題なんですか。
そうすると諦めるしかないんでしょうかね。
0674デフォルトの名無しさん
05/01/27 01:03:480675デフォルトの名無しさん
05/01/27 01:18:220676デフォルトの名無しさん
05/01/27 04:51:41サーバー動作制限部分にヒットしている気がする。
0677デフォルトの名無しさん
05/01/27 09:54:06Microsoft(US)につないでいるようです。
>crl.microsoft.com
>CryptRetrieveObjectByUrl::InetSchemeProvider
>MC1=GUID=xxxxxxxxxxxxxxxxx&HASH=xxxx&LV=xxxxx&V=x
こういったものを送信したあと、
>Microsoft-IIS/6.0
>Microsoft Windows Hardware Compatibility
>数字の羅列のあと文字化けが続く
こういうのを受信してました。
ハードウェア コンパチビリティ(?)ということは、
何か互換をとるために情報を送受信しているんですかね。
0678デフォルトの名無しさん
05/01/27 10:28:590679デフォルトの名無しさん
05/01/27 11:27:06BOOL と NULL って使われているんですがこれって
bool と 0 じゃいけないんですかね?
誰か詳しく教えてくださいませ
0680デフォルトの名無しさん
05/01/27 11:41:090681デフォルトの名無しさん
05/01/27 12:14:52ポインタでないところはNULLより0がいい。ハンドルのときどうするかは微妙だけど。
0682デフォルトの名無しさん
05/01/27 12:26:184バイトのやりとりするのにboolにしちゃうのはなぜ?
0683デフォルトの名無しさん
05/01/27 13:16:01SDKでBOOLって書かれてるものは、自分のコードでもBOOLにしといた方がいいよ。
「実は一緒でしょ?」みたいな不要な仮定をしてもそんなにメリットないから。
GetMessageのように BOOL 型で 0, -1, それ以外、と3種の値を返すものもあるし。
NULLも同様だけど、これは0でも良いと思う。
0684デフォルトの名無しさん
05/01/27 20:34:34ありがとうございます
0685デフォルトの名無しさん
05/01/27 21:13:350686デフォルトの名無しさん
05/01/27 22:07:14ポインタでないところはNULLより0 って
ポインタだから NULL と 0 の問題になっているんだけど
どういうことだろう
0687デフォルトの名無しさん
05/01/27 22:19:36定数を直接書かないなんてことは大原則だろ。これすら守れないような
ひとはパソコン捨てて田舎に帰ってください。
0688デフォルトの名無しさん
05/01/27 22:34:18漏れはポインタに変換される 0 と、
物の個数が0であることをあらわす 0 と、
インデックスのベース値の 0 は定数でも直接書いてるな。
そうしない奴はプログラマとしての適正ないと思う。私見だけど。
0689デフォルトの名無しさん
05/01/27 23:15:32NULLが0なのは仕様ですけど
なんでわざわざ0って書くの?
0690デフォルトの名無しさん
05/01/27 23:17:12楽だから
0691デフォルトの名無しさん
05/01/27 23:19:57http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
0692デフォルトの名無しさん
05/01/27 23:23:05気分。
その日の湿度とか、朝のウンコの快便具合でも変わったりする。
0693デフォルトの名無しさん
05/01/27 23:48:40http://www.cmagazine.jp/src/kinjite/c/null.html
0694デフォルトの名無しさん
05/01/27 23:56:290695デフォルトの名無しさん
05/01/28 00:05:18例えNULLを0と書いても100%問題がおきなかったとしても
視認性とか可読性を考えてNULLと書く
ということをしないようなプログラマはダメだと思います
絶対にバグを出さない天才プログラマで
全て一人でやるか同レベルの天才としか分担作業をしない
なら話は別ですが
0696デフォルトの名無しさん
05/01/28 00:21:260697デフォルトの名無しさん
05/01/28 00:57:38NULLはめんどうだが、可読性のためと。
0698デフォルトの名無しさん
05/01/28 01:05:47可読性を重視したほうがいい
0699デフォルトの名無しさん
05/01/28 09:11:02ハンガリアンと同じで面倒なだけに感じるのだが
0700デフォルトの名無しさん
05/01/28 12:52:37Win32 のハンドルとかに代入するときは NULL って書くけど、
C++ の普通のクラスへのポインタの場合、
例えば Foo* pFoo = NULL; ってのは強烈に違和感あるなぁ。
Cじゃないんだからさ。
あと>>687みたいな人は、例えば配列にアクセスするときに
for (int i = 0; i < num; i++) ...; じゃなくて、
for (int i = ARRAY_BASE; i < num; i++) ...; とか書くの?
ビットシフトさせたいときは d <<= ONE; とか?
下4ビット取り出すときは d & MASK_LOWER_4BITS とか?
かえって可読性下がると思うが。
0701デフォルトの名無しさん
05/01/28 12:56:02書かれている場合には、何も考えずおとなしく NULL を使う。
そうでない場合、ポインタならC++の標準規格に基づいて 0 を使う。
単なる整数の場合、自分で仕様を決めてその通りに記述する。
疑問の生じる余地はないと思う。
0702デフォルトの名無しさん
05/01/28 14:58:05>for (int i = 0; i < num; i++) ...; じゃなくて、
>for (int i = ARRAY_BASE; i < num; i++) ...; とか書くの?
>ビットシフトさせたいときは d <<= ONE; とか?
>下4ビット取り出すときは d & MASK_LOWER_4BITS とか?
お前はバカのオーバースペックそしてバカのレッドゾーン軽やかにマッハバカ
0703デフォルトの名無しさん
05/01/28 15:12:49文脈にもよるがi=0は使いたくないなぁ。
0704デフォルトの名無しさん
05/01/28 15:20:24ソフトがフリーであったら教えてください。
0705677
05/01/28 15:22:56www.vector.co.jp/soft/winnt/net/se308001.html
0706デフォルトの名無しさん
05/01/28 15:30:03Ethereal
0707デフォルトの名無しさん
05/01/28 21:42:50面倒なので
#define nil NULL
を上に追加
0708デフォルトの名無しさん
05/01/28 22:02:470709デフォルトの名無しさん
05/01/29 02:48:19バウンディングボックスの体積と比較してみたいのです。
0710デフォルトの名無しさん
05/01/29 03:14:290711デフォルトの名無しさん
05/01/29 06:23:260712デフォルトの名無しさん
05/01/29 07:40:19ここはDirectXスレだが。
DXTaisekiKeisan関数があるとでも思ったのか。
0713デフォルトの名無しさん
05/01/29 11:15:170714デフォルトの名無しさん
05/01/29 11:59:06http://pc5.2ch.net/test/read.cgi/gamedev/1021171809/
0715デフォルトの名無しさん
05/01/29 13:47:35今までハッキリ表示されていた、文字やスプライトの底辺がすこしにじんだ感じになります
描画位置によって上ににじみがでたり場所が変わります
またフルスクリーンにすると、直っていますが、ウィンドウモードにすると
なぜかまたにじんでいます
SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_NONE );
SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_NONE );
上記の設定を行いましたが、変化がなかったため違う問題のようです
この原因がなにか分かる方いないでしょうか?
0716デフォルトの名無しさん
05/01/29 13:48:57あとは凸多角形の面積を求める方法が使えるんじゃなかろうか
とか言ってみる
でもメッシュの凹凸判定ってどうやるんだろー
0717デフォルトの名無しさん
05/01/29 13:58:510718デフォルトの名無しさん
05/01/29 14:22:160719デフォルトの名無しさん
05/01/29 14:29:53GetClientRectで調べてみたら、確かに違いました
早とちりしてしまった
ありがとうございます
0720デフォルトの名無しさん
05/01/29 17:05:45三頂点と面法線を内積して隣接する辺のベクトルと比較すれば簡単じゃん。
0721デフォルトの名無しさん
05/01/30 01:38:25データの取得前に必ず実行するようにしたらだめですか?
(1ループに1回)
やねうらお氏のサイトで
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp40to47.html
WM_ACTIVATEAPPを見て、AcquireとUnacquireしなさいとか
書いている本も多々あるが、そんなものは真っ赤な嘘である。
って書いてあったので、どうせなら毎回やればいいやと
思ったんですが、誰か教えて下さい。
0722デフォルトの名無しさん
05/01/30 03:41:15パフォーマンス的に問題がなければOKかと
0723デフォルトの名無しさん
05/01/30 12:43:18自分で画像を作成して使うのってどっちが実用的ですか?
フォント描画だと楽だけど重くなりそうですが…
0724デフォルトの名無しさん
05/01/30 13:03:34自分でフォントにグラデーションかけたほうがいい。
高速化としては、まずはグラデーション用のBMPを読み込んでおき、
下地としてフォントの文字がある部分を白に背景を黒にして文字を描き、
白か黒の部分をマスクにして先ほどのBMPを貼り付けていく。
これで簡単にグラデーションのフォントが完成。
貼り付けるBMPを他の模様などにすれば応用も楽。
0725デフォルトの名無しさん
05/01/30 13:26:37描画すらさせてもらえなくなった・・・。
0726デフォルトの名無しさん
05/01/30 16:18:27ありがとうございます。
フォント関連は放置気味だったんですが、試してみます。
0727デフォルトの名無しさん
05/01/30 21:23:17lock&unlock
0728デフォルトの名無しさん
05/01/31 01:11:55上記のマクロの意味が分かる方いませんか?
DirectInputでのキーの番号付のようなものらしいです。
0->field がNULLポインタを参照にしているのになぜエラーにならないだろうと
そんな疑問を感じるんですが、どうなんでしょうか。
0729デフォルトの名無しさん
05/01/31 01:33:19アドレスを計算しているだけでアクセスするわけではないので鰓はでない。
0730デフォルトの名無しさん
05/01/31 02:10:50ありがとうございます
オオなるほど そういう処理がされているんですか
->って違う使い方もできたんですね
う〜むC++は奥が深い・・・
結構勉強していたつもりでもまだまだだなぁと感じました
MSヘッダは知らない処理だらけだしorz
0731デフォルトの名無しさん
05/01/31 02:43:48揚げ足気味だが、それはC++ではない。Cの構文だ。
0732デフォルトの名無しさん
05/02/04 00:20:20uuid.lib(unknwn_i.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください
っていうエラーがでました
VC6 と WindowsXP 使ってます
原因分かる方教えてください
0733デフォルトの名無しさん
05/02/04 00:25:29それがイヤなら2004を窓k(ry
0734デフォルトの名無しさん
05/02/04 00:39:26October は VC6に対応しているらしいんですよ
なぜかなぁ〜
Extrasの中にあるVC6用のファイル上書き保存したのに
0735デフォルトの名無しさん
05/02/04 01:44:04XPSP2 用の PlatformSDK に問題があるようなことを外国のサイトで発見したけど
どうやって解決すればいいかわからない。。
でも日本でこの問題がでていないってことは、
何か間違ってることしてるのかな。。
0736デフォルトの名無しさん
05/02/04 03:30:18VC6 に元からある uuid.lib を(一応バックうpしてから)上書きして使うのが無難。
0737デフォルトの名無しさん
05/02/04 14:02:20さすがに上書きはまずいと思うよw
platformSDK使う他のプログラムが動かなくなるし
で、libが重複してしまっているから、試しにプロジェクトのパスからplatformSDKのlibフォルダを
はずしたら、なんと・・・・うまくいきました
パスはincludeだけでいいみたいでした
解決ヽ(´ー`)ノ
0738デフォルトの名無しさん
05/02/04 23:26:30デバッグとリテールの選択の余地ないの?
0739デフォルトの名無しさん
05/02/04 23:28:370740デフォルトの名無しさん
05/02/04 23:34:56コントロールパネルにも無いので、
system32のそれらしいファイル探してた。
でもわかんない。
0741デフォルトの名無しさん
05/02/04 23:37:55SDKに付属のランタイム入れるときだけなんですか?
0742デフォルトの名無しさん
05/02/04 23:42:420743デフォルトの名無しさん
05/02/04 23:44:390744デフォルトの名無しさん
05/02/04 23:50:170745デフォルトの名無しさん
05/02/05 00:06:43すみませんでした。
でもカスとか簡単に人に言えるような人間にはなりたくないです。
0746デフォルトの名無しさん
05/02/06 15:50:500747デフォルトの名無しさん
05/02/07 16:06:37解説サイトとかはDirectX8以前を扱っているものがほとんどで、上手くコンパイル出来ないし…
MSDNのサンプルとかを理解できる能力がないと無理なのでしょうか?
0748デフォルトの名無しさん
05/02/07 16:26:570749デフォルトの名無しさん
05/02/07 16:51:16こんな良いものがあったとは…
取り敢えずウィンドウの作成やってみます
0750デフォルトの名無しさん
05/02/08 02:23:460751デフォルトの名無しさん
05/02/08 13:06:58新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。
0752デフォルトの名無しさん
05/02/08 13:08:35新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。
0753デフォルトの名無しさん
05/02/08 13:12:190754752
05/02/08 13:14:020755デフォルトの名無しさん
05/02/08 13:22:340756デフォルトの名無しさん
05/02/08 14:37:53スレ違いというか DirectX関連の質問なんだから答えてあげりゃいいじゃんよ
わからないんだったらしょうがないが
>>751
新しいDirectXから古いDirectXに戻ることはできないよ
でも新しいDirectXには古いDirectXが入っている
通常ゲームでは決められたバージョンが使用されているので、
DirectX8でゲームができたならDirectX9.0cを入れても
動作は変わらないはず
問題がありそうなところは、ディスプレイの解像度の設定
ゲームがフルスクリーンだと思われるので、そのときの解像度に
設定してみて、画面がはみでるかたしかめるのがいいと思う
0757デフォルトの名無しさん
05/02/08 20:25:330758デフォルトの名無しさん
05/02/08 21:07:45IDirectSound8 から取得することってできないんですか?
Music と Sound を共存させる方法がよくわかりません
0759デフォルトの名無しさん
05/02/09 08:36:25>IDirectSound8 から取得することってできないんですか?
ヘルプに書いてあるでしょ。
>Music と Sound を共存させる方法がよくわかりません
そのまま使えば共存できるでしょ。
0760デフォルトの名無しさん
05/02/09 17:00:21CSSから呼び出せるDirectX Transformを作ろうとしてます。
<body style="filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=50);">
みたいに使うやつです。
で、とりあえず動くものはできたんですが、上の例でいうOpacity=50みたいに
引数を渡す場合の、トランスフォーム側での値の取得の仕方が分かりません。
詳しい方ご教示下さい。
0761デフォルトの名無しさん
05/02/10 02:35:58Longhornが割と早く出てくるとか。
WGFに早く乗り換えたい。
0762デフォルトの名無しさん
05/02/10 14:53:57いやできないんどすよ?
でなければInitAudioの引数の意味がないんですが。
0763デフォルトの名無しさん
05/02/10 15:39:540764752
05/02/10 16:10:55丁寧なレスありがとうございます。
解像度を設定しなおしてもやはりはみ出るので、ディスプレイの水平方向の設定を変えたところ、
最も見たかった部分はなんとか画面の中に収まるようになりました。
スレ違いなのに回答してくださってありがとうございました。
0765デフォルトの名無しさん
05/02/10 20:28:24どうすればいいのでしょうか?
正方形のポリゴンを構成するは4点全てz = 0です。
x,y = (-1,-1), (1, -1), (-1, 1), (1, 1)
1. 4点を任意の位置に平行移動させる
2. 4点にViewの逆行列を掛ける
3. 描画 (DrawPrimitive)
としてみたのですが、うまく行きませんでした。
0766765
05/02/10 21:01:451. 4点に逆行列を掛ける
2. 4点のxyzそれぞれに視点の座標xyzを引く
3. 4点を任意の位置に平行移動
4. 描画
で解決しました。
0767142
05/02/10 22:15:590768デフォルトの名無しさん
05/02/11 04:02:04どうやったらWaveでもOggでも利用できるスレッド管理を作れるのか
わかりません
もう・・ストリーミング疲れてきた・・・助けて・・・(;´Д`)
0769デフォルトの名無しさん
05/02/11 07:40:16で き な い な ら あ き ら め れ ば
0770デフォルトの名無しさん
05/02/11 09:17:53自分の実装したコードで気に入らない部分を具体的に列挙せよ。
0771デフォルトの名無しさん
05/02/11 10:43:46してねーだろ サンプルほしいっていってるだけだっつの。
参考にするだけ
0772デフォルトの名無しさん
05/02/11 11:38:380773デフォルトの名無しさん
05/02/11 11:50:11結果的に同じだろ…アフォか
0774デフォルトの名無しさん
05/02/11 13:01:45今までずっとパクってきたからそうなるんだよ
自分のことプログラマって思ってるんだろうけど
おまえさんはキーパンチャー
0775デフォルトの名無しさん
05/02/11 16:47:120776デフォルトの名無しさん
05/02/11 18:05:230777デフォルトの名無しさん
05/02/11 18:19:043Dのフライトシューティングを作っているのですが、空と地面の描画(表現の仕方)についてアドバイスをお願いします。
地面についてですが、とりあえず全て平ら(又は水面)を表示してみようと思います。
現在1万x1万の四角形のポリゴンを10x10分用意して、2DのRPGのマップみたいに表示しています。
□□□
□□□ こんな感じです
□□□
高度0なら特に問題はありませんが、高高度では地面の端が見えてしまいます。
次に空についてですが、半球の内側に青色のテクスチャを貼り付けると言うのをやってみました。
半球が小さいと閉塞感があり、逆に大きいと処理が・・・。
2つともある程度の距離感があり、地面は距離が離れていても広範囲が見渡せるようなテクニックがあればアドバイスをお願いします。
検索したり本屋にいったりして調べてみましたが、この手の解説をしているところがさっぱり。
やはりほとんど限りない空間を動き回るようなゲームは難しいのでしょうか。
0778デフォルトの名無しさん
05/02/11 18:24:180779デフォルトの名無しさん
05/02/11 18:36:03FF11はマップ別にフィールドがあるけど
話によるとドラクエ8は 世界がすべて同じ空間上にあるらしい
(洞窟などは別として)
なのでできない問題ではないみたいですね
処理としてはやっぱり マップを複数のチップで構成して
視点の位置からRだけ離れている範囲のみを表示するといった感じに作り、
なおかつフォグでぼやかせれば うまくいくんじゃないかと。
0780777
05/02/11 18:38:48霧が濃いステージという設定なら有効かもしれませんが・・・。
0781デフォルトの名無しさん
05/02/11 18:53:34それはフォグを調整すればいいだけだし・・・・・・・。
0782デフォルトの名無しさん
05/02/11 19:44:48フォグとカメラのfovyあたりを調整しる
このあたりのパラメータの設定はテクニックじゃなくて
感性の問題になってくると思われ
被写界深度なんかはこの場合効果なさそうだな
0783777
05/02/11 19:50:05微調整を繰り返しましたがやはり高高度での遠方(地面)が見えないのですが、これは性能上の問題なのである程度は我慢するしかなさそうですね。
あとは空の描画なのですが、真上が青で地平線近くが水色のグラデーションをかけたいです。
これは半球のポリゴンに画像を貼り付けて〜といった形じゃなさそうなのですがこれでいいのでしょうか?
いいのでしょうか?って期待した結果は得られてませんが。。
0784デフォルトの名無しさん
05/02/11 20:00:19自分で返答していてなんだけど、結局2chで質問しても
まともな技術持った人のアドバイスじゃないからハッキリ言って役に立たないと思うよ
ここで質問してずいぶん論議よんだ内容が、MicrosoftのDirectXのページいって
すぐに解決したことがあったし
誰かを蹴落とすような言い方しかできないやつや、自分の力を誇示したい輩の
下手なアドバイスくらうよりは、本とかまともなWEBサイトみたほうがいいと思われ
おもしろ半分で書き込んでみるとそれなりに、にぎわって楽しいかもしれないけどw
0785デフォルトの名無しさん
05/02/11 20:19:15手法的なことは2chのが参考になると思う
0786777
05/02/11 20:43:00でもここに来るのは最終手段ですが。
0787デフォルトの名無しさん
05/02/11 20:44:54グラデーションがかかるように頂点カラー設定しる
0788デフォルトの名無しさん
05/02/11 21:07:43{ 0.0, Pos.y+100000.0, 0.0, 0xff0000ff },
{ 0.0, 0.0, Pos.z+100000.0, 0xffaaaaff },
{ Pos.x+100000.0, 0.0, 0.0, 0xffaaaaff },
以下略
まだ試してないけど処理落ちしそうなんですが
0789デフォルトの名無しさん
05/02/11 21:21:040790デフォルトの名無しさん
05/02/11 21:24:280791デフォルトの名無しさん
05/02/11 21:24:53ttp://www.geocities.co.jp/playtown/2004/psx/hw1f80j.htm
0792デフォルトの名無しさん
05/02/11 21:35:23頂点バッファ使ってないの?
まぁ処理オチが気になってから頂点バッファを使うように変更してもいいと思う
0793デフォルトの名無しさん
05/02/11 21:42:51BBX荒らされてるしMS公式はネイティブの質問不可能だから
今はここしか質問するところがない。
0794デフォルトの名無しさん
05/02/11 21:46:56| ヤンマーニ! | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
|__| ̄ ̄ ̄ ̄ ̄ ̄ ̄|マーニ! |
∧| ヤンマーニ! |____| ̄ ̄ ̄ ̄ ̄ ̄ ̄| ぞろぞろ・・・・・
. . ( ゚ |_______|. || | ヤンマーニ! |
/ づΦ∧∧ || ( ゚д゚)|| |_______|ぞろぞろ・・・・・
. ( ゚д゚)|| / づΦ ∧∧ ||
 ̄ ̄ ̄| / づΦ ぞろぞろ・・・・・ ( ゚д゚)|| | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
ー| ̄ ̄ ̄ ̄ ̄ ̄ ̄| / づΦ . | ヤンマーニ! |
_| ヤンマーニ! | | ̄ ̄ ̄ ̄ ̄ ̄ ̄| |_______|
|_______| | ヤンマーニ! | ∧∧ ||
. ∧∧ || . |_______| . ( ゚д゚)||
( ゚д゚)|| . ∧∧ || / づΦ
/ づΦ ( ゚д゚)||
ぞろぞろ・・・・・ / づΦ
0795デフォルトの名無しさん
05/02/11 21:47:590796777
05/02/11 22:04:14頂点バッファを直接使う機会がなかったから全てXファイルからのポリゴンでした。
頂点バッファを直接使うのってあまり重くならないのでしょうか。
・・・地面を描画する前に空を描画しちゃえば10万離れた位置に描画しなくてもよかったか('A`)
0797デフォルトの名無しさん
05/02/11 22:13:18あぁD3DXMesh(だっけ?)使ってんのか
じゃ内部で頂点バッファつかってると思う
気にスンナ
それよりたしかMesh内部の頂点バッファをロックしてアクセスできたはずだから
ロックして、そこで頂点カラーを書き換えた方がいい
計算でちょちょいとできるし
最大の高さ(Y座標) maxH
最小の高さ(Y座標) minH
maxHでの色 maxC
minHでの色 minC
として、書き換えたい頂点のY座標をHとした場合
その頂点の頂点カラーCは
range = maxH - minH
h = (H - minH) / range
C = (maxC - minC) * h + minC
みたいな感じで
これそのままソースに書くなよ
あくまでも考え方として式を書いてるだけだから
まぁやりかたがよくわからんかったら空のメッシュだけライトの設定を変えたり、
テクスチャで色つけたり、マルチテクスチャでグラデ専用のテクスチャ重ねて張ったり
方法はいくらでもある
自分のできる方法でやればいい
0798777
05/02/11 22:32:52ありがとうございます。
その頂点の座標は
・
・ ・
|\___
・ .└―――` ・ (自分がやっている方法)
・ ・ こうではなく
・
・
|\___
.└―――` ・
・
・ こういうことでしょうか?
自分がやっているのは乳首が常に上にありますが、797の方法では期待(視点)の前方に乳首がある。
んでその高さにあわせて各頂点の色を変化させていく。
0799797
05/02/11 22:46:32まぁメッシュの形が何であれ縦にグラデを入れる計算なんだが
・ <- Y座標maxH 色maxC
・ ・
|\___
・ .└―――` ・
・ ・ <- Y座標minH 色minC
まぁこう指定するるんだが
0800777
05/02/11 22:51:26了解です〜
0801デフォルトの名無しさん
05/02/11 22:58:02そうそうw
ちゃんと書いてなかった漏れも悪かた
0802デフォルトの名無しさん
05/02/12 17:23:48クリアするのはZとステンシルバッファのみにして、
Zバッファ無効で最初に描く。
これで少しスピードアップ。
0803777
05/02/12 19:33:17SDKのDirect3Dサンプルで400fpsやものによっては2000fpsを突破しているんですが、
自分のはせいぜい60fpsを維持するのが精一杯で・・・どうやればここまで高速化できるのかt
70個の小さなスプライトの表示だけなのに窓モードで60fpsから50fpsに落ちたり・・
0804デフォルトの名無しさん
05/02/12 19:42:53最初はあまり気にするな
ずぶの初心者が作ったものがプロの作ったサンプルと同じように動作するわけがないんだから
自分なりにやっていきながら、たまにはヘルプよんだり、ネットに落ちている
ソースコードつきのサンプルを眺めたり、SDKサンプルのソース読んだりしながら
少しずつテクニックを上乗せしていけばいいだけ
0805デフォルトの名無しさん
05/02/12 20:00:17>60fpsから50fpsに落ちたり・・
どれは同期とってるからでは?
0806デフォルトの名無しさん
05/02/12 20:07:120807デフォルトの名無しさん
05/02/12 20:14:03PresentationIntervalメンバだよん。
0808デフォルトの名無しさん
05/02/12 20:26:09ありがとうございます。
でもVSYNCを無視しても60〜65fps(ノ∀`)
0809デフォルトの名無しさん
05/02/12 20:36:58・・・・・・・・・・・・・・・・・・・・。
0810デフォルトの名無しさん
05/02/12 21:15:520811デフォルトの名無しさん
05/02/12 21:35:170812デフォルトの名無しさん
05/02/12 21:56:03サンプルが窓モードだと強制的に
D3DPRESENT_INTERVAL_IMMEDIATE
にしてただけだった。
0813デフォルトの名無しさん
05/02/12 22:09:21400fpsとか2000fpsは理論値なんで、実際にそのスピードで
描画してるわけじゃない。
モニタのリフレッシュレート以上には描画できないよ。
天空を最初にZバッファ無効で描画すると、ファープレーンを
遠くに設定しなくてすむので、Zバッファの精度も良くなる。
GeForce系はZバッファの精度がイマイチだしね。
0814デフォルトの名無しさん
05/02/13 00:09:46>400fpsとか2000fpsは理論値なんで、実際にそのスピードで
いや、そう設定すればそう動かすこともできるじゃんw
とか、言わなくていい場面であえて言って混乱するのを狙ってみる鬼。
0815777
05/02/13 01:29:46見なきゃ良かったorz
Zバッファを有効にした状態で、座標を変えたり視点を変えたりして
SetMaterial・SetTexture・DrawSubsetをやっています。
(あと光の設定)
遠くに行こうが画面外に行こうが特別な処理をしていないのが重い原因・・?
ステンシルバッファについては使ったことが無いから今猛勉強中ですが、
1つの点に対して2重以上の描画をしないようにする手段の1つとして考えていいのでしょうか。
視覚的には何も変わらないが、余分な描画をしない分早い、と。
0816デフォルトの名無しさん
05/02/13 01:56:45ステンシルバッファは現状のキミの目的からすると、使わなくていいんでは。
まずはZバッファの有効無効と、クリッピングプレーンの調整をするのが良い。
0817777
05/02/13 02:02:400818デフォルトの名無しさん
05/02/13 02:27:51遅くなる原因としては、
・70個ばらばらにDrawしている
・余計なレンダーステートの変更をしている
・DirectXがデバッグモード
・VCのビルドがデバッグモード
なんてゆーのが考えられます。
まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。
0819デフォルトの名無しさん
05/02/13 02:46:30これ結構ありえるよなー
0820777
05/02/13 03:00:14アチャ━━━━(ノ∀`)━━━━!!!!
目がつぶれてきたので後日後日。
9.0bでDrawは(画像 , rect , Scale , 回転の中心 , 回転の度合い , 描画位置 , ARGB)ですが、9.0cでは何か変わったのかな?
DrawPrimitiveUPが9.0bの形で使えればいいのですが。
0821デフォルトの名無しさん
05/02/13 03:54:091.2Dのゲームを作ろうとしている場合でもDirectX9.0ベースで考えるべきなのでしょうか。
それともDirectX7.0のライブラリを使ってDirectDrawを使用すべきなのでしょうか?
2.良い参考書はありますか? 店頭ではI/O別冊が目立ちますが、どうも内容が薄いようです。
オンラインは調べ物にはいいですが、読み物としては最悪なので紙ベースの資料(日本語)が欲しいのです。
0822デフォルトの名無しさん
05/02/13 04:41:431.Direct3Dの方が主流だから書籍とか情報源が多い。
今からわざわざDirectDraw使う必要は無いと思う。
2.王道的にDirectXのヘルプのチュートリアルで
デバイス作成から一つずつ地道に。
と大衆的意見(推測)。
0823デフォルトの名無しさん
05/02/13 04:47:30>それともDirectX7.0のライブラリを使ってDirectDrawを使用すべきなのでしょうか?
DirectX9(というか8以降)ではポリゴンを使うことになるが2Dの表現は可能
ということで必ずしも2Dをやる=DirectDrawという図式にはならない
>店頭ではI/O別冊が目立ちますが、どうも内容が薄いようです。
おそらく「DirectX9実践プログラミング」あたりのことと思われるが、たしかにこれは内容が薄い
I/O別冊でもDirectX Graphicsのみを取り扱ったものがあった気がしたのだが忘れた
お勧めできる書籍がぱっとでないため、書籍選びの際のアドバイスだけ
DirectXが初めてなら
・Graphicsの比重の高い書籍
・頂点バッファ(VertexBuffer)とインデックスバッファ(IndexBuffer)の説明がある
・できれば頂点シェーダ、ピクセルシェーダの説明あり
・2Dの表示方法も説明されている、ただしD3DXSPRITEをつかわない方法の説明があること
Xファイルの表示に関してはあってもなくてもいい
とりあえずこのあたりを基準が満たされていると最初のハードルは楽に越えられるはず
しかし本選びに時間がかかって、いつまでも開始できないのは本末転倒なので
ある程度探してなければ妥協してI/O別冊でもいいのではじめた方がいい
DirectXの学習を始める前に必要な確認は自分の学習環境のPCのOS、グラボが
これから学習するバージョンのDirectXに対応できているかどうか
DirectX9なら推奨環境は、OSはWindowsXP、グラボはVertex/PixelShader 2.0対応
>822
漏れはちょっと意見が違う
ずぶの初心者はチュートリアルの前、もしくは平行して初心者向けの書籍を読んだほうが学習効率がいいと思う
0824デフォルトの名無しさん
05/02/13 05:31:35洋書だがManagedDirectX0KickStart。 samspublishingからです。
0825デフォルトの名無しさん
05/02/13 05:35:22もちろん他の情報源も必要ということが前提。
0826デフォルトの名無しさん
05/02/13 05:36:240827デフォルトの名無しさん
05/02/13 05:43:09極限まで簡略化してて学びやすいし分かりやすい。
んで、Tutorialを全部見終わってからレベルに見合った
本を買っていけばいいと思う。
0828デフォルトの名無しさん
05/02/13 06:59:560829デフォルトの名無しさん
05/02/13 10:27:19http://pc5.2ch.net/test/read.cgi/gamedev/1005469181/
0830821
05/02/13 12:06:27>>822,825
確かにDirect3Dを使った方が回転とか出来て便利みたいですね。
チュートリアルはやってみます。
>>823
DirectX9実践プログラミングだったと思います。
ひとまず、DirectGraphics主体の本を店頭で探してみようと思います。
環境周りはちょっと微妙です。Windows2000+FX5200だから・・・。
次のハード更新はPCI Expressの動向を見極めて、M/Bから一括で更新を、と思ってるんです。
>>824
これですね。
ttp://www.amazon.co.jp/exec/obidos/ASIN/0672325969/qid%3D1108263256/250-2922171-9128251
内容は分かりやすそうですね。Laoxザコンや三省堂本店で手に入らなければ、
立ち読みせずに取り寄せかamazonでいきなり購入、になってしまうのが難点ですが、検討してみます。
>>827
チュートリアルを最初にやってみようと思いますが、書籍も脇に一冊置こうと思います。
オンラインとは違って、必要なところにマークしたり出来て便利なので・・・。
>>828
当然そうだとは思いますが、HelloWorldの延長のつもりでやってみます。
>>829
便利なライブラリのようですね。
0831821
05/02/13 12:09:00>>829
便利なライブラリは急いで成果を上げる際には良いのですが、
理解を深めるのにはあまり向かないと思うので、
他のプラットフォームを意識する必要が出てきてから
汎用的な機能を切り出すよう考えてみて、その上でライブラリの適用を考えたいと思います。
0832デフォルトの名無しさん
05/02/13 12:35:57まず最初に三次元空間と3DCGの基礎理論を知っておいたほうが
いいんではないだろうか。いきなりカメラ座標が〜とか、
視野が〜とか言われてもワケわからんと思う。基礎を知ってると、
ヘルプのチュートリアルは分かりやすい。
本のオススメは、DirectX9シェーダプログラミングブック。
シェーダの本だけど、前半1/3くらいはDirect3D基礎と数学理論。
結構丁寧に書かれている。
0833821
05/02/13 12:51:11カメラや照明の考え方は、3DCGツールを使っていた関係で大丈夫かな、と思います。
数学理論ですが・・・
ベクトルや行列なら問題無いですが、統計の概念が入ってくると辛いかもしれません。
ゲームを作るのが目的なのに、単純なレイトレーシングでどうにかなる物じゃないですしねえ。
0834デフォルトの名無しさん
05/02/13 16:17:572DだとスプライトをDrawPrimitiveでうまくまとめるならいいけど個別に
DrawするならDirectXじゃなくてOpenGLのほうがいいかも。
DirectXはドライバモデルが不出来でDrawにもの凄くオーバーヘッドがある。
だけどOpenGLはビデオカードメーカーがチューンし易いのでかなり高速。
DirectXではこの問題を解決するためにインスタンシングを付けたけど
nVidiaによればOpenGLはこの様な仕組みに頼らなくても高速らしい。
なのでOpenGLとキー入力やサウンド用にSDLを組み合わせるのがお勧めかも。
0835777
05/02/13 16:49:23複数のスプライト画像を同時に表示させる場合は、
ここ(ttp://miiko0909.hp.infoseek.co.jp/program/directx/directgraphics/FVF/directgraphics_03.html)のサンプルだと
2次元配列にして
lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,&v[0],sizeof(VERTEX));
lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,&v[1],sizeof(VERTEX));
:
としないといけないのでしょうか?
あとDrawPrimitiveUPで透過色の指定の方法がどこのサイトにも書かれていないのですが、他に方法があるのでしょうか?
Drawを使っている現状ではD3DXCreateTextureFromFileExのカラーキーで指定しています(結果はpTextureに)。
0836デフォルトの名無しさん
05/02/13 16:56:373Dには透過色の概念がない。アルファチャネルを使う。
ところで、ID3DXSpriteを使う方法はどうだい?
0837777
05/02/13 17:18:06それだと元に戻ってるのでは。
>>818の
> ・70個ばらばらにDrawしている
>まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。
という理由からDrawPrimitiveUPを使おうとしているので。
0838デフォルトの名無しさん
05/02/13 17:32:40☆3.DrawPrimitiveUPで描画☆
はスプライト毎にDrawPrimitiveUPを呼んで描くやり方
☆4.インデックスバッファ(DrawIndexedPrimitive)で描画☆
が、一回のDrawIndexedPrimitive呼び出しで全部描くやり方
プリミティブタイプ、
D3DPT_TRIANGLESTRIPとD3DPT_TRIANGLELISTの違いに注意。
0839デフォルトの名無しさん
05/02/13 17:49:32そこにどんどんデータを詰めていって最後にDrawPrimitiveUP
0840デフォルトの名無しさん
05/02/13 18:03:300841777
05/02/13 19:10:23SetTextureとDrawIndexedPrimitiveを画像分繰り返さないといけないし、透過色・アルファ値の設定も入れるとDrawより処理が重くなりそう・・・。
0842デフォルトの名無しさん
05/02/13 20:00:42>これって複数種類(数字0〜9など)の画像も1回で描画できるのでしょうか
違う数字を表示したいなら一枚の画像に0-9の数字を入れて頂点のUV座標ずらせばいいの。
>画像ごとにSetTextureとDrawPrimitiveを繰り返さなければいけない
これは仕方が無い。マルチテクスチャでも使わない限り解決法はない。
そんなことするよりも上の方法と同様になるべく同じ画像に詰め込んだ方がいい。
>透過色・アルファ値
ちゃんと理解してるけ? テクスチャのアルファ値とそれを貼り付ける頂点のアルファ値、そして
テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?
0843デフォルトの名無しさん
05/02/13 20:08:53DrawPrimitive1回で4頂点分しかDrawしないなんて使い方だと
DirectXでは最悪なパフォーマンスになるよ。
それだけDirectXはAPI発行にオーバーヘッドがあるって事。
だからDrawの前にスプライトを1つにまとめるような事をしても
1回で全部描画出きるなら高速化できるってわけ。
0844デフォルトの名無しさん
05/02/13 21:10:490845デフォルトの名無しさん
05/02/13 21:39:39え?測ったことあるの?
少なくとも俺の環境では
DrawPrimitive1回で描画しても分割して描画しても
速度に大した差は無かったよ。
>>818の人ってホントに詳しく勉強したことがあるのか怪しい。
>・70個ばらばらにDrawしている
>・余計なレンダーステートの変更をしている
普通に考えてたかだか70個程度でオーバーヘッドなんてあるわけない。
別の理由を考えたほうがいい。
レンダーステートはいくら変更しても結局DrawPrimitiveが呼ばれるまで
グラフィックボードには情報は送られない。
好きなだけ変更すればいい。
0846777
05/02/13 22:09:21ごめんなさいorz
試しているけどDrawと配置場所が同じになるようにするのが精一杯で。
とりあえず画像を1つにまとめてます。
透明色を指定することは出来ましたが
赤赤白白 青青青青 (白は透明色)
赤赤白白 青青青青 この2つの画像を同じ位置に描画すれば、
赤赤赤赤 白白青青 赤と青の画像が表示されると思ったのですが、
赤赤赤赤 白白青青
理想 現実
赤赤青青 赤赤黒黒 (黒は背景色)
赤赤青青 赤赤黒黒 と表示されてしまいます。
赤赤赤赤 赤赤赤赤 赤のZ値を上げて奥に表示させると青と黒(背景色)の画像しか表示されません。
赤赤赤赤 赤赤赤赤
>テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?
初めて目にした言葉なんですが、これを使わないといけないのでしょうか?
0847デフォルトの名無しさん
05/02/13 22:11:47マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
バッチ処理に関してモロに書かれてるから。
レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
十分にボトルネックになりうる。これは絶対。
ただ、>>777はID3DXSprite使ってるようなんだけど、インターフェイス見てみたら
ちゃんと内部でバッチ処理しるっぽい(9.0b以降)ので、もしかしたら
DrawXXX系の関数に変えたところで改善しないかもしんない気がしてきた。
0848デフォルトの名無しさん
05/02/13 22:23:11君さ、こんなところでくだらない質問するだけ無駄だから本買ってきなよ。
透過処理の方法ぐらい載っけてあるから。
http://www.amazon.co.jp/exec/obidos/ASIN/4875934610/
一度基本的な機能をざっと見ることも必要だよ。
0849デフォルトの名無しさん
05/02/13 22:28:50これをDrawPrimitiveの前に呼び出して逝ってみれ。(何か忘れてるかも……)
device->SetRenderState(D3DRS_LIGHTING, FALSE);
device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
device->SetRenderState(D3DRS_ZENABLE, FALSE);
device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
0850デフォルトの名無しさん
05/02/13 22:29:20>レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
>十分にボトルネックになりうる。これは絶対。
なんねーよ。
70個程度でオーバーヘッドなんて出てたらゲーム作れねぇよ。
>マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
ああ、読んだことあるけど、実際やってみるとわかるが速度にほとんど違いは出ない。
昔書いたものを惰性でのっけてるだけと考えるのが普通だろう。
では70個で速度に差が出てしまうのはどこの部分かということだが、
俺はピクセルフィルレートが一番の原因だと思う。
70個で速度に影響がでる部分っつったらここぐらいしかない。
なぜならピクセルフィルレートに関しては昔からほとんど速度が上がっていない。
0851777
05/02/13 22:41:30この本持ってたかも。
探してみます。
>>849
ありがとうございます。
ちゃんと透過できました。
ほんとお手数かけましたm( __ __ )m
0852デフォルトの名無しさん
05/02/13 22:56:27確かに70個でボトルネックにはならないかもしれんがDirectXでは
DrawPrimitiveのオーバーヘッドが異常に大きい事をマイクロソフトも
認めている。だから70個ならまだいいが数百個なら耐えられなくなる。
こんな事試した奴らならわかりきってるだろ?
それからたかが70個のスプライト程度でフィルレートが問題になる事はない。
0853デフォルトの名無しさん
05/02/13 23:01:57PC環境とパフォーマンスに対する考え方の違いかね。
バッチ処理でFPSが5も挙がればそりゃ十分にボトルネックだ。
バッチ処理を惰性で掲載してるってことはねえだろ。
NVIDIAの新めの資料にも言及されてるくらいだし。
むしろGPUの速度が上がるほどAPI発行の無駄は大きくなるはず。
0854デフォルトの名無しさん
05/02/13 23:04:38皆さんが言ってる「Draw」ってID3DXSprinte::Drawのことですよね?
DrawとDrawPrimitiveUPは毎回ボードにデータを転送するやり方だから重い。
DrawPrimitiveは頂点バッファを使っているので転送のオーバヘッドがなく軽い。
DrawPrimitiveUP1回で描画しようと思ったらD3DPT_TRIANGLELISTで構造体に頂点を順番に格納して
複数のキャラクタを描画することができる だと思うのですが、Draw1回で複数分の描画って、どのようにやるのですか?
DrawPrimitive1回で済まそうと思うと、毎回バッファをLockUnLockするのですか?それはそれで重そうなのですけれども。
0855デフォルトの名無しさん
05/02/13 23:10:14本来順序良く学んでいけば解決できる問題も
「コレがしたい」と思って途中をおろそかにして、そればかり追っていくと実は遠回りになる
とりあえず機能全体を把握した上で、それらを応用してどうできないかを
考えた方がいいと思う
たとえ一見自分のやりたいことには関係のない機能も
応用したり組み合わせたりすればなにかに使えるかもしれないし
0856デフォルトの名無しさん
05/02/13 23:11:28なんだよDrawPrimitiveのオーバーヘッドって。
何と比べてどれくらい重いのか数字だしてから言えよ。
70個での話をしてるのに数百個の話もちだして馬鹿なのか?お前。
それにピクセルフィルレートに個数は関係ない。
例え5個のモデルしか描画しなくてもZバッファ無しでそれぞれのモデルが
全画面を覆いつくすような描画をしたら処理落ちは始まる。
こんなことも知らないのか?
お前、大丈夫か?
0857デフォルトの名無しさん
05/02/13 23:13:59そんなところ速度に関係ないって馬鹿だな。
0858デフォルトの名無しさん
05/02/13 23:20:05改善される予定になっている。しかしDirectXは9で最後なので
LonghornになったらWGFでプログラムし直し。
それを考えればDrawのオーバーヘッドが少ない高速なOpenGLで
設計しておいたほうが無駄がない。
0859デフォルトの名無しさん
05/02/13 23:22:26>全画面を覆いつくすような描画をしたら処理落ちは始まる。
スプライトと言っている時点でそんなサイズで話する奴がいるかボケ。
普通に考えろよ?70個のスプライトでフィルレートが問題になるか?
0860デフォルトの名無しさん
05/02/13 23:23:50だからどれくらい差があるんだよ。
0861デフォルトの名無しさん
05/02/13 23:26:39だからその描画するときの画面に締めるスプライトのでかさによるだろ。
ホンっとアホだな。
腹が立ってくるよw
0862デフォルトの名無しさん
05/02/13 23:31:21あー違う違う。頂点バッファを使うかどうかはここでは関係無いよ。
ポリゴンを100個描画するのに、
DrawPrimitiveUPに1個のポリゴンデータを渡して100回呼び出すか、
DrawPrimitiveUPを100個のポリゴンデータを渡して1回呼び出すかの違い。
>>856
俺は>>852じゃなくて>>847なんだが、70回程度でボトルネックは言い過ぎだね。
GeForce2MXなんてショボイの使ってる俺が悪かった。
DrawPrimitiveのオーバヘッドに関しては、とりあえず君の環境でも
スプライトを1000個なり2000個なりで試してもらえないかな?
それでも考えを変えないようなら沈黙いたしますよ。
0863777
05/02/13 23:36:28/'''''' '''''':::::::\
. |(●), 、(●)、.:| ・・・。
| ,,ノ(、_, )ヽ、,, .::::|
. | `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
0864デフォルトの名無しさん
05/02/13 23:37:43だからそのスプライトのでかさが画面全体を占めるってのはお前の
勝手な妄想だろボケが。自分の都合のいい設定でしか話ができんのかお前は?
スプライト70個出して遅いって言ってる奴にフィルレートのせいだよって
言うバカはいねぇ。
0866デフォルトの名無しさん
05/02/13 23:43:23なんだよ。
1000個も2000個も描かなきゃ差がでないオーバーヘッドの話を
なんで70個の話のときに出すんだ。だからお前はアホだっていうの。
>>864
そうかい?
俺は初心者のやったことだからてっきり画面にくまなくスプライトを
70個描画したと考えたんだけど。
もちろん画面全体とまではいかなくても1個1個のピクセルフィルレートはかなり大きいとみてるがね。
0867デフォルトの名無しさん
05/02/13 23:53:57>何と比べてどれくらい重いのか数字だしてから言えよ。
この人はオーバーヘッドという言葉の意味を誤解してるっぽい
だから「ボトルネック」の話をしてる人と会話が合わないんだと思う
0868777
05/02/13 23:55:5260x2のビットマップを174個 (+他の画像や3Dの機体)
アスロン64 3200+ ゲフォ5950で有:平均90fps、無:平均109fps
製作しているマシンでは有:平均64fps 無:平均71fps です。
0869デフォルトの名無しさん
05/02/14 00:01:03なんでそうやって人を無知扱いしたがるのか。
http://www.nifty.com/webapp/digitalword/word/009/00931.htm
どうして俺の発言よんで意味を知らないなんて発言に至ったのか是非聞きたい。
0870デフォルトの名無しさん
05/02/14 00:03:45【書籍版】DirectX9実践プログラミング
はいい本だと俺は思ってる・・・・。
書物の話で、いままでそれなりの数見てきたがDirectX初期化が一番詳しく、頂点バッファ・インデックスバッファと
シェーダに関しても乗ってて、初心者がかじるには一番おいしい本だと思うのだが・・・
0871デフォルトの名無しさん
05/02/14 00:07:34そのページをあと100回良く読んでみろ
0872デフォルトの名無しさん
05/02/14 00:08:20説明できないからって意味ありげなレスつけて逃げないでね。
お願いだから。
0873デフォルトの名無しさん
05/02/14 00:08:42いいよいいよ〜 (・∀・)
0874デフォルトの名無しさん
05/02/14 00:08:570875777
05/02/14 00:22:430876デフォルトの名無しさん
05/02/14 00:24:15・頭上の. 転じて "頭上でのやり取り", "直接の目的以外で使われるもの" の意.
・コンピュータ用語として, 本来の目的以外の処理によるCPU負荷や, ネットワークで
バックグラウンドでのやり取りや変換処理等による転送負荷, 予定外の作業による人的負荷などの意味で使われる.
・元々オーバーヘッドという語は "裏での処理" 的な意味で, これによる負荷を言うなら,
正しくは "オーバーヘッドによる負荷" と表現すべきであるが, 実際のところ
オーバーヘッドな処理は大抵は負荷にしかなってないか, さもなくば負荷になるときしか
認識されないので, 負荷の意で捉える事自体は大きく間違っているわけではない.
0877デフォルトの名無しさん
05/02/14 00:26:210878デフォルトの名無しさん
05/02/14 00:35:24アンカーつけねえから話がこじれるんだな。
別に>>777のデモのパフォーマンスがDrawXXX系の呼び出し回数のせいでガタガタになっている、
というんじゃなくて、DrawXXX系の関数のオーバーヘッドを無視していいかのような>>845のレスに
反応しただけなのね。少なくとも俺の環境じゃ70回の呼び出しでも目に見えて遅くなるし。
たった1000回の発行で顕著になるオーバヘッドを本当に無視できんのか、というのが>>862の趣旨ね。
>>777
ごめんねえ。だから君のデモに関する良い知恵があるわけじゃないのね。
でもDrawPrimitiveの呼び出し回数は少なくするべきなのは憶えておいてね。
スプライト以外でもバッチ処理ってのは重要だから。
0879デフォルトの名無しさん
05/02/14 00:49:05何がヤバイって、回数が増えると超増える。増えまくり。
でも、回数が少ないときは関係ない。わかるやつだ。
0880デフォルトの名無しさん
05/02/14 00:52:19できる、できないのどちらでも取れるような言葉使いはやめろとあれほど(ry
0882デフォルトの名無しさん
05/02/14 01:16:30OpenGLもVBOとかいう新機能で描画を高速に出来るらしい。
9でおしまいのDirectXから乗り換えるいい機会かも。
0883777
05/02/14 01:33:25DirectXからOpenGLに移行するにあたってデメリットってありますか?
関数が違うとかは除いて、3Dの描画が苦手とかフォグが使えないとか(これは大丈夫だと思うけど)
0884デフォルトの名無しさん
05/02/14 01:40:01はぁ?
1000回も呼び出さなきゃでねぇような違いがどうして重要なんだよ。
ホント、ハゲだなオメーはw
そんな馬鹿だから、70回でオーバーヘッド発生してるようなグラボつかまされんだぞ(笑)
0885デフォルトの名無しさん
05/02/14 01:45:36「DrawPrimitiveファミリ呼び出しは100回に押さえろ」
と言われた。
いや、MMOでそりゃ無理だろ・・・
0886885
05/02/14 01:50:21○ 抑えろ
恥ずかしい・・・
0887デフォルトの名無しさん
05/02/14 01:52:42お前も救いようがないなw
まず、観察眼が絶望的に足りない。
そもそも>>777でいっている閉塞感はプログラム的な問題じゃない。
すべての3Dゲームは処理的には箱庭しか作れない。
広大にみえるようにしてるだけ。
フライトシミュなんかで使われてるようなのは昔はスカイボックスとか
スカイドームとか呼ばれていたが今はぐぐってもまったく情報が出てこないな。
プログラム的にはスカイボックスorドームの親座標をカメラにするだけだ。
あとは箱庭とのつなぎ目をフォグ等で誤魔化すかしかない。
これで閉塞感があるならそりゃスカイボックスorドームの絵がショボイってただそれだけだろ。
0888777
05/02/14 01:55:020890デフォルトの名無しさん
05/02/14 02:10:12Zバッファ使ってちゃんと前から描いているか?
何度もいうけどPCではピクセルフィルレートが一番ネックになる。
機体2機はわかるけど画像は何を指しているの?
画面を占める割合でかなり重くなるよ。
0891デフォルトの名無しさん
05/02/14 02:17:19そんなのどこがデメリットと思うかは個人差。GLSLをやるための資料が少ないとか
そんなのなら海外であされば出てくるしなんとでもなる。
それにゲーム業界で働く場合を考えたらDirectXなんてMSのゲーム機でしか
使わないし、PS3やその他のハードがOpenGLらしい事を考えるとメリットの
ほうがでかい。OpenGLならLonghornに乗り換えてもそのまま使える。
0892777
05/02/14 02:21:20これですよね?
別にそれほど画面を占領しているわけではないけど、やはりDrawで200弱を画面内外関係なしで描いているからでしょうか。
0893デフォルトの名無しさん
05/02/14 02:22:40画面外ならDrawするなよ。バウンディング球でも使ってクリップしろ。
0894デフォルトの名無しさん
05/02/14 02:23:33音のミキシングできるのって結局DirectSoundしかねぇのに
わざわざOpenGL使って苦労してる奴ってやっぱりかっこ悪いじゃん。
これはまあPCで組む場合だけだけど。
0895デフォルトの名無しさん
05/02/14 02:24:58カメラに近い方からちゃんと描いているかどうかも重要だぞ。
0896デフォルトの名無しさん
05/02/14 02:33:20SDLを使え。
http://www.tsg.ne.jp/text/2002/sdl-opengl/
0897デフォルトの名無しさん
05/02/14 02:41:443Dサウンドはこんなのもあるらしい。
0898777
05/02/14 02:42:23DirectXと並行にOpenGLも勉強してみたいと思います。
>>895
現状はスプライトDrawだからカメラとか関係ないぽ。
早いとこ変えないといけないんだけど、ビルボーディングのやり方をすっかり忘れたのd
(常に一定の位置・大きさ・形にするにはこの方法を使います・・よね?)
0899デフォルトの名無しさん
05/02/14 02:46:42いや、だからあるんだよ。
描画する限りないわけないの。
スプライトだって上になるものと下になるものがあんだろ?
これを描画の順序で決めちゃいけないのが3Dなんだよ。
しかし、αが使われてる物に関しては別でこれは後ろから描画しないといけない。
0900777
05/02/14 02:57:09スタンプ(貼り絵)みたいに下から(カメラから遠い?)ものから描画してます。
勝手に変数を入れてるけど
pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,RotationAngle,&vec2Position,ARGB);
これって2Dじゃなくて3D・・・?
0901777
05/02/14 03:13:000902777
05/02/14 03:16:180903デフォルトの名無しさん
05/02/14 03:20:17あははははははッ。それ9.0以前のSDKだろ。
そのころのID3DXSpriteとID3DXFontは糞遅いので有名。
文字列描画はサンプルフレームワークのCD3DFontを使いなはれ。
すっかり忘れてたけど、これスプライト実装の参考になるから。
0904デフォルトの名無しさん
05/02/14 03:26:43>OpenGLならLonghornに乗り換えてもそのまま使える。
ソースは?というか実装どこだ
0905777
05/02/14 03:30:33> すっかり忘れてたけど、これスプライト実装の参考になるから。
?
0906デフォルトの名無しさん
05/02/14 03:53:01だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
画面座標で描けるし速い。
0907デフォルトの名無しさん
05/02/14 04:27:180908デフォルトの名無しさん
05/02/14 10:40:32Sprite系とXFile系は必要ない。
0909デフォルトの名無しさん
05/02/14 10:46:25GDI使ってたんじゃないの?それだと遅いよ。
0910777
05/02/14 22:21:28なんか色々混乱してて質問死に来たけど何を質問しに来たのか忘れt
Googleがいつもと違うように見えるしもうだめp
0911777
05/02/14 23:06:12>>906
その通りです。
>だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
>画面座標で描けるし速い。
これは
┌――┐←適当な座標に描いて
| |
| |
└――┘
_ ←ワールド・ビュー・射影トランスフォーム後
/ ̄ ̄/ 機体などを描画してから頂点のスクリーン座標を取得。
 ̄ ̄ ̄ 描画したいスクリーン座標に頂点を持ってくるのを画像数×4点行い、画像の描画 ということでしょうか?
0912デフォルトの名無しさん
05/02/15 00:00:27質問するのは最低限、チュートリアルを終わらせてからにしてくれ。
そんな質問をする必用が無くなるから。
0913878
05/02/15 00:23:40CPUとドライバのせいであってビデオカードが原因じゃねえや。
GPUの速度が上がるほど無駄が大きくなるって自分でも書いてるし、阿呆か。
わかりやすいグラフも追加ー。
ttp://mirror.ati.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf
0914デフォルトの名無しさん
05/02/15 00:24:10つか、マジでDirectX実践プログラミングを全部終わらせてくんね?
お前邪魔じゃん。マジで。
レベル低いとか高いじゃなくてお約束を知らない状態が面倒なんだよ。
1人でこつこつやる時期ってのも必要なんだよ。
お前、この状態→>>911じゃ駄目だろ。
0915デフォルトの名無しさん
05/02/15 00:26:00描画できない。よって使うな。
DrawPrimitiveUP・・・・・プリミティブごとにすごいオーバヘッド。描画するなら構造体に詰め込んでD3DPT_TRIANGLELISTで
1回の呼び出しで全描画。
ってことですよね?DrawPrimitive・DrawIndexedPrimitiveは頂点バッファを使うので高速だが、
バッファのLockUnLockを頻繁に行うようだとパフォーマンスが低下する
という認識でいいのでしょうか?
0916デフォルトの名無しさん
05/02/15 01:30:03らしい。しかもWinXPの正規ユーザーしか落とせない制限付き。
さらにDirectXは9で終わりでLonghornではWGFときては作り手としては
翻弄されまくり。
0917デフォルトの名無しさん
05/02/15 02:07:57あとWGFについてはspinに記事があった。
http://216.239.57.104/search?q=cache:Yo9Cbw6ZW4EJ:spin.s2c.ne.jp/news0406.html+WGF&hl=ja&lr=lang_ja
APIは大幅に変わりそう。
0918デフォルトの名無しさん
05/02/15 02:08:08すでに >>912 がいっている。
便乗して同じことをだらだらというやつも邪魔に感じるんだが。
0919デフォルトの名無しさん
05/02/15 07:27:47ふっ、俺みたいな翻訳機は初心者スレでは普段は重宝されるんだよ。
例えばチュートリアルなぞ初心者には普通に読めん。
>>912の内容だと初心者には「だからチュートリアルは難しいよ」って思わせるだけだ。
しかし、質問スレにいる奴等は馬鹿だからDirectXの入門書が売れる理由がわからないので
「初心者にDirectXのヘルプのチュートリアルが難しい」のが理解できない。
これを理解している俺がチュートリアルではなくDirectX実践プログラミングを勧めてるところを評価してほしいね。
0920デフォルトの名無しさん
05/02/15 07:36:140921デフォルトの名無しさん
05/02/15 07:40:57レアものだな。
しかし、日本は民主主義。
少数派にまわった奴へのサポートは充実してないんだよ。
まあ、諦めて吊っとけや。
今度生まれてくるときにはDirectX実践プログラムもわかりやすくなってると思うよ。
0922デフォルトの名無しさん
05/02/15 08:14:35ちなみに古い方な。緑色の。
新しいのはちょっとはまともになったのか?
0923デフォルトの名無しさん
05/02/15 09:16:34読めないのではなく読まないの間違いだろう。
0924デフォルトの名無しさん
05/02/15 20:23:11ちょっとした事情により緑も青も両方持ってるのだが
内容が若干追加されてるだけで
文章や説明の仕方が見直されてるわけじゃないので
分かり易くなったりはしていない
0925デフォルトの名無しさん
05/02/15 20:34:06チュートリアルの方が分かりやすいと思うんだが。
0926デフォルトの名無しさん
05/02/15 23:05:20読みさすさだったり、とっつきやすさは個人差があるからな
どちらが絶対にいいとは言えないからな
漏れは日本語ネイティブが書いた文章と翻訳された文章と2つあったら
日本語文章の方がいいなぁ
0927デフォルトの名無しさん
05/02/16 00:23:560928デフォルトの名無しさん
05/02/16 01:15:13ゴミのような書籍もある中、9の実践はかなりまともな本だと思うぞ。
俺はね。
0929デフォルトの名無しさん
05/02/17 03:20:060930デフォルトの名無しさん
05/02/17 07:57:15なぜ「本」なのか・・・サンプルとヘルプ以外に何が必要なのか・・・。
0931デフォルトの名無しさん
05/02/17 08:12:110932デフォルトの名無しさん
05/02/17 08:58:52極めるんだろ? 本なんかに頼ったら本を書いた香具師ほども極められないと思うぞ。
0933デフォルトの名無しさん
05/02/17 09:13:180934デフォルトの名無しさん
05/02/17 09:35:270935デフォルトの名無しさん
05/02/17 09:53:39いままでD3Dのヘルプしか見てなかったから全然気が付かなかった。
こうなると旧SDKは保存しておかないと泣きを見る訳か。
0936デフォルトの名無しさん
05/02/17 12:35:08以前、アドバイスを貰いいくつか書籍を買ってみたのですが
どれも英語ヘルプのみ収録されていました。
日本語ヘルプが出たのはいつ頃か、いつ頃以降の書籍なら
収録されている可能性が高いのか教えてください。
0937デフォルトの名無しさん
05/02/17 13:55:59Extrasをダウンロードすれば入ってなかったっけ?
0938デフォルトの名無しさん
05/02/17 14:05:36収録されている書籍は[DirectX9シェーダプログラミングブック][Cmagazine2004-01]。
あとはシラネ。
Summer2004のExtrasには確か無かったハズ。
0939デフォルトの名無しさん
05/02/17 16:19:34今ダウンロードできるものには含まれてないようです。
>>938
DirectX9シェーダプログラミングブックを買ってきました。
ありがとうございました。
0940デフォルトの名無しさん
05/02/17 19:35:17IDirectSoundNotify8 で その0秒目、1秒目にイベントを設定して、
別スレッドのWaitForMultipleObjectsでキャッチしてます
ところが、ResumeThreadを実行すると、一度に2秒分ぐらい制御が返ってきます
つまり、Suspend と Resume を繰り返すとどんどん音楽が早送りに・・・><;
ファイルからデータを読み取るログをとってみたんですが、やはりResume を行うと
1秒間の内に2秒分のデータを読み込んでしまっているようです
WaitForMultipleObjectsの動作が怪しいきがするんですが
分かる方いますか?
0941デフォルトの名無しさん
05/02/17 20:48:43よくわからんが、ストリーミング再生用スレッドに
ResumeThreadとSuspendThreadなんてどこで使うの?
0942デフォルトの名無しさん
05/02/17 21:02:11一時停止と 停止に使うよ
0943940
05/02/17 21:11:37pBuffer->Play( 0, 0, DSBPLAY_LOOPING );
ResumeThread( m_hThread );
停止時
pBuffer->Stop();
SuspendThread( m_hThread );
別スレッド
while( 1 ) {
DWORD n = WaitForMultipleObjects( 2, m_hEvent, FALSE, INFINITE );
switch ( n ) {
case WAIT_OBJECT_0:
// 後半書き込み処理
break;
case WAIT_OBJECT_0 + 1:
// 前半書き込み処理
break;
default:
ExitThread( TRUE );
}
}
0944940
05/02/17 21:12:20ファイルをオープンするときに、データの前半を読み込んでおいて
あとはスレッドでストリーミングって感じです
WaitForMultipleObjectsが1秒間の内に2回 制御を返しているのが
原因だと思うんですが、なんでそうなるのかわかりません
それと読み込んだばかりのときにPlayを行うと普通に再生されますが
一度停止したあとに、Playをするとぶちぶち音が・・・
話によるとプライマリバッファが再生されていないことが原因らしいので
とりあえず無音データをつめこんで、再生させてみましたが変化ありませんでした
早送りとなにか関係があるのかな。。。
0945デフォルトの名無しさん
05/02/17 21:44:23Stop()で停止してればWaitForでスレッド待機してるから
別にSupend/Resumeは呼ぶ必要ないんじゃないの? 設計次第だろうけど。
音とびするのはイベント取りこぼして禁止領域に書き込んじゃってる可能性あり。
ちゃんとGetCurrentPositionで確認してる?
0946デフォルトの名無しさん
05/02/18 01:05:37あとは「DirectSound ストリーミング」とかでググって、既知のNotifyのバグを調べる。
0947デフォルトの名無しさん
05/02/18 01:18:530948940
05/02/18 13:38:45ストリーミングでけたどーー!!
いやーいろんなことして本当に苦労した
結局バッファ作成のときに設定したフラグが問題だったっぽい
DSBCAPS_LOCSOFTWARE を加えたら正常に動作した
こーいうのマイルよまじで。。。
同じ問題で苦労した人いなかったのかな ぼそ
0949デフォルトの名無しさん
05/02/18 13:57:33DSBCAPS_LOCHARDWAREでもちゃんと動く。
0950デフォルトの名無しさん
05/02/18 15:28:38ちゃんと動く場合もあるってなだけで
動かない場合があるから発見に苦労するのよ
0951デフォルトの名無しさん
05/02/18 15:34:51いや・・・・普通ソフトウェアバッファだから。
0952デフォルトの名無しさん
05/02/18 15:43:30Suspendしちゃ駄目
0953デフォルトの名無しさん
05/02/18 18:25:41べつにソフトウェアバッファのことだけ いえることではないんだが?
DirectX全般 どのハードウェアでも動くようになっていなくて苦労するんだがw
0954デフォルトの名無しさん
05/02/18 18:28:23DirectInputって、普通キーボード入力を GetDeviceState で取りますが、
逆に、コードで書いた文字をDirectInput経由でOSに送ることできますか?
(キーボード入力代行)
DirectInput使わなかったら、APIのkeybd_event("user32.dll")とかで
できるんやけど・・・。 DirectInput使う要件があるので・・・。
どなたかご存知の方、よろしくお願いします。
0955デフォルトの名無しさん
05/02/18 22:36:25ハードウェアが対応してるのか調べてから機能を使うでしょ普通は
0956デフォルトの名無しさん
05/02/18 22:39:400957デフォルトの名無しさん
05/02/18 23:26:430958デフォルトの名無しさん
05/02/19 00:42:090959デフォルトの名無しさん
05/02/19 02:00:050960デフォルトの名無しさん
05/02/19 07:41:530961初心者です
05/02/19 14:46:46Visual Studio .NET 2002を使っています。
DirectXプログラムを勉強しようと思いました。
そこで、少しネットで検索などして調べてから、MicrosoftのHPから
Runtime、SDKなど、一応全て最新のDirectX9の関係のものを
ダウンロードしてインストールしました。
DirectX9のサンプルをコンパイルして実行しようと
すると、
「 Switching to the reference rasterizer,
a software device that implements the entire
Direct3D feature set , but runs very slowly. 」
というエラーメッセージが表示されて、サンプルは実行できるの
ですけど、ものすごく遅いのです。
この原因は何なのでしょうか?
よろしくお願いします。
0962デフォルトの名無しさん
05/02/19 14:57:17ビデオカードの性能が足りていない
0963初心者です
05/02/19 15:18:17回答ありがとうございます。
古いビデオカードはやっぱりだめなんですね。
お金がないので、無理して使ってたんですけど・・・。
これからビデオカード買いに行ってきます。
予算が無いんですけど、頑張って5000円ぐらいの
買ってきます。
ありがとうございました。
0964デフォルトの名無しさん
05/02/19 19:29:495000円で何のグラボ買うつもりだ?
0965デフォルトの名無しさん
05/02/19 21:44:19GetForce2MX以上は買えるよ
0966デフォルトの名無しさん
05/02/19 23:11:205000円レベルでも来年ならDirectX9cに対応してるかも。
0967デフォルトの名無しさん
05/02/20 00:17:12データを読み込んだときに 最後まで読み込んだか を調べて
最後の書き込みは 無音データをつめこんでから 書き込んで
pBuffer->Play( 0, 0, 0 ) とループしないように設定しなおす
といった面倒な方法でしか実現できないんでしょうか。
無音データを入れる理由は 最後が途中で終わる場合があるため。
0968デフォルトの名無しさん
05/02/20 00:59:15任意のポイントで止める方法は無いはずだから、それで良いんじゃない。
俺はループを止めるんじゃなくて、
GetCurrentPosition()で再生位置を調べて、終了位置を越えてたらStop()としてる。
0969デフォルトの名無しさん
05/02/20 01:06:19再生中は設定できなくて、昔ムカついた記憶があるなあ……。
0970デフォルトの名無しさん
05/02/20 01:23:40GetCurrentPositionはいつ調べるんですか?
スレッドの中だった場合、かならずストリーミング再生なので最初にきめた
刻みごとにしか実行されないですよね
WaitForMultiなんたらで処理がストップしてしまうため
main loop に記述するのもひけるし・・・
0971デフォルトの名無しさん
05/02/20 06:09:50頃合いを見て、再生スレッドをイベント待ちからポーリング監視に切り替えてる。
0972デフォルトの名無しさん
05/02/21 01:33:48どうしたら良いでしょう?
非DirectXなら GetDC(NULL) でスクリーンのデバイスコンテキスト取得して
ごにょごにょで何とかなったんですが、DirectXの場合はどうしたものやら。
0973デフォルトの名無しさん
05/02/21 02:48:240974デフォルトの名無しさん
05/02/21 17:01:14EasyLinkLibrary使ってもコンパイルすらできないぜ。
おまいら頭いいな。
0975デフォルトの名無しさん
05/02/21 17:52:17つまりその、Visual C++なしでやりたいのですが。
0976デフォルトの名無しさん
05/02/21 17:58:30普通に検索して出てくるページのコードが活用できるだろう。
もしくは、VC2005を落とす。
0977デフォルトの名無しさん
05/02/21 18:06:59教えてください
泣きそうです
1. freecommandlinetools.exe を実行します。無料の C++Builder 5
コマンドラインツール開発システムをインストールしたいドライブと
フォルダを選択します。
2. インストール先の bin ディレクトリで次の手順を実行します。
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"
0978デフォルトの名無しさん
05/02/21 18:40:16VC++さえ買えばコンパイルはできる
いきなりラッパーライブラリを使うと余計難しい
>>975
プログラムの作り方は同じ
nMakeの使い方覚えろ
>>977
Cマガジン買え
0979デフォルトの名無しさん
05/02/21 18:49:39何が解らないの解りません。
ところで、
次スレをそろそろ立てたほうがよさそうだな。
0980デフォルトの名無しさん
05/02/21 20:18:25社会人になったら10万するものが 3980円で買える
やるなら絶対買った方がいい
0981デフォルトの名無しさん
05/02/21 21:01:00http://pc5.2ch.net/test/read.cgi/tech/1108987183/
0982デフォルトの名無しさん
05/02/21 22:16:17ご苦労。もう帰っていいよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。