5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :999:04/11/24 21:15:55
※回答する人も、質問する人も必ず読んでください

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

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

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


2 :2=1=1000=999=998:04/11/24 21:18:04
ttp://up.satoweb.net/img100/886.lzh

前スレ>997
これをコンパイルしてみろ
DDの初期化だけのヤツ
リンクの設定もいらんから
パスが通っていたらビルドできるはず
うちではできた


3 :前スレ987:04/11/24 21:33:08
>>2
一からといっても以前作ったDirectDrawベースの
簡単なプログラムがあったので、それ使うので
何ら問題無いです。そのプログラムは正常に動きました。
どうもありがとうございました。


4 :デフォルトの名無しさん:04/11/24 21:36:16
>>1
スレ立て乙

5 :デフォルトの名無しさん:04/11/24 21:42:51
  ∧_∧ 
 (*´∀`)      n
 ̄     \    ( E) グッジョブ!! >>1
フ     /ヽ ヽ_//

6 :2=1=1000=999=998 :04/11/24 21:50:12
>3
がんがれ

>4,>5
ども
どさくさにまぎれて生まれてはじめての1000ゲット&2ゲットもできたw

7 :デフォルトの名無しさん:04/11/24 22:05:23
>>1


8 :デフォルトの名無しさん:04/11/25 04:32:02
モデリングソフトはどのようなものを使って、どの形式で出力するのがいいのでしょうか?

9 :デフォルトの名無しさん:04/11/25 04:54:50
>>8
メタセコでx-file
モーション付けたくなったらBlender(あまりおすすめしないが)とかでアニメーション付x-file
アニメ付はフリーの定番ないよ
高額なら3dsMAX使いが多いっぽいけど

10 :デフォルトの名無しさん:04/11/25 06:24:50
>>6
乙だけど、それなら誘導しろよw

11 :デフォルトの名無しさん:04/11/25 08:36:56
>>9
Xファイルはopenglでも使えますか?

12 :デフォルトの名無しさん:04/11/25 08:54:41
問題なく使えるが、そんな質問をする>>11には無理。

13 :デフォルトの名無しさん:04/11/25 11:45:43
>>11
GLにID3DXMeshみたな機能は無いね。自分でパーサ書くかIDirectXFile系使うか
D3DX使うかしてメモリ上でGL用に調整するしかねえよ、という話。
つーかGL使う時点でモデルをxで出力する状況が謎。
パーサ書くのが面倒なら他のフォーマットでも大抵は既存のものがあるべ。

14 :デフォルトの名無しさん:04/11/25 13:15:05
>>13
アニメーション付きのフォーマットでいいのある?


15 :デフォルトの名無しさん:04/11/25 14:14:45
ID3DXMESHの頂点とか面を掴んで編集したいんですがどうしたらよいのでしょうか。
Xfileのロード、表示まではサンプルなど見て簡単にできてしまったのですが、
ポリゴンとマウスの当たり判定をどうするか、とかではなくて、
頂点情報を編集するにはどうすればよいかということが分かりません。

16 :デフォルトの名無しさん:04/11/25 14:15:22
>いいのある?
意味が分からん。

17 :デフォルトの名無しさん:04/11/25 14:17:40
>>15
そういうことをやろうとするときは、まずD3DXの高レベル関数に頼らず、
自分で読み込み部分を作るところから始めること。
中身を理解せずに使うから、その程度のところで詰まることになる。

18 :デフォルトの名無しさん:04/11/25 14:26:30
>>17
アドバイスありがとうございます。自分でもそう思うのですが、
何しろ急ぎというか、便利なもので使えるものは使いたいなと思っております。
例えばスキンメッシュとかも完璧に勉強して自前実装できればよいのですが、
ひとまずそこまでやってられないのでここもモーションつきXfileを使う方針です。
そんなわけで今回はDX関数に頼ってできるものならそれで済ませたいのです。

19 :デフォルトの名無しさん:04/11/25 14:31:45
>>14
自前が多いだろうけど、LWのフォーマットは結構使われている気がする

>>18
サンプルにpickっていうのがあるから、それを自分でじっくり調べてから

20 :デフォルトの名無しさん:04/11/25 14:35:58
>>16
.Xファイル以外で、アニメーションデータを含むモデルデータを持つことができるフォーマットでいいのがある?

>>18
頂点座標の編集の仕方。
ID3DXBaseMesh::LockVertexBufferを使って頂点データへのアドレスを取得。
データ構造はID3DXBaseMesh::GetFVFで得られるFVFを調べると分かる。
(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)だとは思うが。
目的の頂点情報をいじったら、ID3DXBaseMesh::UnlockVertexBufferで戻す。



21 :デフォルトの名無しさん:04/11/25 18:49:43
>>19>>20
ありがとうございます。いろんな所からパ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] );

22 :デフォルトの名無しさん:04/11/25 19:50:24
>>21
*が二重って、どこよ。
かけ算の*とポインタの*をごっちゃにしてる上に、
キャスト変換について分かってないってとこか。

D3DXVECTOR3 *v0;
v0 = (D3DXVECTOR3*)( pVertices + FVFSize*pIndices[0] );

まずこうしろ。そうすりゃv0->xでX座標を修正できる。

23 :デフォルトの名無しさん:04/11/25 20:58:29
>21
強引なポインタのキャストは危険なのでお勧めしない
多少冗長になっても、きちんと書かないとあとで変なバグのもとになる恐れがある
ポインタがしっかり理解できていないならなおさら

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;
でもどしてやる

でも慣れても漏れはそんな強引なキャストを使った書き方はできるだけしないようにしている

24 :デフォルトの名無しさん:04/11/25 21:04:37
>>23のようにpVerticesが何であるか理解せず知ったかして書くと、
違う場所の値を引っ張り出して無駄にバグを発生させることになる。

25 :23:04/11/25 21:15:25
>24
そうだな
今回pVertices の型について何も書いてないからVOID *かも知れないな
漏れは自分で決めたFVFしか使わないから常にFVFに対応した構造体を準備して使ってるから
ついこう書いてしまった
XMeshなんてしばらくつかってないが、自分の使いたい頂点フォーマットの状態で
読み込む(読み込んだ後コピーする)方法で使ってたし

26 :15:04/11/25 21:55:24
皆さんありがとうございます。この辺は決まりもんかと思ったので詳しく書かなかったのですが、
DWORD FVFSize;
WORD* pIndices;
BYTE* pVertices;
のように定義されています。
細かい事はよく分からずになんとなく大きな流れだけ追っているのですが
v0 = *(D3DXVECTOR3*)( pVertices + FVFSize*pIndices[0] );
↑の( pVertices + FVFSize*pIndices[0] )で違う型のアドレスの足し算掛け算をして
更にD3DXVECTOR3のポインタにキャストして、その値を参照・・・っていうのが
全くワケがわからないというか、、、(この辺がどういう意味か教えていただけると大変助かります)
ひとまず>>22の方に教えていただいた風にしてみたら
とりあえず頂点を動かせましたが、その頂点を含む周辺の面が全部動くわけではなくて
割れてしまうんですね。。。ってことは3Dモデリングツールのように
モデルの頂点をマウスで掴んで引っ張ったりしたい場合は
その点を含む面を更にどうにかして全て捜査しないといけないのでしょうか?

27 :15:04/11/25 22:23:55
あぁ、ロックしてある面の頂点だけしか動かないとかですかね…?
今のところD3DXIntersectでマウスとメッシュの当たり判定をとって、
D3DXIntersectが返した面のインデックスをロックして、
それから>>21のようにして頂点を取り出しています。

28 :デフォルトの名無しさん:04/11/25 23:00:13
編集用のモデル → 頂点配列はSTLコンテナに。
表示用のモデル → 頂点配列はVertexBufferに。

これ常識、すなわちID3DXMeshは使うなってこった。


29 :デフォルトの名無しさん:04/11/25 23:31:36
>>15
22の者だが、
>細かい事はよく分からずになんとなく大きな流れだけ追っているのですが
↑このように宣っている時点で、オマイはプログラムするな。
なんとなくでプログラムできるわけないだろ。

元々のMeshがどういうデータ構造になっているかを丹念に丹念に丹念に調べた上で、
頂点座標をいじるのが普通だ。それが当たり前だ。
初心者だから、なんて言い訳通じないぞ。頂点編集なんて。

30 :15:04/11/25 23:44:31
分からないので質問してるのですが。。。

31 :デフォルトの名無しさん:04/11/25 23:57:08
>>15
>>26を見る限り
結局はポインタを全然理解してないだけ

割れるか隣のポリゴンが変形してくっついてくるかは
頂点を共有してるかどうかだから
データの持ち方の問題

32 :デフォルトの名無しさん:04/11/25 23:58:28
>>15
.Xファイルを読み込んだあとのデータ構造がどうなっているかを理解しないと、
君の望むことはできない。
君が質問している「頂点の編集のしかた」はとてもとても奥の深い話。
ID3DXBaseMeshインターフェイスを駆使してくれ。

33 :15:04/11/26 09:34:53
おはようございます。度々すいません。
>>28
たしかにID3DXMeshはややこしいのですが、
そういう方法を使うとD3DXIntersectとかも使えなくなりそうな、、、
余裕ができたらゆくゆく移行したいと思います。
>>31
実際やってみたときに頂点を共有してないんだなとは感じたんですが、
ではこれはどうやったら共有させられるのでしょうか。
現在テストしているモデルはライトウェーブで作った単純な格子状のメッシュです。
まず一枚の四角ポリゴンに対し一つのUVを割り当ててテクスチャを貼り、
それをコピーし格子状に沢山並べて、頂点をマージしてまとめたものです。
それをプラグインのエクスポーターでXfileに出力しています(そのとき三角分割されます)。
そのメッシュでテストしてみると、全部の面が三角形にばらばらになるというわけではなく、
UVの単位(元の四角形単位)でばらばらになっているようでした。

>>32さんのおっしゃるように、読み込んだあとの
データの持ち方(持たせ方)の問題だと思うのですが、
D3DPT_TRIANGLESTRIPとかD3DPT_TRIANGLELISTとかっていうのは
単に「描画」の問題で頂点定義のされ方とは別の問題ですよね?

34 :15:04/11/26 10:14:10
長くなりそうなのでBBX行ってきます。いろいろお世話様でした。
もしまだ面倒見てやろうという方がおられましたら
あっちの方で教えてください。
他の方の質問を流してしまったかもしれません。すいません。

35 :デフォルトの名無しさん:04/11/26 11:34:11
BBX行ったらもっと叩かれそうな予感

36 :デフォルトの名無しさん:04/11/26 12:51:59
まあ、あとはBBXの説教要員に任せようや。

次の質問まだ〜?チンチン

37 :デフォルトの名無しさん:04/11/27 01:55:30
DX9.0bを使ってます。
よくRTSとかMMOとかでユニットを選択した時などに
地面にマーキングされるやつありますよね。
ああいう事をやりたいんですが、
あれはテクスチャを地面に投影したりしてるんでしょうか。
一枚ポリゴンをその場に置くだけだと角度の違うポリゴンを跨いだ時に
浮いてしまうんで、見た目が良くなさそうです。
なんかテクニックの名前とかついてたら調べますので教えてください。
もちろんずばり方法を教えてくれれば一番嬉しいのですが。

38 :デフォルトの名無しさん:04/11/27 02:19:04
>>37
http://pcweb.mycom.co.jp/news/2002/04/26/03dl.jpg
こんなん?

ようしらんけど、Z深度が足りないだけって話じゃないの?
もちっとニアとファーを近づけてみたらどう?

俺はそういうテクニックあんまりしらんけど床があんまり凸凹してなけりゃZクリアしちゃうけどね。
ってそりゃねーか?

39 :デフォルトの名無しさん:04/11/27 02:36:28
レスありがとうございます。そういうのです。
テクスチャを地面などに投影したい、と言葉でいうのは簡単なんですが
実際やるとなったらどうやるのか全く見当がつかないので
どこかに参考になる資料でもあればよいのですが・・

>ようしらんけど、Z深度が足りないだけって話じゃないの?
>もちっとニアとファーを近づけてみたらどう?

いやまだ実際になにかを作ったわけではないのですが、
その前にどういった方法があるのかなと思いましてお聞きしました。

40 :デフォルトの名無しさん:04/11/27 11:55:14
>>39
http://www.4gamer.net/specials/3de/shadow/

41 :デフォルトの名無しさん:04/11/27 12:19:43
TLVertexのTLってなんですか

42 :デフォルトの名無しさん:04/11/27 12:28:27
T : 座標変換済み
L : ライティング済み

43 :デフォルトの名無しさん:04/11/27 16:01:31
誰にも聞けなかったことを聞いてみる。
rhwってなんですか。
SDKドキュメントの日本語は意味不明。

44 :デフォルトの名無しさん:04/11/27 16:24:45
Reciprocal Homogeneous W

同次座標のw成分の逆数

45 :デフォルトの名無しさん:04/11/27 17:32:54
なんで同次座標っていうん?

46 :デフォルトの名無しさん:04/11/27 20:42:24
>>44
それで分かったら聞かないって。

47 :デフォルトの名無しさん:04/11/27 23:38:43
>>39
Zバッファが邪魔するなら、それを描画するときだけZテストをOFFにする。
前景キャラとの兼ね合いがあるので、地面描画(Zテストあり)→
マーカ描画(Zテストなし)→その他描画(Zテストあり)とする。


48 :デフォルトの名無しさん:04/11/28 00:06:49
そういうレベルの話じゃない希ガス。
単にテクスチャの投影のやり方とかの話をしているのではないか。

49 :デフォルトの名無しさん:04/11/28 01:25:35
投影テクスチャと言うと難しい感じがするが
本質は頂点の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);

50 :デフォルトの名無しさん:04/11/28 07:27:38
これって例えば階段の場所でやるとちゃんと階段の形に歪むですか?

51 :デフォルトの名無しさん:04/11/28 09:28:15
便乗で質問、誰かデカール処理時に綺麗に見せられる
デカール用Projection Matrixの算出方法をご存じないでしょうか?

手動でやればそこそこ綺麗なのが出来るんだけど、
まさか視野角かえるたびに、ユーザに手動でやらせるわけには行かないしねぇ…。

52 :デフォルトの名無しさん:04/11/28 17:38:07
>>50
歪む。
要は、色セロファンを貼ったスポットライトだと思えばいい。

53 :デフォルトの名無しさん:04/11/28 20:11:33
何やってるのかさっぱり分かりません。
詳しい解説キボンします。

54 :デフォルトの名無しさん:04/11/29 02:32:05
バックバッファに対する3D描画とは簡単に言うと
xyzの3次元の空間の内、目に見える領域(視錘台)を切り取って
xy(-1.0〜1.0)z(0.0〜1.0)の範囲に収まるよう変換し(射影トランスフォーム)、
この立方体状になった空間を、xy(-1.0〜1.0)の2次元の空間に変換すること。
投影テクスチャでは、これとまったく同じ方法で、
xyz3次元の頂点座標をバックバッファではなくテクスチャのxy(0.0〜1.0)の2次元空間に変換する。
そうすると、この頂点の位置に対しテクスチャのどのテクセルが対応するかわかる訳だ。

55 :デフォルトの名無しさん:04/11/29 13:33:31
そうすると、まず投影させる(テクセルと対応させる)為の頂点を
切り取らないといけないような。

56 :デフォルトの名無しさん:04/11/29 21:06:05
October2004日本語ドキュメントキター

57 :デフォルトの名無しさん:04/11/29 21:11:13
みんなダウソしてるから重いぜ・・

58 :デフォルトの名無しさん:04/11/30 00:10:40
DirectSoundのPlayで音がすぐに鳴ってくれないのですが、
どうすればよいのでしょうか?
sndPlaySoundはすぐに鳴ります。

59 :デフォルトの名無しさん:04/11/30 10:03:12
ハイ次の質問ー。

60 :デフォルトの名無しさん:04/11/30 11:17:47
ここで質問がばしっと解決した風景を見たことがない。

61 :デフォルトの名無しさん:04/11/30 11:42:32
>>60
質問する側もばしっと質問してないからな。

62 :デフォルトの名無しさん:04/11/30 12:17:01
ワールド座標上に配置されてる物体Aと物体Bがあるとします。
それぞれ別の位置座標float X, Y, Zと、回転角度float H,P,Bの状態をもっています。
これらの物体に、現在のそれぞれの位置・相対位置関係を保持したまま
親子関係を持たせようとしています。

BをAの子にするとして、Aを移動、回転させるとBはそれに従うようにし、
Bは今まで通りに自由に移動回転できるようにしたいです。

それで、単純に、子の変換マトリックス(回転行列*移動行列)の右に、
親の変換マトリックスを掛けてみたんですが、
親子関係を組んだ瞬間に、子の位置が、「親の位置座標分」ずれてしまいました。
(親子関係を組んだ時の親の位置が(0,0,-1)だったら、子が(0,0,-1)の分だけ現在位置からずれる)
なので最後に親の移動行列の逆行列を掛けてみたんですが、
今度は親の移動に子がついてこなくなってしまいました。
それはそれで当たり前な感じもするのですが、ではどうしたらよいのでしょうか。
教えてくださいお願いします。9.0bを使ってます。
(ばしっと質問できているだろうか…)

63 :デフォルトの名無しさん:04/11/30 12:25:46
>>62
親子関係をつけたら、親からの相対位置になるのは当たり前。
親の逆行列をかけるって発想は良い。が、「現在の行列の逆行列」ではダメ。
初期位置の逆行列を掛ければよい。


64 :デフォルトの名無しさん:04/11/30 13:45:17
>>63
ありがとうございます。
初期位置っていうのは、親子関係を組んだ瞬間の親の位置って事ですよね?
そう解釈して、
「子の(回転*移動)行列」*「親の(回転*移動)行列」*「親子関係を組んだ瞬間の親の((回転*移動)行列)の逆行列」
としてみたんですが、
一応、親子関係を組んだ瞬間に子がずれることはなくなり、
親の移動にも子がついてくるようになったものの、
親を回転したときに、子の回転の中心がよく分からない場所になってしまいました。
一応、全ての子がどこかを中心に衛星的に回転しているのですが、親中心ではありません。
掛ける順番とかが間違ってますでしょうか?

65 :デフォルトの名無しさん:04/11/30 14:34:46
最初に親子関係を結んだ場合のローカル子行列を出しているのなら、
次からその値を使えばいいだけなので、以降逆行列を使う必要性はない。

66 :デフォルトの名無しさん:04/11/30 14:39:15
>64
まずお互いの関係を決める
親と子の関係行列 = (子の初期位置の行列) * 「親の初期位置の逆行列」

以降は
子の行列 = 「親と子の関係行列」 * 「親の回転移動行列」

ちなみに子を親を中心に回転させたいときは
子の行列 = 「親と子の関係行列」 * 「子を親を中心に回転させる行列」 * 「親の回転移動行列」

子をローカルで回転させたいときは
子の行列 = 「子の回転行列」 * 「親と子の関係行列」 * 「親の回転*移動行列」

子をローカルで回転させつつさらに親を中心に回転させたいときは
子の行列 = 「子の回転行列」 * 「親と子の関係行列」 * 「子を親を中心に回転させる行列」 * 「親の回転移動行列」

つまり「親と子の関係行列」をかける前は子のローカル座標系
「親と子の関係行列」をかけた後は親のローカル座標系
最後の「親の回転移動行列」をかけた後はワールド座標系


67 :デフォルトの名無しさん:04/11/30 14:54:53
>>64
がんばって書いたので遅いかもしれんが書いておく…

親を中心に回転させたいのなら
「子と回転行列の軸になる位置との相対位置」が「子と親の相対位置」
と一致する状態にして回転させないとダメ

↓参考までに
親も子も元のデータとしては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)
希望通りに親を中心として回転する

68 :62:04/11/30 16:54:29
こんなに色々と、皆さんありがとうございます。
最終的には
「子の(回転*移動)行列」*「親子関係を組んだ瞬間の親の((回転*移動)行列)の逆行列」*「親の(回転*移動)行列」
として、
なんだか上手くいっている模様です。
なんとなくしか理解できてないので、
頂いたレスは後々の為にとりあえずコピペしてとっときます。
ありがとうございました。

69 :デフォルトの名無しさん:04/12/01 17:13:21
本でメッシュを表示するサンプルがあって
それを自分で作ったんですけど
自分で作った方は何故かメッシュがぺちゃんこです。
サンプルの方はふんわり膨らんでて、
なんかパンの焼く前、焼いた後(BEFORE,AFTER)みたいで。
どうすると、膨らむんでしょうか。パン...ではなく。。。


70 :デフォルトの名無しさん:04/12/01 17:24:31
回答者はエスパーではありません。
質問をできるだけ詳細に的確に伝える為の努力をして下さい。

71 :69:04/12/01 17:39:31
膨らみ方は縦方向にです。自作の方は厚みがなく、
サンプルの方は2倍くらい分厚い。
横はそのままサンプルと同じ。
視点を色々変えて見たので見間違えではないです。
メッシュはUFOです。
位置を指定しそのまま表示してます。

72 :デフォルトの名無しさん:04/12/01 17:52:26
スクリーンショット見せてみそ

73 :デフォルトの名無しさん:04/12/01 18:31:24
>69
アスペクト比かFOVYの設定が違うんじゃないか
とりあえずそこを見直すか、いじってみれ

あとはメッシュ用のマトリクスに変なマトリクスをかけていないか

多分これのどちらか

関係ないけど
D3DXMatrixPerspectiveFovRH(LH)の
Aspect
[in] アスペクト比。 ビュー空間の高さを幅で除算した値として定義される。 (日本語ヘルプ)
[in] Aspect ratio, defined as view space width divided by height. (英語ヘルプ)
この誤訳は最新版では修正されてるのか?

74 :デフォルトの名無しさん:04/12/01 19:00:48
焼く前は
http://rupan.zive.net/~kain/cgi-bin/upload/src/up14316.bmp
火を加えると
http://rupan.zive.net/~kain/cgi-bin/upload/src/up14314.bmp

アスペクト比でした。変えたら今度はたこ焼きみたいになった。
ありがとうございました。

75 :デフォルトの名無しさん:04/12/01 19:51:12
D3DXLoadMeshFromXで読み込みID3DXMESHでもってるXfileメッシュを
そのままDrawsubsetでレンダーしてるんですが、
もしこれをワイヤーフレームで表示したい場合は
やはり自分でVertexBufferに入れなおしてDrawPrimitiveとかで
描画しないと無理ですか?(ピクセルシェーダーとかは使わずに)
バージョンは9.0bです。

76 :デフォルトの名無しさん:04/12/01 19:56:39
FIFOバッファを

「ふぃふぉ」って言うな!!

ムカつく!!

77 :デフォルトの名無しさん:04/12/01 20:19:44
>>73
今までのヘルプ
[in] アスペクト比。 ビュー空間の高さを幅で除算した値として定義される。
October 2004 ヘルプ
[in] ビュー空間の幅を高さで乗算して定義したアスペクト比。

また微妙に間違っとるな

78 :デフォルトの名無しさん:04/12/01 20:28:12
>>75
SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );

この質問が多いのは、ヘルプの検索が「ワイヤーフレーム」じゃなく
「ワイヤフレーム」じゃないと引っかからないのが一因なんだろうな。

79 :デフォルトの名無しさん:04/12/01 21:11:17
ファイフォ
じゃねえの?
まあ実際エフアイエフオーって言うけどさ

80 :デフォルトの名無しさん:04/12/01 21:26:27
ファイファンフォー

81 :デフォルトの名無しさん:04/12/01 21:38:45
>>78
サンクスコ!
顔謝します!

82 :デフォルトの名無しさん:04/12/01 22:23:08
ふぃふぉ ふぃふぉ 仕事が好き ピピピピピピピピピピ
ふぃふぉ ふぃふぉ ふぃふぉふぃふぉふぃふぉ
ふぃふぉ 仕事が好き

83 :デフォルトの名無しさん:04/12/01 22:28:33
俺はどーも

そういわれると白雪姫思い出してしょうがねえんだ。
仕事に差し障る。やめろ。

84 :デフォルトの名無しさん:04/12/02 00:11:10
>77
より酷くなってるw
こんな翻訳した香具師くびにしろ

85 :デフォルトの名無しさん:04/12/02 00:14:00
FIFO フィフォ
FILO フィロ
LIFO リフォ
LILO リロ

86 :デフォルトの名無しさん:04/12/02 00:23:47
OREO オレオ

87 :デフォルトの名無しさん:04/12/02 00:33:42
>>84
マイクロソフトはゲイツ以外全部AIですが何か?(最近はゲイツももしかしたらAI)

88 :デフォルトの名無しさん:04/12/02 00:34:35
>>85
HPの社長だっけ?

89 :デフォルトの名無しさん:04/12/02 05:41:43
Microsoft Visual C++ Toolkit 2003とDirectXSDKをインストールしました。
DirectXのプログラムを作るのに他に何か必要でしょうか?

90 :デフォルトの名無しさん:04/12/02 06:00:39
あとは十分な食事と十分な睡眠とほんのちょっとのやる気。

91 :デフォルトの名無しさん:04/12/02 06:17:17
>>89
んなこと訊いているってことは無能なんだろ。
というわけで、ちみに必要なのは能力です。


92 :デフォルトの名無しさん:04/12/02 07:10:17
無能力だから聞いてんでしょうがw

93 :デフォルトの名無しさん:04/12/02 13:29:36
勉強しろって話でしょ

94 :デフォルトの名無しさん:04/12/02 20:49:55
フラットシェーディング、かつ1点1法線で、
綺麗なポリゴンを表示することは出来ないでしょうか。

今はこの画像の下の長方体の様に、同じ向きでも面ごとに色が違ってしまっています。
ttp://data.uploda.net/anonymous/etc2/dat2/upload23100.gif
せめて多少違うなぁ、くらいに抑えたいのですが、どうしたら良い物か・・・。

ちなみに上の長方体がグーローシェーディング+頂点法線(黄色の線)です。
グーローなら問題ありません。法線計算も間違っていないようです。

もちろん1点1法線ではなく、面ごとに個別に頂点と法線を設定すれば、
綺麗に表示されますが、頂点数を増やさずになんとかならないでしょうか。

95 :デフォルトの名無しさん:04/12/02 21:07:28
頂点法線を平均化しなければいいんじゃないかな。
もう割り切って、どれかの面に対して垂直にするとか。

96 :デフォルトの名無しさん:04/12/02 21:34:36
>>94
上のほうはマグロっぽいな。関係ないけど。

97 :94:04/12/02 21:47:50
>>95
レスありがとうございます!早速やってみました。
ttp://data.uploda.net/anonymous/etc2/dat5/upload23103.gif

おかげで色に統一感を出すことができました。
エッジが消えてしまったのが残念ですが。

下のが理想ではあるのですが、これはどうも1点1法線では構造的に無理っぽいですねぇ。
と、95さんのやり方を実装しながら気づく事ができました。

>>96
それもかなり安い赤身っすね
最近食べてないなぁ

98 :95:04/12/03 00:34:46
ttp://matsuya.dyndns.tv/2ch/img-box/img20041203003251.jpg
せめてこうして欲しかった・・・

99 :デフォルトの名無しさん:04/12/04 00:48:10
DirectXでの当たり判定で、D3DXIntersectを使っていますが、うまく判定できなくて困っています。
判定したいオブジェクトの逆行列を求め、それを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 ) { 当たり判定処理 }

どこが変なのか教えてください。

100 :デフォルトの名無しさん:04/12/04 01:43:04
>>99
"レイの方向"にも逆行列を掛ける必要がある
(平行移動を無視するために D3DXVec3TransformNormal を使う)

101 :デフォルトの名無しさん:04/12/04 08:37:04
原因が分からないのでお力を貸してください。お願いします。

for( 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を使っています。なにかまずそうなところがあったら教えてください。お願いします。

102 :ko:04/12/04 08:46:46
デバッグ用に処理棒を作ってるのですが、計算式がまずいのか
正確に表示されません。棒は右端に表示させるようにしてます。
周波数、(処理後の時間 − 処理前の時間)をつかって、描画時間は1/60
と考えてるのですが、うまくいきません。
わかる方、良き回答を!!!

103 :デフォルトの名無しさん:04/12/04 09:25:33
>>101
そのコードだけではどこがまずいのかはわからん。
どうせm_pVBの内容がおかしいんだろ。

>>102
エスパーでも無い限り、オマエがしたいことは意味不明。日本語の勉強から出直してこい。

104 :デフォルトの名無しさん:04/12/04 09:43:26
>>102
もしかしてプログレスバーのことか?

105 :285:04/12/04 09:57:30
ポインターが欲輪からないんですけど
*のマーク
これの送り先ってどこにいくの:?

106 :デフォルトの名無しさん:04/12/04 10:36:56
送り先?
意味不明

107 :デフォルトの名無しさん:04/12/04 11:20:10
>106
>105は誤爆だろ

108 :デフォルトの名無しさん:04/12/04 11:20:15
「処理棒」ってどっかの翻訳書に書かれてるのか?


109 :デフォルトの名無しさん:04/12/04 11:37:12
処理棒
ttp://www.chukyo-gun.co.jp/cgi-bin/chukyo-gun/sitemaker.cgi?mode=item_detail3&page=page3&category=4&no=6

110 :デフォルトの名無しさん:04/12/04 12:34:37
>>99
レイの方向にも逆行列を掛けましたが、やっぱり数角度ずつ
当たり判定になったり、ならなかったりを繰り返します。
なぜでしょうか。

111 :デフォルトの名無しさん:04/12/04 13:28:24
>>110
RayPos=(0,-1,0) は何を表してるの?
(実際はプレイヤーの位置とかが入るのかな)

あと、行列の合成は Scale -> Rotate -> Trans の順が自然だと思う。
(R->S->T だと拡大率が x,y,z それぞれ異なる場合におかしくなる。)

"数角度づつ"はようわからん。角度はもちろんラジアン角使ってる?

112 :101:04/12/04 13:36:43
>>103
ども。何とか自己解決に至りました。
ビルボードクラスの方でマテリアルを設定してないというオチでした。
FVFに頂点カラーを持たせてないのでマテリアルは関係ないしなー
とか思ってましたが、別物でした。
それで、メッシュクラスのレンダーを呼んだときに
そっちではマテリアルがセットされていたので
そのためビルボードの方も運良く発色していた、ということでした。
すいません。

113 :デフォルトの名無しさん:04/12/04 14:03:26
すみません。初心者質問です。
DirectX9.0をダウンロードして、実行可能ファイルを試してみたんですが、
とんでもなく遅いです。Javaが遅いとかいう遅さではありません。
パソコンが古いなら買い換えますが、でも、ほんの2年前のもの。
何か間違っているでしょうか?もし、買い替えが必要なら、注意点を
教えてください。

114 :デフォルトの名無しさん:04/12/04 14:06:16
まずはCPUやビデオカードの種類を明確に記せ。

115 :デフォルトの名無しさん:04/12/04 14:10:05
>>111

RayPos の ( 0, -1, 0 ) は 地面の座標を表しています
実際はプレイヤーの座標をいれて、プレイヤーがどの場所に移動してもそこに地面があるように
するべきなんですが、これは 0, -1, 0 の地点のみに地面があるようにしています。

当たり判定を検出した位置で、回転させると、判定されたり、判定されなかったりを繰り返します。
この間隔が、数角度ずつです。

もちろんラジアン角を使っています・・・・・・・と思ったところ
ラジアン角に直していませんでした;;

最初はちゃんと直していたんですが、どうやらここに書き込むときに
わかりやすいように直して間違って消してしまったようです。
ありがとうございました。 

116 :デフォルトの名無しさん:04/12/04 14:10:31
>>114
レスサンクスです。
CPU AMD 902MHz
RAM 496MB
ビデオカード わかりません
ビデオカードはデバイスマネージャを見ると不明となってます。

マシンはソニーのVAIOです。

117 :113:04/12/04 14:11:09
すみません。>>116>>113です。

118 :デフォルトの名無しさん:04/12/04 14:19:27
どうも開発者じゃない気がする
初心者板行き

119 :113:04/12/04 14:23:46
学生です。どなたかお願いします。

しかし、雰囲気からするとビデオカードでしょうか。
そもそもDirectXを使うためには高価なビデオカードを使わないとだめなんでしょうか。
だとすると、自分のマシンで開発できても、人のマシンで実行できないわけですよね。
ハードの足りない部分はソフトで埋めるということでしたが、それがこんなに遅いのでは。

120 :113:04/12/04 14:47:29
レスがないので落ちます。
どなたかの解説をお待ちします。

121 :デフォルトの名無しさん:04/12/04 15:00:25
>>113
PC初心者
http://pc6.2ch.net/pcqa/

122 :デフォルトの名無しさん:04/12/04 15:01:54
pixelshaderのデモをHWサポート無しのPC動かしているとみた。
まあどうせそういう部類だ。

123 :デフォルトの名無しさん:04/12/04 15:34:53
>113
DirectX9を使ったアプリケーションを快適に動作させるためには
DirectX9に対応したハードウェアが必要
未対応でも動作はするが、経験したとおりの状況になる
プログラムを作成することはそのマシンでも可能だが
動作確認を行うためにはDirectX9に対応したグラボを積んだPC必須
>116で
>ビデオカード わかりません
メーカー製のPCの場合メーカーのHPにスペックが載っているはずなので確認してください
ビデオカードの名前よりも、どのDirectXに対応しているかをまずは確認してください
DirectX9とかDirectX8とか特に書いていない場合はまず間違いなく
DirectX6以前のものです
>119
>だとすると、自分のマシンで開発できても、人のマシンで実行できないわけですよね。
そうです。常識です。普通です。
なのでより多くの人の環境で動作するプログラムを作る場合は
今ならDirectX9ではなくDirectX8やDirectX7で開発します
とにかくあなたは現状で知識が足りなさ過ぎます。初心者以前です。
そのような人はまずある程度知識を溜めてからまたきてください
ここでいちいち基本的すぎることについての質問返答を繰り返すと他の人の迷惑になります
疑問に思ったらまず過去ログを見たり、ネットで検索したりしてください
超基本的な知識は容易にに得られると思います


124 :デフォルトの名無しさん:04/12/04 18:40:37
D3DLIGHT9 でライトを作り、XFileから読み込んだオブジェクトに光をあてているのですが、
オブジェクトを拡大、縮小すると光の当たり具合がかわってしまいます。

縮小すると 光が強くなる
拡大すると光が弱くなる

この原因は何かわからないでしょうか。

125 :デフォルトの名無しさん:04/12/04 18:47:21
エスパーさん居ませんか〜?

>>124に答えてやってくださ〜い

126 :デフォルトの名無しさん:04/12/04 18:49:59
占いの結果→法線

127 :デフォルトの名無しさん:04/12/04 18:54:49
占いの結果→気のせい

128 :デフォルトの名無しさん:04/12/04 18:57:28
ズバリ言うわよ
SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );

129 :デフォルトの名無しさん:04/12/04 19:02:48
これは法線がおかしいって真っ先に考えるのが定番の症状だよね。
違うかもしれないけど、一応、かなり疑わしい。
それ以上具体的なことについては中身をみなきゃ分からない。
それがでてこない>>125は実力不足だと思う。
そしてもっと具体的な内容を提示して質問しない>>124もなってないと思う。

130 :デフォルトの名無しさん:04/12/04 19:06:58
125は回答者を一本釣りするための124の自演であって
もしかしたら124はのぞみの回答をみごとに引き出す
質問のプロフェッショナルかもしれない。

131 :デフォルトの名無しさん:04/12/04 19:08:50
頂点シェーダでの光源計算が間違っているという可能性も・・・

132 :デフォルトの名無しさん:04/12/04 19:10:28
みろ!どんどん回答が沸いてくるようだ!

133 :デフォルトの名無しさん:04/12/04 19:12:24
>>130
昔似たような事をやった覚えがあるw

134 :124:04/12/04 20:20:26
気のせいでした
ありがとうございました。

135 :デフォルトの名無しさん:04/12/04 20:34:40
>>125の一行目だけだったら回答者だろうが
>>124に答えてやってくださいなんて、私は>>124ですって言ってるようなもんだろ

136 :デフォルトの名無しさん:04/12/04 20:59:22
int* sumArrays(int* a, int* b, int N){
int* c = new int[N];
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
return c;
}

これってコンパイルとラン可能ですよね?
自分でやってみたら、動いたんですけど。。。
でもエラーとか不利点とか、あるみたいで、それがいまいち、よく分からないんですが。。。

ポインターって、関数で、&パス(リファレンス)できないですよね?
なんでですか?

137 :デフォルトの名無しさん:04/12/04 21:09:23
>136
コンパイラ何?
>int* c = new int[N];
からもわかるとおりC++だぞ
あと関数宣言とmain書けよ
関数内部でnewしてるから
ちゃんと外で開放しろよ
さっぱりわからないんだったら
地道に勉強すべし
人のソース追っかけるんじゃなくて
疑問に思ったことをコードに起こして
動作を確認しながらひとつずつ理解していかないと
挫折するぞ
特にポインタとか
ちなみにDirectXはまったく関係ないぞ




138 :デフォルトの名無しさん:04/12/04 21:23:46
明らかに誤爆だろ

139 :デフォルトの名無しさん:04/12/04 22:15:26
>>127はエスパー

140 :113:04/12/04 22:16:02
>>123
レスありがとう。
だいたいわかりました。

>疑問に思ったらまず過去ログを見たり、ネットで検索したりしてください
>超基本的な知識は容易にに得られると思います
ここは初心者質問スレですし、実際、容易に必要な知識が得られましたよ。(w

それにしても、そんなに機種依存なら、なんだかあまり価値がないような気がしてきました。
でわ、でわ。

141 :113:04/12/04 22:17:32
すみません。
結論として、DirectXはやめて、OpenGLにします。

142 :デフォルトの名無しさん:04/12/04 22:22:48
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ     >>141
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

143 :デフォルトの名無しさん:04/12/04 22:24:23
その時点で釣られてんだよバカ

144 :113:04/12/04 22:29:45
OpenGLならAPIが安定しているので、少なくとも、機種依存の問題は
なくなるわけですよね。でわでわ。

145 :デフォルトの名無しさん:04/12/04 22:39:38
車のハンドルを交換しても
速度は上がらないぞ。

146 :デフォルトの名無しさん:04/12/04 22:42:21
DX9のpointspritは、
透過をした部分が重なると上手く抜けないっていう記事がありました。
実際、自分でそれを参考に組んだらおかしくなりました。
ですが、SDKサンプルや、工学社本のDX8実践プログラミングのサンプルでは
上手く透過できてる模様です。なぜですか。


147 :デフォルトの名無しさん:04/12/04 23:27:31
>146
多分それはポイントスプライトに限らない問題だと思う
半透明のポリゴンは奥から描いていかないとだめ
ポイントスプライトの頂点の順番も同じ
サンプルなんかはそのあたりうまく頂点の順番を決めてるんじゃないの?
もしくはZ書き込みor比較をOFFにしてるかだな
D3DRS_ZENABLEとかD3DRS_ZWRITEENABLEとか
なぜ奥から描いていかないといけないかというと…
まぁ自分で考えてみて
Zバッファの仕組みを考えれば理解できるはず

148 :146:04/12/05 19:14:03
>>147
なるほどそういうわけですね。
D3DRS_ZENABLEとかチェックしてみたらマシになりました。
ありがとうございました。

149 :デフォルトの名無しさん:04/12/06 11:44:57
>>124の者ですが、しばらくインターネットが使えず、今ログを見ました。
・・・と、なんか偽装さわぎになっていますが、私は124以外書き込んでいません。
そのほかはすべて偽物ですよ。しばらく書き込んでいなかったからこうなってしまったのかな^^;;;

みなさんが言うとおり法線の問題だったようです。
>>128 さんがずばりと示していただいた方法でずばり解決しました。
ありがとうございました^^


150 :デフォルトの名無しさん:04/12/06 14:56:03
DirectXのバージョンを調べるAPIってあるんですか?

151 :デフォルトの名無しさん:04/12/06 15:08:50
>>150
ない。
MSのサンプルですら、DLLのファイルバージョンをいっこいっこifで調べて
バージョン調査してる。
サンプルのGetDXVersion関数まわりをおとなしくコピペしたほうがいいと思うよ。

152 :デフォルトの名無しさん:04/12/06 15:23:04
そもそもコンポーネントによっては旧バージョンのまま、
内容が全く変わっていないものもある。
必要な機能はそのつど適切なものが入っているか調べるべき。

153 :デフォルトの名無しさん:04/12/06 15:34:16
カメラが ある座標Pの中心からR離れた地点を衛生のように回転し、
今向いているX,Z軸方向にN進むにはどうしたらいいんでしょうか。

注視点をPに設定し、角度によって、カメラの始点を変更しているのですが、
X,Z方向にNだけ進むことができません。
X軸回転もありますので、上下への動作も含まれてしまっています。

どのように行列プログラムに直せばいいのでしょうか。

154 :デフォルトの名無しさん:04/12/06 15:52:02
中心が常にPなら、カメラとの距離(P')は円の半径ということになるから、
あとは角度と(P'-N)で位置は割り出せる。

155 :デフォルトの名無しさん:04/12/06 16:15:23
>>154
できれば、簡単なサンプルを記述していただけないでしょうか。
頭でわかっていても、行列式に直すことができないんです。
いろんな人のサンプルを見て何となく理解はしているんですが。

156 :デフォルトの名無しさん:04/12/06 16:16:51
低脳にも程がある

157 :デフォルトの名無しさん:04/12/06 16:32:24
一旦Pを原点に持ってきて回転させてから移動させたらどうよ
それならできるでしょ

158 :デフォルトの名無しさん:04/12/06 17:18:13
>153
もうちょっと整理して順を追って書いてくれないと
何がしたいのかわからん
>X,Z軸方向
X軸方向またはZ軸方向なのか
(1, 0, 1)の方向なのかわからない
>今向いている
てことはカメラのローカル座標系でってこと?

>X,Z方向にNだけ進むことができません。
この間もPからR離れた地点を回転している動作はするの?
Rていう制限がある限り移動できないのでは?
それとも2つの異なった動作を別々に行うってこと?

159 :デフォルトの名無しさん:04/12/06 17:57:42
お、俺以外にも>>153の意味が分からないやつがいたとは。
ちょっと安心した。

160 :デフォルトの名無しさん:04/12/06 19:30:28
たぶん
プレイヤー(座標P)を中心にカメラをぐるぐる回すことができ
プレイヤーからの距離を任意に調節できる(=XZ平面上で向いている方向に進む)
ということかと思ったが

>>X軸回転もありますので、上下への動作も含まれてしまっています。
そうなるとこれがよくわからん

161 :デフォルトの名無しさん:04/12/06 19:35:31
書き方が悪かったみたいです。

P座標をカメラの注視点とし、そのP座標を中心とした半径Rの位置にカメラの視点を置きます。

X,Y軸回転を加えたとき、カメラの視点が半径Rにそって回転します。
カメラは回転中も常にP座標を見ています。(注視点がP座標)

このとき、カメラが向いている方向にまっすぐNだけ進みたいと思っています。

Y軸方向に進んでしまうと 上にのぼっていってしまったり、下に下っていってしまうため、
あくまで 進む方向はX軸方向、Z軸方向の合成です。

皆さんは、どうやってこれを計算式に直していくのでしょうか。




162 :デフォルトの名無しさん:04/12/06 19:37:01
Nだけ進むというのは
注視点と視点の距離Rをつねに維持しつつ、注視点と、視点の両方ともが移動します。

163 :デフォルトの名無しさん:04/12/06 19:39:57
X軸中心に回転させりゃYの値変わるだろ?
漏れが何か勘違いしてる?

164 :デフォルトの名無しさん:04/12/06 19:44:04
>カメラが向いている方向にまっすぐNだけ進みたいと思っています。
V=注視点-視点
Y成分がじゃまなので
V.y = 0.0f
でVを正規化して移動させたい量(N)をかけてやる
V*N
これが移動用のベクトル
これをPに足してやればいいんでないかい?

165 :デフォルトの名無しさん:04/12/06 19:44:49
v = (0, 0, 1);
v * 3x3mat;
v.y = 0;
|v| = N;
pos += v;


166 :デフォルトの名無しさん:04/12/06 19:47:28
あ、やっと>>153の質問の内容が理解できた。
ふぅ・・ 胸の痞えが取れたぜ。

167 :デフォルトの名無しさん:04/12/06 20:42:39
v * 3x3mat ,|V| = N とはどのような処理を行っているのでしょうか。

自分なりに以下のように組んでみましたが、やはり動作が変です。
どこを直せばいいのでしょうか。
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 );



168 :デフォルトの名無しさん:04/12/06 21:03:10
>167
いや素直にそのまま
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 );
// でモデル描画では?


169 :168:04/12/06 21:05:05
あ、D3DXVec3TransformCoordに直しておいて(汗)

170 :デフォルトの名無しさん:04/12/06 21:26:19
m_MovePos.z = 移動値N
m_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);

171 :デフォルトの名無しさん:04/12/06 21:26:54
>>168

教えていただいた通りやってみましたが、無理なようです。
視点と注視点の高さ(Y軸)が常に一緒で、X軸回転などの回転が動作しなくなってしまいました。

カメラのビューや、プロジェクションのトランスフォームは実行する必要はないんでしょうか。
D3DXVec3TransformCoordに直すところはD3DXVec3Transformの部分であっていますでしょうか。




172 :170:04/12/06 21:36:20
俺もせっかく書いたので送信してみた。
ただし、動作未確認。

書く必要は無いかもしれないが、>170の続き・・・

D3DXMatrixLookAtLH( &m_mView, &vEyePos, &m_LookPos, &D3DXVECTOR3(0,1,0) );
d3d.m_pD3DDev->SetTransform( D3DTS_VIEW, &m_mView );

173 :デフォルトの名無しさん:04/12/06 21:36:52
>>170

こちらも試してみましたが、やはりうまく動作しませんでした;;
やはりX軸回転などの回転処理が適切に行われていませんでした。



174 :デフォルトの名無しさん:04/12/06 21:42:04
質問内容を分かりやすく伝えようとする努力すらしてない奴に
付き合わされるのは無駄。

175 :168:04/12/06 21:49:02
>173
1.物体を視点の向きに移動させる
2.カメラを物体を中心に回転させる
2つに分けて考えて、ひとつずつ解決していかないとこんがらがるよ
まずはカメラの回転はすてて「1.物体を視点の向きに移動させる」が
きちんと動作するようにしたほうがいい
で、きちんと動作したら次に「2.カメラを物体を中心に回転させる」を
解決すべし

多分大幅な書き換えになってるだろうから、一発でうまくいくなんてありえない
問題を切り分けてひとつずつ解決していってくれ

176 :デフォルトの名無しさん:04/12/06 21:57:46
>>156
同意w
ひさびさにスレが伸びてるかと思ったらこれかよw
また、座標変換もろくにできねぇ糞餓鬼がきてるなw

初心者質問スレったってこのレベルの奴に何を教えられるのかとw

177 :デフォルトの名無しさん:04/12/06 22:04:08
そういう意味のない書き込みは回答者にとっても邪魔だから止めて欲しい。

178 :デフォルトの名無しさん:04/12/06 22:12:22
>>177
長い事2ちゃんにいるけどこの類の回答を2ちゃんで得るのは不可能だと言っておこう。
まず、こんなのがわかんねぇ奴は3Dプログラムをするための基礎体力がまったく足りてない。
この状態で誰がどんな説明をしても無駄にスレを費やすだけでまったく意味がない。
とどのつまり座標変換がわかってないんだ。
数学Cにのってる一次変換の説明からしないといけない。
もう、教科書買えと、2ちゃんで説明なんかできるかと。
よしんば教えるにしたって図がない。

あえてアドバイスするならはじめから3軸でやるなというところか。

179 :gucchi:04/12/06 22:14:23
まぁ、優秀な奴がみんな、優秀な教師にはなれないからなw
オシエラレナイノモショウガアルマイ

180 :デフォルトの名無しさん:04/12/06 22:25:17
>>179
まあ、そういうことだな。
わかったら、散った散った。

181 :デフォルトの名無しさん:04/12/06 22:46:36
>>170
>>175

いろいろとありがとうございました。
もう少し自分で考えてみようと思います。

182 :デフォルトの名無しさん:04/12/06 22:47:09
質問として最低限の形が整ってれば、それこそ単なる座標変換の話であって、
簡単な質問だろう。キミに質問者を納得させる力がないだけじゃねーの。
他の聞き上手、教え上手がなんとかするからスルーしといてよ。
初心者を見下して悦にいるのが趣味な人は必要ないから。

183 :デフォルトの名無しさん:04/12/06 22:57:45
>>182
貴様の理論はリフレッシュレート論争を強引に進めようとする厨房と変わらんな。
もし、どうしてもやりたければ座標変換スレをたてるがよい。
うまく説明できれば需要は確実にある。
なんたってこれができなきゃはじまらないw

184 :デフォルトの名無しさん:04/12/06 22:59:06
>>182
なお、もし座標変換スレが立ったなら俺は1レスたりとも書き込まないと誓おう。

185 :デフォルトの名無しさん:04/12/06 22:59:30
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人

186 :デフォルトの名無しさん:04/12/06 23:03:27
DirectX9.0を使って2D画像の描画をしたいのですが、
directX関係の本やインターネットで調べてみると、
大きく分けて二つの方法があるようなのでどれを
使えばいいのかが分かりません。

@【directdrawを使ったダブルバッファリング】
オフスクリーンサーフェス、バックバッファ、プライマリサーフェスを
作成して、バックバッファからプライマリサーフェスへフリップして
画面へ2次元画像を描画。

A【ポリゴンへテクスチャマッピング】
平面ポリゴンを作成しそこへテクスチャをマッピングする。

@の方法がインターネットを使ってdirectXプログラム
関係のページを参考にして分かった方法で、
Aの方法が割と新し目のdirectX関係の本を買って
参考にして分かった方法です。

あるページには『DirectDraw』が廃止され『Direct3D』で従来と
同じような2D描画を行うことが出来るみたいなことが書いて
ありましたが、これはAの方法の事を指しているのでしょうか?

初心者ではありますが自分が思うに、わざわざポリゴンを作成
してそこにマッピングするAの方法よりは明らかに
@の方法の方が効率的で速度も速いと思うのですが、
3D描画を全く含まないプログラムを作る時、どっちの方法が
効率的なのでしょうか?どなたか回答お願いします。

あと大きく二つの方法があると先に述べましたが、まだまだ
この勉強を始めたばかりで他にどのような2D描画の方法が
あるのか分かりません。もし他に効率的な方法があれば
そちらも一緒に回答して頂けると助かります。

187 :デフォルトの名無しさん:04/12/06 23:08:19
>>184
ならこのスレで座標変換の質問があったときも一レスたりとも
書き込まないでいただけると皆にとって都合がいいので、そうして下さい。

188 :デフォルトの名無しさん:04/12/06 23:18:53
>186
DX8以降はAしか選択肢がない
けど上手くラッパーなりライブラリなり一度作ってしまえば
使い勝手は@と変わらない
速度に関してはグラフィックアクセラレータ(グラボね)が
ポリゴン表示用に最適化されてるから消して遅くはないと思う
2Dに限っていえばAの利点はアルファブレンディングとか
画像の回転拡大縮小が簡単だということ
そりゃポリゴンだからね
@の方はシンプルなところが(特に学習者にとって)利点だけど
DirectDrawの初期化とかお世辞にもシンプルとはいえない
もし2DからじっくりやっていくんだったらSDLなんかのライブラリを
やったほうがいいと思う
ちなみに最新のSDKでも過去のDirectXのバージョンの開発ができるので
DirectX9SDKのなかにはDirectDrawは入っている
ddraw.hをインクルードして必要なライブラリをリンクすれば
DirectX7時代の書籍や記事、解説はそのまま活用できる
どこをスタート地点にするかは自分で決めるしかない
まずはポリゴン触ってみて「まだ難い」と感じたら
DirectDrawやSDLに乗り換えるのもありだと思う

189 :デフォルトの名無しさん:04/12/06 23:23:08
>>187
皆?wお前だけだろ?w

190 :デフォルトの名無しさん:04/12/06 23:26:55
>>186
・3D演算をHWサポートしていないビデオカード(ほとんど存在しないが・・・)もターゲット。
・必要な画像処理は自分で実装できる。
・D3Dの冗長処理が気にいらない。(速度重視)
ならば@

・画像の変換・アルファブレンド等の機能を簡単に使いたい。
・なんとなく3Dにも興味がある。
ならばA


ここにもw厨が来てるのか・・・

191 :186:04/12/06 23:40:18
>>188
>>190
早い回答ありがとうございます。

やはり今はAの方法が主流なのですね。
回答にあったように取り敢えずAの方法から勉強
していこうと思います。
それから@の方法について考えていこうと思います。

詳しい回答ありがとうございました。
(突然PROXY規制に引っ掛かってしまった為、携帯から返事させて頂きます。IDが違うのはその為です。)

192 :デフォルトの名無しさん:04/12/07 00:02:25
>>186
@は矩形しか転送しないため、転送元と転送先のピクセルのメモリを
単純にコピーすればいい為、最適化されているという意味で高速。
Aのポリゴンという手法は転送元と転送先を決定する際に乗算が少々
行われるので、そのぶん遅くなる。

Aで行われる転送の際の演算はハードウェアのサポートを受けることができるため
(旧称)Direct3Dをサポートしているアクセラレータがあれば殆ど@と差は出ない。


速度以外の面では
@は前述のとおり、結局は「ピクセルデータのメモリコピー」しか行わない為、
せいぜい拡大縮小くらいしかできない。

Aは「転送先・元の形状を常に演算で求めている」ので、拡縮の是非・対象の回転等の
効果はなんの制約も受けずに実行できる。
またピクセルを置く段に当たって、ステンシルやZバッファの参照、アルファ等のピクセル合成
高度なハード支援があれば直接アセンブラ的にデータを操作できるシェーダなど
様々な特殊処理をサポートしている。

193 :186:04/12/07 00:11:00
>>192
やはり他の方の回答にありましたが
アクセラレータの環境があればAの方が
ブレンディング等の面で@より有利なのですね。

回答ありがとうございました。

194 :デフォルトの名無しさん:04/12/07 00:57:58
ほとんどない知識で頑張ってDirectXライブラリ作ってます。
DirectXは8を使って作成しています。
ID3DXFontを使ってテキストの描画を作ってみたのですが、
ウィンドウモードで起動→フルスクリーンに変更→ウィンドウモードに戻す
といった動作をすると、文字が滲んだような(アンチエイリアス?)感じになってしまいます。
最初の起動時は普通にはっきりと出るので、良く分からないです。
ここを間違えたら、この症状が出るというのが分かる方いましたら教えてください。

195 :デフォルトの名無しさん:04/12/07 01:12:08
>>フルスクリーンに変更→ウィンドウモードに戻す
ここしか考えられない

196 :194:04/12/07 01:37:26
>>195
アドバイスありがとうございます。
スプライト描画をとりあえず使ってるのですが、そっちはしっかりできていたり。
デバイスの復元がうまくいかないと普通落ちるし…、とお手上げ状態です。
他に何かアドバイスありましたらお願いします。
少ない情報で申し訳ありません。

197 :デフォルトの名無しさん:04/12/07 01:57:44
>>82 に対する >>83 の態度が気になる。
一体何なんだ...

198 :194:04/12/07 02:19:46
すいません、自己解決しました。
BackBafferFormatを現在の画面モードを使用にしてたんですが、
フルスクリーン時のFormatをちゃんと指定したら直りました。
ご迷惑おかけしました。

199 :デフォルトの名無しさん:04/12/07 11:47:29
頂点バッファによる描画で、3D空間上に描画すると真っ黒く表示されてしまう原因はなんでしょうか。

SetRenderStateで 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 )
を指定しています。

教えてください。

200 :デフォルトの名無しさん:04/12/07 11:53:32
>>199
ライトやマテリアルの設定はしてるの?

201 :デフォルトの名無しさん:04/12/07 11:55:22
ライティングONにしてまっくろっていわれたらまず法線狂ってるかと

202 :デフォルトの名無しさん:04/12/07 12:20:19
XFileなどの表示はちゃんとされるので、ライトの設定は間違っていないと思います。

また、XFileを表示すると 頂点バッファも表示されるようになるんですが、設定されているテクスチャが変な色
になっており、UV座標も設定したものと違ってしまっています。

マテリアル設定というのはやっていないのですが、頂点バッファでもする必要があるのでしょうか?
法線のこともよくわからないのですが、これも設定とかする必要があるのでしょうか。

203 :デフォルトの名無しさん:04/12/07 12:47:24
D3DRS_LIGHTINGをFALSEにしたら表示されるようになったんですが、テクスチャをつけていないときの色が
茶色になっており、カラーを変更しても茶色のままかわりません。

何か原因がわかりるでしょうか。

204 :デフォルトの名無しさん:04/12/07 13:02:32
解決しました。

頂点などを格納していた構造体に float rhw が存在していたことと、ライティングがONになっていたことが
原因だったようでうs。

でもなぜライティングをONにすると真っ暗になるのだろう・・・3Dなのに。

205 :デフォルトの名無しさん:04/12/07 13:10:50
>>204
「3Dなのに」を説明せよ。

ライティングONで黒くなる=法線ベクトルが(0,0,0)だ。


206 :デフォルトの名無しさん:04/12/07 13:13:34
>>205

なるほど。
今設定しているVertex構造体は ライティング済みの頂点フォーマットらしいんですが
それだと法線ベクトルが(0,0,0)になるんでしょうか。

頂点バッファでライトの影響を受けるようにしたい場合はどうやったらいいんでしょうか。

207 :デフォルトの名無しさん:04/12/07 13:22:54
ライティングの影響受けるようにできました。

頂点フラグに D3DFVF_NORMALを加えて、 頂点フォーマットに法線変数を加えたらできました。
ちょっと勉強になったかも

208 :デフォルトの名無しさん:04/12/07 13:30:41
さんざん日記書かれて、「ま、少しは勉強になったな」なんて言いながら
礼も無しで去っていく奴を相手しているお前らが、哀れでならない

209 :デフォルトの名無しさん:04/12/07 13:37:02
>>208
で、何が言いたいんだ?
「自分も回答してみたいけれど実力ないし、
周りをけなせば自分が優位に立てる」という
勘違いをしたいのか?

210 :デフォルトの名無しさん:04/12/07 13:38:23
>>208
ママはぼくちんに食事作ってくれて当たり前。
先生はぼくちんに教えてくれて当然。

まだそういう年齢なんだろ。
…たまに新人でもこういうのはいるが。

211 :デフォルトの名無しさん:04/12/07 13:49:49
>>205

ありがとうございました。
常に法線ベクトルが関係してくるということが今回やってよくわかりました。


212 :デフォルトの名無しさん:04/12/07 14:59:22
>>211
「・・・3Dなのに」というくだりがどうしても解釈できないので、
なぜそのような推測に至ったのかを説明して欲しい。
EX. 「3DだからライティングONにすれば必ずシェーディングされるはず」


213 :デフォルトの名無しさん:04/12/07 15:57:40
>ママはぼくちんに食事作ってくれて当たり前。
確かにこれは当たり前だな。
ま、大概ママは先に死ぬわけだからそれまでにゃ
自分でエサ取れるようにならないとますいけどな。
>先生はぼくちんに教えてくれて当然。
対価を支払ってるなら教えてくれて当たり前でないと困るな。
ここでは教えてくれたらラッキー&感謝だな。

214 :デフォルトの名無しさん:04/12/07 16:12:35
213はまだ子供みたいだな

215 :デフォルトの名無しさん:04/12/07 16:13:40
大人らしい思考を教えてください。

216 :デフォルトの名無しさん:04/12/07 16:52:44
>>215
人にモノを教えるってのは、自分の勉強にもなる。
頭の中で漠然と理解していることを文章化するということは、
理解を明確化することにつながる。
ゆえにオレは回答する。気が向いたときに。

217 :デフォルトの名無しさん:04/12/07 17:01:26
ぜんぜん会話が成立してない。

218 :デフォルトの名無しさん:04/12/07 17:06:43
みんな、釣られすぎですYO!

219 :デフォルトの名無しさん:04/12/07 17:51:04
>>212

別に深い理由はないんですが、ライティングが設定済みの2Dと違って、3Dを使っているのに
なぜライティングの影響を受けないのだろうと思っていました。

実際はライティングの影響を受けたら暗くなったんですが、法線の方向はポリゴンを作ったときに
自動的に決まるものだと思っていたので、なぜ暗くなるのかわからなかったんですよね。


220 :デフォルトの名無しさん:04/12/07 19:01:07
>219
3DかDirectXの初心者サイトなり書籍なり読んで
3Dに対する知識を深めたほうがいいね

221 :デフォルトの名無しさん:04/12/07 19:18:05
ちゅーか
>>219を見る限り日本語から…

222 :美酔 ◆t19NxEZjm2 :04/12/08 10:42:50
グラフィックボードがDirectX8までしか対応していないようですが、
DirectX9SDKでも開発は可能でしょうか?

223 :デフォルトの名無しさん:04/12/08 11:05:49
開発だけならどんなに古いビデオカードも、
Windowsさえ正常に動作するのなら可能。
コンパイルするのにビデオカードの性能などいらない。

224 :美酔 ◆t19NxEZjm2 :04/12/08 12:20:06
>>223
開発は可能だけれども動作確認ができない可能性があるということですね?
動作確認までしたいので、DirectX8SDK辺りが欲しいんですけれども、見つからないんです。
何かいい方法はありませんか?

225 :デフォルトの名無しさん:04/12/08 12:39:54
>>224
DirectX9でもハードウェア支援がある機能と
ソフトウェア処理でも速度に問題がないもの
だけ使えばいい。

226 :美酔 ◆t19NxEZjm2 :04/12/08 12:41:52
>>225
なうほど。
それを参考に色々調べてやってみます。
ありがとうございました。

227 :デフォルトの名無しさん:04/12/08 12:42:54
DirectX9SDKでもd3d8.hとd3d8.libが入っているので
そちらをリンクすれば多分いけると思います

228 :デフォルトの名無しさん:04/12/08 12:43:30
・DX8相当の機能までしか使わないコーディングを心がける
 (=9で追加された機能を使わない)
・DX9相当のグラフィックボードを買ってくる

229 :デフォルトの名無しさん:04/12/08 12:55:15
DirectX9SDKでもDX8のソースは一部修正で通るがヘルプが入手できない
Cマガなどの雑誌のバックナンバーを漁ったらいいんじゃないか?
もし入手できるならDX7のヘルプもいいこと書いてあるぞ

230 :デフォルトの名無しさん:04/12/08 13:31:16
DirectX9 2003Summerを利用しています.

LPD3DXMESH m_pMesh;
D3DXCreateMeshFVF(numFaces, // 面の数
numVertices,// 頂点の数
D3DXMESH_MANAGED, D3DFVF_XYZ|D3DFVF_NORMAL, device, &m_pMesh);

numFaces, numVertices以上の面,頂点を追加したい場合どうしたらよいのでしょうか?

新たにLPD3DXMESHを宣言,
D3DXCreateMeshFVFで追加後の面の数と頂点の数を設定して
頂点とインデックスバッファを1つずつコピーしてCloneMeshをしなければならないのでしょうか?

また,初期化の時点では利用しないけれど,予め多めに面と頂点の数を設定しても構わないのでしょうか?


231 :デフォルトの名無しさん:04/12/08 14:41:01
>>223
DirectX9SDKをインストールしておけば、DirectX8SDK環境で制作することが可能です
もちろん7でも6でも可
lib 追加して Direct3Dインターフェイスを取得するときにバージョン指定でOKだと思います

>>229
普通に手に入りマスタ
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=09343A34-6D91-4708-A2DA-7E98CF7EC872

232 :デフォルトの名無しさん:04/12/08 17:05:04
まあintel 810とか815のオンボードだと
ソフトウェアでもDirectX9は起動できないわけだが

233 :デフォルトの名無しさん:04/12/08 17:18:07
DirectXの起動など、どんな最新環境でも不可能だ。
唯一あるとすれば>>232の脳内だけ。

234 :デフォルトの名無しさん:04/12/08 18:25:53
DirectX = Direct3D と思ってる奴をどうにかしてもらえませんか。

235 :232:04/12/08 19:15:28
しょーもない揚げ足取りですねモマイラ

236 :デフォルトの名無しさん:04/12/08 20:15:51
2次元の玉ころがしのゲームを作っています。
Drawを使って画像を描画しているのですが、
壁が四角形だけではなく微妙に湾曲したり菱形だったりしたいのです。
こういう場合の当たり判定はどうすればいいのでしょうか?
(9.0b)

237 :デフォルトの名無しさん:04/12/08 20:31:20
>>235
用語の使い方が適切でない以外にも、
DirectX9から3Dデバイスが使えないという認識も間違っている。
ステンシルバッファが使えないなど、基本的な機能が欠落しているだけで、
HALで動作するプログラムは書けるし、実際にテストして確認済み。
馬鹿の上に知ったかで、どうしようもないわけだが。

238 :デフォルトの名無しさん:04/12/08 20:33:46
皆さんテレ屋なんですね。もっと優しく言えばいいのに。

239 :デフォルトの名無しさん:04/12/08 20:39:41
自分でプログラムを作りもせず、SDKのサンプルをダブルクリックしただけで、
動かないと勝手に思いこんだアホがいるのはこのスレですか?

240 :デフォルトの名無しさん:04/12/08 21:54:30
パーティクルエディタ作ってるんだけど、ポリゴンは出せるんだけど
3Dの線をどうやって表示するか分からないんです。
グリッドを表示したいんだけど・・・


241 :デフォルトの名無しさん:04/12/08 22:00:38
MeshViewerのソースをみればいい、

242 :デフォルトの名無しさん:04/12/08 22:02:12
SDKを読んだとは思えない質問だなぁ・・・

243 :デフォルトの名無しさん:04/12/08 22:05:41
HALをハルって言う奴はとっとと逝け!!!!!!!!!!!!!

今が冬だから命が芽吹く季節が待ち遠しいのか
太平洋戦争を何故今振り返っているのかとか

じつに紛らわしいんじゃコラ!!!!!!!!!!!!!!!!!


244 :デフォルトの名無しさん:04/12/08 22:09:28
>240
パーティクルエディタなんて作る前に
初心者本でも目を通してください

てか調べもしてないだろ?
>1読めよ
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
調べもしてない人はこのスレで質問する権利はありません
本気で調べたなら聞くまでもないだろ?
そもそも自分のソース見てみろよ
ワイヤーフレームじゃなくてポリゴンで表示するように指定してるところがあるだろ?
何でそこのパラメータをいじればできるんじゃないかとか予測もつかないのか不思議でならない

245 :236:04/12/08 22:15:50
おいちゃん調べても出てこなかったんですが、なぜかスルーされている罠(´・ω・`)

246 :デフォルトの名無しさん:04/12/08 22:17:01
>>236
DirectXの問題じゃないからな。
点と直線の公式を使って距離を計算しろ。

247 :デフォルトの名無しさん:04/12/08 22:18:21
「HAL」を会話で使用する際の言い方はどれ?

・ハル
・エイチエーエル
・ハードウェアアブストラクションレイヤ
・ハードウェア抽象化レイヤ
・その他

248 :デフォルトの名無しさん:04/12/08 22:18:38
>>243
なにキれてるんだ?
ハルとヘル。それでいいじゃないか。

249 :デフォルトの名無しさん:04/12/08 22:24:29
ということはFlashみたいに画像と画像の当たり判定をしてくれる関数みたいなのはないという事ですか(´・ω・`)
綺麗なカーブじゃなく変則的な曲線を描いている場合ってどう計算すればいいんだろ・・

250 :デフォルトの名無しさん:04/12/08 22:27:31
ちょっと違うが、
charを「キャラ」「キャラクター型」「チャー」「チャラ」「文字型」って、知人の間で呼び方がバラバラ……訳の分からんのも混じってるし…
せめて、聞いた時に何を言いたいのか分かる表現にしてほしいな(何の話か意味が分からなくなったりする)

251 :デフォルトの名無しさん:04/12/08 22:29:55
>>249
仮令変則的であろうとも曲線が与えられているなら計算可能では?

252 :232:04/12/08 22:38:12
>>237
>>DirectX9から3Dデバイスが使えないという認識も間違っている。
どう変換したらそうなるんだ、そんなこと書いてないが
>>233-234と同レベルだぞ?

>>239
>>動かないと勝手に思いこんだアホがいるのはこのスレですか?
んなアフォではないがな

253 :デフォルトの名無しさん:04/12/08 22:39:21
>249
曲線の式があるならそれで計算すればいいし
人の手の書いた画像で式も出せないなら
ピクセル単位で計算すればいい
あたり用の画像を準備するのがてっとりばやいかな?
白黒の2値画像で黒の部分があたりになるようなルールで画像を作って
それをもとに判定をするとか

254 :236:04/12/08 22:49:53
>>251
>>253
レスありがとうございます。
そっか、色判定でなんとかなるかも・・・か。
調べてみます(´・ω・`)


255 :デフォルトの名無しさん:04/12/08 23:24:39
ハイトマップのエディタのようなものを作ろうとしてるんですが、
データの持ち方、描画の方法など、どうすればよいか迷っています。

よくある2DRPG用のマップエディタのような感じで
・縦×横で指定した広さで格子状のマス目を用意し、
・テクスチャを貼った四角ポリゴンを敷き詰めていきながら
・高さをペインティング
というような作業でエディットするようにしようと思ってます。

データの持ち方としては、今のところ、マス目一つごと(四角ポリ一枚(三角ポリ2枚)ごと)の
テクスチャの種類(ここは砂、とか、ここは草、等…)の配列と、
「縦×横」分の高さデータの配列を作ろうと考えています。
それで現状では描画の方はマス目一つずつ(”四角1枚”=”三角2枚”)
DrawPrimitiveしていくしかないような気がしているのですが、
それでは速度的に大分厳しいのではないかと考えています。
マスごとにテクスチャはころころ代わるので「一つの大きな頂点バッファを用意して一気に描画」したりとか
ストリップで描画するのもできないですよね?
テクスチャも一種類につき126*126とかの解像度が必要なので
やはりマスを一枚描画するごとに毎回テクスチャをセットしてDrawPrimitiveしないといけない気がします。
(一枚のテクスチャに何種類も収めてUV操作で描き分けるような事はできない)

お聞きしたいのは、上の考え方や理解が間違ってますでしょうか?ということと、
皆さんだったら上のような仕様のものを作るとして、どんな感じでデータを持たせ描画するでしょうか?
ということです。その他アドバイスやアイデアなどもあったらなんでも教えて頂きたいです。
もちろん、技術のある方が高度な事をしようと思えば幾らでもできることだと思うのですが、
私はまだ大したことはできませんので、上の質問からレベルをなんとなく察して頂いて、
それに見合う、シンプルで分かりやすいアプローチがあればそういうものの方が助かります。
よろしくお願いします。環境は2003Summerです。

256 :236:04/12/08 23:25:12
すみません、"色判定" directxなど色々検索してみましたがこれといったものが出てきませんでした。
この関数を使えとかこれでググれというのがあれば助言お願いします(´・ω・`)

257 :デフォルトの名無しさん:04/12/08 23:35:04
>>255
速度的に問題が出るようなら、
あらかじめテクスチャごとに描画するマスを分けておいて、
まとめて描画するとかの工夫が必要かもね

258 :デフォルトの名無しさん:04/12/08 23:36:17
質問失礼します。

DirectX9.0 oct (最新版)
を入れたら、新規作成プロジェクト(VC++)からDirectXプロジェクトが無くなってしまいました。
何故か分かる方いらっしゃいますか???
最新版のD3DFrameが欲しいのですが、、、


259 :デフォルトの名無しさん:04/12/08 23:39:36
>>256
手書きなら>>253の言うマスク画像が良いと思う
裏でモノクロ画像を作って位置判定させて、黒い画像の上に来たら壁って感じで

260 :236:04/12/09 00:08:03
>>259
VBで色判定を習ったのですがそれとは違うのでしょうか?
マスク自体はまだやったことがありませんが簡単にできそう・・・としても、
PosX,PisYの色が0x000000(になるのかな?)という式の使い方が分かりません(´・ω・`)

261 :デフォルトの名無しさん:04/12/09 00:17:19
>>252
恥の上塗りご苦労様。

> まあintel 810とか815のオンボードだと
> ソフトウェアでもDirectX9は起動できないわけだが
知ったかでこういういい加減な発言をする前に、
少しは自分でプログラムを組め。

262 :232:04/12/09 00:20:48
>>261
自分で組んだ上で言っているが?

263 :デフォルトの名無しさん:04/12/09 00:28:59
つまりデバイスを初期化するときに、
サポート外のパラメータを設定しただけだろう。
結局>>262が無能なだけ。

264 :デフォルトの名無しさん:04/12/09 00:30:31
ここは初心者質問スレです。関係ない話は迷惑ですので他所でやってください。

265 :デフォルトの名無しさん:04/12/09 00:32:51
>>261,262
とりあえず消えてください。
お願いします。

266 :デフォルトの名無しさん:04/12/09 00:34:04
初心者が起こしやすい初期化ミス。
・16bitしかサポートしていないビデオカードで24/32カラーモードの指定した
・ステンシルバッファがサポートされていないビデオカードで無理に使おうとした

267 :デフォルトの名無しさん:04/12/09 01:38:16
>>236
GamDevPukiWiki - 点が三角形内に含まれるか調べる
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
凸でも凹でも楽勝ッス

268 :236:04/12/09 01:56:13
>>267
ありがとうございます。
これで多角形の当たり判定はどうにかなりそうです。

問題は綺麗なカーブを描いていない曲線(スキーのジャンプ台みたいに徐々に曲線がきつくなる等)・・・。
やはり>>253>>259に書いてある色判定が気になりますので、
色情報の取得の仕方について助言(これでググれなど)を所望してます。

269 :デフォルトの名無しさん:04/12/09 01:56:31
DirectXでキャプチャデバイスを複数選択する場合に、
http://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してから検索しなおすべきなのでしょうか?

270 :デフォルトの名無しさん:04/12/09 03:46:28
>236=>268
そういう機能があるわけじゃないよ
ビットマップといってもただのバイナリファイルだからフォーマットさえわかれば
自分で読み込めば、情報を取得できる
fopenは知ってる?
だからこの場合「BMP ファイルフォーマット」で検索すれば出てくると思う
BMPは数種類のビット深度があるけど、とりあえず24ビットのBMPに限定とか
無圧縮限定とかにすれば、読み込みの処理はそんなに難しくないと思う

271 :デフォルトの名無しさん:04/12/09 03:57:55
>>270
言語VBっぽくない?
VB詳しくないけど、fopenだっけ?

272 :デフォルトの名無しさん:04/12/09 04:13:40
>271
げ、VBっぽい
漏れはVBなんてやったこともない
でもバイナリファイル読めるんじゃないの?
ファイル処理はどの言語でも基本だろうし

273 :デフォルトの名無しさん:04/12/09 04:38:49
当たり判定用の白黒画像を別途用意汁!
実際に表示するサーフェスとは別に当たり判定用に描く。

メリット
・自機がいる範囲(32x32程度?)だけチェックすればいい
・2値なので描画が高速
∴この2点から処理速度が高速
・当たり判定のために画像作成に制限を受けない
・実装が容易

デメリット
・当たり判定用の白黒画像を用意する必要がある

274 :デフォルトの名無しさん:04/12/09 07:39:43
>>273
敵と敵との判定をやってくれ、とか余裕で仕様変更来るのでだめぽ

275 :236:04/12/09 08:01:35
色々レスありがとうございます。
>>273
白黒の画像はすでに用意できているのですが、そのチェックの方法が分からないんです(´・ω・`)
>>274
玉ころがしに敵はでてきません。
もし対戦みたいにするなら、自分も玉なら相手も玉なので普通に円の当たり判定で問題ないっす。

276 :デフォルトの名無しさん:04/12/09 10:53:17
>>275
チェック方法とはなんぞや?
ビットマップ画像へのポインタを取得できれば実データにアクセスできるから、
あとは位置(X,Y)の色を調べるだけよ。

277 :デフォルトの名無しさん:04/12/09 12:20:53
>275
そんなのいくらでも方法はあるだろ
ファイル自前で読み込んでアクセスっていうのは前にも書いたが
他にも、別にツールを作るという手もある
ツールは非DirectXのアプリケーションとして作って、
ウィンドウにBMP表示させてサイズとAPIのGetPixelを使って色を取得して
テキストデータなり、バイナリデータなり自分で扱えるフォーマットに出力して、
それを読み込んで使えばいい

ファイル処理はプログラムの基本だと思うんだがなぁ
なんでそこすっ飛ばしてDirectXなんかやってるんだ?
非常に不思議
完全に順番間違ってるよ

278 :デフォルトの名無しさん:04/12/09 12:33:41
>>277
「DirectXでゲームプログラミング」みたいな本みて、”ゲーム”に飛びついたとか

279 :デフォルトの名無しさん:04/12/09 12:48:22
いやむしろ自分からプログラムに興味持った人間なら普通だろ
今時のにわかSE候補PGとかじゃなければ

ベーマガのソース打ち込みからやろうぜ

280 :255:04/12/09 14:38:37
>>257
テクスチャごとにまとめるのは有効そうですね。
ありがとうございます。
もうちょっと皆さんの意見を色々お聞きしたいのですが
あんまりないようなのでまた某所に行ってきます。ありがとうございました。

281 :デフォルトの名無しさん:04/12/09 16:21:33
>>280

>>257が言われているのは、あくまで速度的に問題がある場合なので、
実際に問題がない限りするべきじゃないと思う。

ほとんどの場合、速度的に問題はないと思うので、そんなに気にすることもない気がする
逆に、そういう仕様にしてしまうと あとあと仕様変更に耐えられなくなると思う

本当に 速度に問題がある場合は 他にネックになっている部分があるのではないかと思われる

282 :236:04/12/09 16:48:41
>>276-277
レスありがとうございます。
そか、バイナリを調べればよかったのか。
いちいち画像を描画して、画面上のX,Y座標の色情報を取得しようと奮闘してますた(´・ω・`)
スレ違いっぽい質問なのにほんとありがとうございます。

基本なことでも学んだ時にどういう場面で使ったらいいのか分からず、
今まですっかり忘れてましたよ、ええ○| ̄|_ 多分もう忘れないかt

283 :デフォルトの名無しさん:04/12/09 20:09:41
>>282
まぁ、これも勉強だよ
失敗した時の方が勉強になる事が多い

284 :デフォルトの名無しさん :04/12/10 21:20:46
なんとなくこちらなら
「ゲーム開発のための物理シミュレーション入門」
(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 ってのが分かりません。
コメントには粒子の質量を計算するとありますが、何を意味してるんでしょうか。
マススプリングやったことある方とかいらっしゃいましたら教えてください。

285 :デフォルトの名無しさん:04/12/10 23:12:25
>>284
本は読んだ事ないが、コードを見た限りでは
「質点に連結する(もしくは、関連する)スプリング数」だと思われ。

286 :284:04/12/10 23:51:57
>>285
すいません、質点に隣接する面の数だったみたいです。
ヒントになって思いつきました。助かりました。
ありがとうございました。

287 :273:04/12/11 04:52:58
>>274
敵と敵なら対応してるよ・・・。

288 :デフォルトの名無しさん:04/12/11 07:49:13
>>287
どうやんだ?

289 :デフォルトの名無しさん :04/12/12 21:12:46
キャラクターのモデルなどを、地面(のメッシュ)のポリゴンの法線に
あわせて傾かせるのってクオータニオンとか使わないと無理ですか?
徐々に綺麗に補完してあわせたりする必要はなくて、
スパっと一発で合わせるのでよければオイラーでもできるんでしょうか。
地面の法線は、そのポリゴンを構成する二辺の外積で求めるとして、
その方向ベクトルをどうしたらキャラクターの回転角に変換できるのでしょうか?
ご存知の方がいらっしゃいましたら教えてください。お願いします。
環境はvc6とdx9 2003summerです。

290 :デフォルトの名無しさん:04/12/12 21:17:13
外積が出来て内積が出来ないのは>>289の仕様ですか?
スペック的にアップグレードしても無駄なので、
古いものは捨てて、新しいものに買い換えてください。

291 :デフォルトの名無しさん:04/12/12 21:23:57
>>290
すいません。仕様かもしれません。
内積で地面の法線とのなす角を求まるとして、
それはどっちの方向に回転させればよいのでしょうか
最終的にはキャラクターの回転の変換行列を求めたいのですが…
後半2行は意味が分かりません。

292 :デフォルトの名無しさん:04/12/12 22:45:53
>291
内積とったベクトルで外積とれ


293 :デフォルトの名無しさん:04/12/12 23:00:05
DirectX9で、ライン描画にD3DXLINEを使っていますが、2つ以上のラインを描画するときに、
非常に処理が重くなってしまいます。
2D空間だけの描画でいいのですが、通常使われている描画処理はどのようにされているんでしょうか?

Draw( 開始, 終了 ) のように描画したいと思っています。

294 :デフォルトの名無しさん:04/12/13 00:20:53
>293
頂点フォーマットにRHW指定してワイヤフレームで表示
初心者本なり初心者サイトなりで順を追ってやっていったら?
大体取り扱ってると思うんだけど…

295 :デフォルトの名無しさん:04/12/13 01:02:36
>>293

ありがとうございます。
ワイヤーフレームではなく、D3DPT_LINELISTで描画を試していて、うまくいかなかったんですが、
rhwを含む頂点フォーマットにするのを忘れていました^^;

LINELISTでもワイヤーフレームでもいいのですが、
この線の幅の調整とかってできるんでしょうか?


296 :295:04/12/13 01:03:07
>>293となってましたが、>>294です

297 :デフォルトの名無しさん:04/12/13 01:40:29
D3DXLINEって何?

298 :289:04/12/13 01:48:01
>>292
ありがとうございます。キャラの↑方向のベクトルと、
現在キャラが載ってる地面のポリゴンの法線ベクトルでできる
平面に沿って(つまり外積を軸に)回転すればよい、ということですね。
理屈と図は頭の中で分かっていると思うのですが、
「あるベクトルを、別のあるベクトルを軸に〜度回転させる」
というのはやっぱりクオータニオンを使わないとできないでしょうか。
もう少し具体的にどういう計算をして
最終的にキャラクターの回転変換行列(HPB or YPR)に入れる度数に
すればよいか教えていただけると助かるのですが。

299 :デフォルトの名無しさん:04/12/13 01:59:23
>298
D3DXMatrixRotationAxis

300 :デフォルトの名無しさん:04/12/13 02:13:51
>>297

ID3DXLine
DirectX9から搭載された機能

301 :297:04/12/13 02:38:59
>300
thx
ヘルプ見たらあった

302 :デフォルトの名無しさん:04/12/13 15:41:05
始点と終点を中間点を通る円弧を作成するプログラムを作成したのですが、
線が二重になってしまったり、円弧の向きがプラスとマイナス逆になったりと、
うまいこと描画してくれません。どの辺を改良したら良いのでしょうか?
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;
}


303 :デフォルトの名無しさん:04/12/13 16:59:45
DirectX 8.1b SDK ってもうDL出来ないんでしょうか?
場所がわからない・・・

304 :デフォルトの名無しさん:04/12/13 19:20:34
プログラマじゃ無いのですが、DirectXの質問ということでひとつお願いします。

調べてみたところ、トゥーンシェーダというのは一般に、法線から算出した
ライティング情報をテクスチャのUV値としてアウトプットし、
あらかじめグラデーション済みのテクスチャと合わせてレンダリングするもの

…だと思うのですが、これはつまり通常のテクスチャとの共存は出来ないのでしょうか。
或いは実用的な速度にならないのでしょうか。

305 :デフォルトの名無しさん:04/12/13 19:29:19
>…だと思うのですが、これはつまり通常のテクスチャとの共存は出来ないのでしょうか。
>或いは実用的な速度にならないのでしょうか。

実装次第

306 :デフォルトの名無しさん:04/12/13 20:31:46
>>305
すいません、重ねてお尋ねしたいのですが、その実装、
もしかして頂点シェーダのほうで2つのテクスチャ分の情報を出して、
ピクセルシェーダ側で合わせる程度で済むのでしょうか?

素人考えだと、それだけならそれほど重くならない様に思えてしまうのですが、
あちこちのログでピクセルシェーダ自体が鬼門……というか重いという記述を見かけましたので、
その程度でも結構な負荷になるのでしょうか?

307 :デフォルトの名無しさん:04/12/13 21:50:47
>304
マルチテクスチャってのは知ってるか?

>303
DirectX9SDKでもDirectX8の開発できるから
DirectX8SDKをダウンロードする必要はない


308 :デフォルトの名無しさん:04/12/13 21:54:29
サンプル入手できないけどな。

309 :デフォルトの名無しさん:04/12/13 22:22:31
>>307
ここでマルチテクスチャを出して頂いたと言うことは、
つまりピクセルシェーダを使わずに済む方法と言うことでしょうか?

想像ですが、モデル側のUV値は頂点シェーダを利用して計算し、
そのUV値をトゥーン用、それとは別に通常のUV値をD3DFVF_TEX2として持ち
マルチテクスチャを使った固定機能でレンダリングするみたいな話でしょうか。

いずれにせよ通常のテクスチャ付きトゥーンシェーディングは、本職の方ならどうやら難しく無さそうですね。
モデル作ってプレゼンしなければだったのですが、どうやら普通にテクスチャ有りで行けそうで一安心。
お付き合いありがとうございました。

310 :デフォルトの名無しさん:04/12/13 22:48:44
>309
それでいけるはず
注意するとすればマルチテクスチャするときはテクスチャステージステートの設定が必要なことぐらい?

ググれば多分ピクセルシェーダを使わないトゥーンシェーディングやってる
サンプルとかみつかるんじゃないかな?

できればUV値の計算は頂点シェーダでやったほうがいいけど
プレゼンくらいなら無理しなくてもいいのかな?

311 :デフォルトの名無しさん:04/12/13 23:01:14
>>310
いや助かります。出しゃばりすぎるのは最悪としても、
ある程度知識がないと誘導しづらいものでして。

レスを参考にもう少し勉めてみます。重ね重ね感謝です。

312 :デフォルトの名無しさん:04/12/15 22:14:59
視錐台カリングを行おうとしてるんですが、
まずカメラが移動回転してない時の視錐台(の6平面ボックス)を求めるまでは良いとして、
カメラが移動回転した時の視錐台(の6平面ボックス)へ掛ける変換行列を求めたいです。

カメラは
D3DXMatrixLookAtLH( &m_matView, &m_vLookFrom, &m_vLookTo, &m_vUpVec );
D3DDevice->SetTransform( D3DTS_VIEW, &m_matView );
として、視点と注視点の座標を入れて設定しているだけなので、
ここからカメラの移動回転変換行列を求めるにはどうしたらよいのでしょうか。
上の「m_matView」を使ってよいのでしょうか?

313 :デフォルトの名無しさん:04/12/15 22:59:44
カメラ行列 = ビュー行列^-1

314 :デフォルトの名無しさん:04/12/15 23:01:56
>>313
上でいうm_matViewの逆行列ってことですね。サンクスコ。

315 :デフォルトの名無しさん:04/12/16 10:29:04
DX9.0bを使っています。2点ほど質問があります。よろしくお願いします。

・Xfileを読み込んでID3DXBaseMeshの形で持っているメッシュの境界球を
D3DXComputeBoundingSphereで求めようとしているのですが、
第一引数の「最初の位置へのポインタ」っていうのはなんでしょうか?
どうしたらこの「最初の位置へのポインタ」を得る事ができるでしょうか。

・DrawSubsetでメッシュをレンダリングする際、
テクスチャありのメッシュをSetTextureをして描画したあとに
続けてノンテクスチャの物体を描画するにはどうしたらよいでしょうか。
前のテクスチャ情報が残ってしまうので、これをクリアする方法を教えてください。

以上です。よろしくお願いします。

316 :315:04/12/16 11:37:10
すいません、一つ目の質問の、第一引数の「最初の位置へのポインタ」は、
ID3DMeshのもってる頂点バッファの最初の位置へのポインタだと分かりました。
で、以下のようにしてみたのですが、実行すると強制終了します。
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();

317 :315:04/12/16 12:02:00
何度もすいません、
D3DXComputeBoundingSphereの第三引数が間違えてました。
ここはFVFのサイズなので
D3DXGetFVFVertexSize(pMesh->GetFVF())
とすべきでした。

引き続き2個目の質問の方をよろしくお願いします。

318 :デフォルトの名無しさん:04/12/16 12:17:06
SetTexture( 0, NULL );

319 :315:04/12/16 12:24:39
>>318
ありがとん!!できました!

320 :デフォルトの名無しさん:04/12/16 14:10:27
!ってどういう意味?

321 :315:04/12/16 14:32:00
超度々すいません。
今度は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;
}

322 :315:04/12/16 14:37:13
貼り付け時の編集でミスりました。
下から三行目、正しくは下のようにしています。

v = (D3DXVECTOR3*)( pV + (FVFSize * i) );

323 :デフォルトの名無しさん:04/12/16 16:32:21
>>322
pVがWORD*だからだろ。
BYTE*にしな。

324 :デフォルトの名無しさん:04/12/16 17:26:50
>>323
いけました!ありがとうございます。

325 :デフォルトの名無しさん:04/12/18 10:41:47
すいません、今までXファイルからロードしたメッシュをDrawSubsetで描画していたのですが
このたび訳あってDrawIndexedPrimitiveで描画してみました。
すると今までDrawSubsetではまともに描画できてたポリゴンが原形をとどめないほど滅茶苦茶に
なってしまったのです。
誰かこの原因がわかる方いらっしゃらないでしょうか?
もしいらしたら何卒ご教授お願い致します。

ちなみに使用した頂点バッファとインデックスバッファはID3DXMeshのGetVertexBufferとGetIndexBufferで
取得したものです。1マテリアルのモデルしか使ってないので頂点バッファもインデックスバッファもオフセット
は0です。


326 :デフォルトの名無しさん:04/12/18 10:56:02
> すいません
なぜ謝ってるんですか?
わけがわかりません。

327 :デフォルトの名無しさん:04/12/18 11:07:03
必要と思われる部分のソース晒さないと分かるわけないと思いますよ。
お前等当てずっぽうで答えを探れっていうことですか。
(そんな風に思って無くても結果的にそういうことをしている)
結局こういう人って、すいませんとか言っておきながら
その実全然そんな風に思ってないってのが手に取るように分かる。
口だけで謙ったフリ。

328 :デフォルトの名無しさん:04/12/18 12:02:09
>325
FVFとプリミティブタイプはきちんと取得してものを使ってるか?

329 :デフォルトの名無しさん:04/12/18 16:34:51
>>326
日本語独特の

すみません=ごめんくださいませ

だと思われ。

330 :325:04/12/18 20:28:22
>>326
申し訳ありませんでした。自分でもどの辺に原因があるのか見当が付いてないのでソース
のどの部分を貼るべきか判断が付かなかったもので・・・。全部貼るのはさすがに迷惑だ
と思うので今度からは少なくとも自分なりに原因がありそうな所がわかってから書き込む
ようにします。

>>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を使っています。

331 :デフォルトの名無しさん:04/12/18 22:37:29
>自分でもどの辺に原因があるのか見当が付いてないのでソース
>のどの部分を貼るべきか判断が付かなかったもので・・・

うそこけ。しらじらしい。

332 :デフォルトの名無しさん:04/12/18 22:58:53
こいつの周りではこの程度の嘘が通用してるんだろうか。

333 :デフォルトの名無しさん:04/12/18 23:05:42
基地外がいるようですね。

334 :デフォルトの名無しさん:04/12/18 23:07:20
そういう言葉を使ってはダメですよ、325さん^^

335 :325:04/12/18 23:42:30
>>>334
いやいやいや!>>333は俺じゃないっす!本当です。

>>331
>自分でもどの辺に原因があるのか見当が付いてないのでソース
>のどの部分を貼るべきか判断が付かなかったもので・・・

これも嘘じゃないです。まぁ、確かにこれが貼らなかった理由の全てではないんですけど。
とりあえず見られたら自殺モノの恥ずかしい変数名とコメントを全部書き直してから貼ろう
と思ってたってのもありまして・・・。
とにかく当分の間自己解決目指してやってみます。
どうもお騒がせしました!

336 :デフォルトの名無しさん:04/12/19 00:29:12
さようなら。上っ面野郎はもう来ないで下さい。

337 :325:04/12/19 00:42:09
・・・って言ってるそばから自己解決しました!!
どうも皆さんご迷惑おかけしました〜!

338 :デフォルトの名無しさん:04/12/19 00:54:10
質問して答えてくれた人も居るんだから、
自己解決したらどうやって解決したか書くのが礼儀ってもんだろ?
やっぱこういう奴なんだよ。もう人間性が根っからのクソ。氏んでいいよ。

339 :デフォルトの名無しさん:04/12/19 09:59:44
質問者も回答者もとりあえず>>1を読め

340 :デフォルトの名無しさん:04/12/19 14:45:49
>>337
そうか、もう2度とくるなよw

341 :デフォルトの名無しさん:04/12/20 01:30:37
ちょっと質問の為の前置きが長くなってしまいますがすいません。

簡単な2DRPGなどをGDIで作ってみたことがある方は分かると思うんですが、
マップチップなどの背景をスクロールさせるとき、
バックバッファに上下左右を一マス分だけ余計に読み込んでおく事で
滑らかにスクロールさせたりする方法があるじゃないですか?
例えばキャラを上方向に動かすときに、ぱっと一気にマップチップ全体を
下に一マス分ずらすことでスクロールさせる(したようにみせる)のではなくて、
ちゃんと下に消えたドット分が上から徐々に現れ、滑らかにスクロールして
一マス分動いたところで止まる、というような。

いま、DXを使って3Dのゲームを作っているのですが、
ゲーム内のウィンドウを自作したいと思っていまして、
(ウィンドウの表示自体は変換済みポリゴンを使う予定)
そのウィンドウ内で、アイテム(に限らずですが)の一覧表示・スクロールをするときに、
上の2DRPGのマップのように滑らかにスクロールさせたいと思っています。
そうしたい場合、その2DRPGのマップスクロールのような要領で、
一時的にどこかに一マス分だけ大きく一覧を表示しておいて、
必要な部分だけ拾って表示するようにすれば
滑らかにスクロールさせられますよね?

それで、ここから質問なのですが、そのように表示を一時退避させて、
かつ必要な所だけ取ってこれるビットマップ領域みたいなのは
DXで自由に作れるんでしょうか?
できるとしたらどうやればよいか教えてください。
もしくは、別の方法でこうすればできる、という方法などあれば
教えていただけると嬉しいです。よろしくお願いします。DXは9.0を使ってます。

342 :デフォルトの名無しさん:04/12/20 02:10:30
>341
RenderTargetをテクスチャにすればできると思うが、あんまりメリットを感じないなぁ
マップチップのサイズと画面サイズと作り方によるけど多くても2000〜3000頂点かな
確かに平均的には頂点計算は減るけど描画するピクセルの面積は変わらないから
そんなに高速化できるとは思えない


343 :デフォルトの名無しさん:04/12/20 02:27:18
>>342
なんとなく質問の意図が伝わっていないような気がするのでありますが、
やりたいことは
マップチップとかいう概念を使った2DRPGのマップをDXで作りたいのではなくて、
それに用いられるようなスクロール法を用いた
「3Dゲームに使う自作ウィンドウ内での、アイテム(など)の滑らかなスクロール付き一覧表示」です。

344 :デフォルトの名無しさん:04/12/20 02:45:39
ビューポート変更して描画

345 :デフォルトの名無しさん:04/12/20 02:57:40
>>344
>表示を一時退避させて
という手段にこだわりすぎだと思うよ。
目的は要するに固定領域内のすきな位置にアイコンなんかを描画したくて
上下ワクで切れてるようにしたいってことじゃない?

ビューポート指定してレンダリング範囲ちぎるとか
ウィンドウ画像のまんなかに穴あけてZバッファ利用して隠すとか
富豪的にステンシるとか

346 :デフォルトの名無しさん:04/12/20 03:01:48
良くこの手の質問出るけど、DirectX8以降は、GDIやDDraw的な、
自由に使えるオフスクリーンサーフィスは無いと考えた方が良いよ。

347 :344:04/12/20 03:18:36
>>345
え、俺!?

348 :345:04/12/20 10:24:31
>>344

ごめんよorz

349 :341:04/12/20 12:29:00
皆さんありがとうございます。

>目的は要するに固定領域内のすきな位置にアイコンなんかを描画したくて
>上下ワクで切れてるようにしたいってことじゃない?

まさにそれです。ウィンドウに穴をあけて
奥行き情報使ってはみ出し部分を隠すのも思いついたんですが、
これだとウィンドウのデザインに制限ができそうだったので諦めました。
ビューポート使う方法はよく自動車ゲーのバックミラーなんかで使われるアレですね。
なんとなくよさげなので使ってみようと思います。

あとオフスクリーンサーフェイスを使えないっていうのは信じてよいですか?(失礼)
なんか文字表示をするときにオフスクリーン領域から部分的に拾って〜みたいな
のを見たことがあった気がするので、
そんな感じの方法でできるのかと思っていたのですが。

350 :デフォルトの名無しさん:04/12/20 14:07:02
>あとオフスクリーンサーフェイスを使えないっていうのは

346が言ってるのは「自由に使える」ってことで、不自由なのなら有る。
ファイルから画像を読み込んだりしておくのにはそれで十分。
でも書き換えには時間がかかるから、スクロールさせるたびにそれを使う人はいない。

351 :341:04/12/20 17:35:31
なるほどそういうことでしたか。納得しました。
そして失礼な事を言ってすいませんでした。>>346
みなさんありがとうございました。

352 :デフォルトの名無しさん:04/12/21 04:49:56
とあるDX9用と銘打った書籍の、スキンメッシュのサンプルなんですが、
ビルドしようとすると以下のエラーが出ます。
この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" は未解決です

353 :デフォルトの名無しさん:04/12/21 06:23:06
SetCooperativeLevel(Handle, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN) で
フルスクリーンにした後、RestoreDisplayMode と DDSCL_NORMALで
元に戻しても、最前面表示が解除されないのですが、
どうすればいいのでしょうか?
SetWindowPos(,HWND_NOTOPMOST...では解除できませんでした。



354 :デフォルトの名無しさん:04/12/21 14:25:22
DirectImputのジョイスティックをDirectGraphicsのTutorials4に取り込んで、
ジョイスティックで描画されたものを自在に動かせるようにしたいのですが、
どこをどう手をつければ良いのか分からないので、
どなたかアドバイスいただけないでしょうか。
ちなみにDirectGraphicsのTutorials4にDirectImputのジョイスティックを貼り付けて
エラーは全て消せましたが、この後どこをどう改良すればよいでしょうか。


355 :デフォルトの名無しさん:04/12/21 14:31:29
入力を拾って、そのぶんだけ動かせば完成です。

356 :354:04/12/21 14:39:08
>>355 拾うってどういうことですか?

357 :デフォルトの名無しさん:04/12/21 14:45:17
DirectImputは難しいからな。

358 :354:04/12/21 14:55:23
>>357 素人なので更に難しく感じます。

359 :デフォルトの名無しさん:04/12/21 15:06:47
WindowsとDirectX
もう少しシンプルに設計できないものだろうか
ゴテゴテしすぎているように思えるのだけど・・・

360 :デフォルトの名無しさん:04/12/21 15:26:22
>>354
DirectI m put だから、難しいんだろうよ。

>>359
WinFXで幸せになれる・・・・わけは無い。

361 :354:04/12/21 15:48:04
>>360 そうかすいません。Inputでした。
    DirectInputで>>354のアドバイスいただけないですか。

362 :345:04/12/21 15:55:57
>>DirectGraphicsのTutorials4にDirectImputのジョイスティックを貼り付けて
こんな意味不明なこと書かれてアドバイスしようがあるとでも思うのか…

363 :362:04/12/21 15:56:53
345違う_| ̄|○ 名前のこってた

364 :354:04/12/21 16:05:10
>>362 すいません。DirectInputを使って自分で描画した画像をジョイスティックを使って
    動かせるようにするには、どうしたらよいのでしょうか。



365 :デフォルトの名無しさん:04/12/21 16:10:32
354の糞カキコで他の質問流されると激しく迷惑なんだが。

366 :デフォルトの名無しさん:04/12/21 17:28:46
>>354
DirectXヘルプのDirectInput C/C++チュートリアル3を嫁。
コールバック使って接続しているジョイスティックを列挙しないと
ならないってあたりが難しさのポイント。
分からなければ joyGetPosEx を使え。

367 :デフォルトの名無しさん:04/12/21 17:31:54
単純な入力を拾うだけならDirectInputを使う必要性など微塵もないのに、
何故無駄に使いたがる人がいるんだろう?

368 :デフォルトの名無しさん:04/12/21 17:32:55
>>367
ForceFeedBackを使いたいんじゃない?

369 :デフォルトの名無しさん:04/12/21 17:38:02
>364
おまえ>1見てる?
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
せめて以下のキーワードでググれよ
DirectInput サンプル ソース

掲示板でDirectInputの使い方を1〜10まで教えてもらうつもりなら帰れ
ネットや書籍で解説してあるのを一通りやって、ピンポイントで
疑問に思ったことを掲示板でたずねるってやりかたじゃないと
効率悪いってことぐらい考えてくれ

まずはググって調べるだけ調べてからまたきてくれ]

>352
DIRECT3D_VERSIONでググってみそ

370 :デフォルトの名無しさん:04/12/21 18:22:18
yaneSDKつかえばー

371 :デフォルトの名無しさん:04/12/21 18:24:14
>>369
質問者じゃないけど、8以降もVersion指定だけでいけるんだっけ?

372 :352:04/12/21 19:28:29
>>369
ありがとうございます。
ググってみました。
8以降は意味ないって出てました…orz

ちなみにSDKサンプルのSkinnedMeshでも同じエラーでコンパイルできませんでした。
もしかして2003summerで仕様変更とかあったんですかね?
変更あったならあったで、どこがどう変更になったかが分かれば直しようもあるのですが、
SDKマニュアルでD3DRMとか検索しても全く引っかからないという状況なので困ってます。
>>352で引っかかってる関数が何に変更になったかご存知の方はいらっしゃいませんでしょうか。。。

373 :デフォルトの名無しさん:04/12/21 19:43:08
DirectMusic で IDirectMusicPerformance8 を使わずに DLS Synth を
PCキーボード使って鳴らす簡単なサンプルを見つけて改造してました。
演奏をwavに書き出したくてDirectSoundBufferを色々いじってたんですが
どうも上手くいきません。良い方法を知っていたらご教授願います。
DirectShowフィルタとかつかうのだろうか・・・?んー

374 :デフォルトの名無しさん:04/12/21 20:06:17
今はXFile用のGUIDの意味すら分からずリンクでこけるような奴らが、
3Dを扱えるいい時代になったな。

375 :デフォルトの名無しさん:04/12/21 20:45:52
説明も出来ない奴が、でかい顔したりな

376 :デフォルトの名無しさん:04/12/21 20:52:50
>>374
ここは、その「分からない人」と
「分からない人に教える人」が来るスレなので、
あなたは必要ないですからもう来ないで下さい。

377 :デフォルトの名無しさん:04/12/21 21:05:28
とりあえず
GUIDと3Dは何の関係もないなぁ。

378 :デフォルトの名無しさん:04/12/21 21:07:54
ということで何の質問にも答えていない>>376が、自己否定で消滅しました。

379 :デフォルトの名無しさん:04/12/21 22:56:29
まともな質問とまともな回答者はこちらへどうぞ

DirectX総合スレ (Part2)
http://pc5.2ch.net/test/read.cgi/gamedev/1095863432/

380 :デフォルトの名無しさん:04/12/21 23:45:09
>371
さぁRMなんて過去の遺物だから変更なんてないと思うがどうなんだろ
ソース中のLPDIRECT3DDEVICE*の数字はなんて書いてある?

381 :デフォルトの名無しさん:04/12/22 00:07:44
だからXFile用のGUIDだと言ってるだろう。
D3DXの高レベル関数に頼り切ってるから、その程度も分からなくなる。

382 :デフォルトの名無しさん:04/12/22 00:22:14
今時COMを推奨している奴がいるスレはここですか

383 :デフォルトの名無しさん:04/12/22 08:30:39
>>380
私へのアンカーミスかどうかわかりませんが、
ちょっと質問の意味がわかりません。。。
ソースの中では、普通にデバイス作ったときに
デバイスへのポインタのアドレスが入れられるだけだと思うのですが、
そういうことではないですか?

とりあえずヘッダを見てみたらSDKのバージョンは31とありました。
皆さんは普通にそのままSkinMeshのサンプルなどはコンパイルできるんですかね?

>>381
すいません、そのXFile用のGUIDっていうのがわからないんですが、
単刀直入に、どこをどうしたらビルドできるようになるんでしょうか。
なにやらd3dx9mesh.hの中をみたらGUIDとかいうのが
沢山定義されてましたが、あれに何の意味があるのか分かりません。。。

384 :デフォルトの名無しさん:04/12/22 08:32:55
あれ、名前消えてました。書き込んだのは>>352です。

385 :デフォルトの名無しさん:04/12/22 09:01:33
状況がよくわからんが d3dxof.lib が未リンクとか?

386 :352:04/12/22 09:22:20
>>385
d3dxof.lib はプロジェクトに参加させております。
>>372で書きました通り、
SDKサンプルのSkinnedMeshもビルドできないという状況です。
これはサンプルのプロジェクトファイルをそのまま読み込んで試しましたので、
d3dxof.lib は当然プロジェクトに参加させられています。
エラーは352にあるようなRM関係のリンクエラーです。

387 :デフォルトの名無しさん:04/12/22 09:57:03
>>352のGUIDはrmxfguid.hにあるけど、これ直接インクルードしてみたら?
つーかそのエラーdxguid.libのリンク忘れに出てくる気が…。

388 :352:04/12/22 10:56:38
>>387
ありがとうございます。
SDKサンプルのSkinnedMeshのプロジェクトファイルをそのまま開いてますので、
dxguid.libはプロジェクトに当然参加させてあります。
rmxfguid.hもワークスペースの外部依存のところに入っていますし、
ソースのなかでもちゃんとincludeしているようです。

389 :デフォルトの名無しさん:04/12/22 11:01:47
まるごとうpしてみそ

390 :352:04/12/22 11:03:25
いや普通にダウンロードしたままのSDKサンプルなんですけど。。。

391 :デフォルトの名無しさん:04/12/22 11:17:26
>>352
includeやlibの読み込みディレクトリの優先順位が
メチャクチャになってんじゃないの?

392 :デフォルトの名無しさん:04/12/22 11:17:30
ディレクトリが合ってない悪寒。

393 :352:04/12/22 11:23:45
>>391
>>392
ありがとうございます。・…できました。
両方とも一番上に持ってきたらできました。
こういうことがあるんですか…知りませんでした。
許してくださいorz
そしてお付き合いいただいた皆さんありがとうございました。

394 :391:04/12/22 11:41:52
・・・・・・
まあ初心者スレだしな。しょうがない。

395 :デフォルトの名無しさん:04/12/22 11:42:55
そうだな
初心者スレだし・・・

396 :デフォルトの名無しさん:04/12/22 16:39:16
ところでなぜディレクトリの登録の順番が違うだけでリンクエラーがでるんですか?
理屈を端的に教えて欲しいんですが。

397 :デフォルトの名無しさん:04/12/22 17:04:16
同名のがあるんじゃねえの

398 :デフォルトの名無しさん:04/12/22 18:12:11
>>396
>>397の言うとおり、バージョンの違う同一名称のファイルがあるから。
cl.exeもlink.exeも、includeやlibの登録したディレクトリを順番に探して、
指定したファイル名が一致した時点でそれ以上探さない。


399 :デフォルトの名無しさん:04/12/22 18:41:23
それはフォルダの並び順が関係あるんだろうか…

例えばDirectXのincludeやlibのフォルダを一番上にしてあった場合は、
指定ファイルが全部見つかっても次のフォルダには飛ばずに最後まで読むんですか?
スキップしちゃうのは一番最後に置いてあるフォルダだけってこと?

400 :デフォルトの名無しさん:04/12/22 18:54:08
え?指定ファイルが全部見つかったらその時点で検索おわりだろ。次のフォルダに飛ぶ必要も
最後まで読む(何を?)必要もない。

401 :デフォルトの名無しさん:04/12/22 19:31:21
DirectXのlibとかincludeのフォルダを登録する順番が
一番上に無かったことが原因でリンクが通ってなかったのが、
上にしたら通りました、っていう流れでしょ?

で、それはなぜか?といったら、
バージョンの違う同一名称のファイルがあって
指定したファイル名が見つかった時点でそれ以上探さない為、だと。
(つまり目的のバージョンのファイルが見つかる前に走査を終了してしまう)

ってことは、上にあるときはそれ以上探して(目的のバージョンのがあるまで探す)、
下にあるときはそれ以上探さない、って言ってることになるやん?

402 :デフォルトの名無しさん:04/12/22 19:46:57
最初に見つかったやつを使うだけだっつってんだろが!

403 :デフォルトの名無しさん:04/12/22 19:49:57
だからそれならDirectXのlibやincludeのフォルダが
上にあろうが下にあろうがあろうが
関係ねぇじゃねぇかっつってんだろうが!

404 :デフォルトの名無しさん:04/12/22 19:55:42
最新DirectXのincludeより上にあるフォルダに同名の古いファイルが
あったからそっちが使われてるんだっていってんのに何でわからねえんだよ!

405 :デフォルトの名無しさん:04/12/22 19:58:35
VC6は7が、VS.NETには8が標準で入ってるんだゴラァ。
そのぐらい知っとけや。

406 :デフォルトの名無しさん:04/12/22 20:00:21
ifdefの問題じゃねーの

407 :デフォルトの名無しさん:04/12/22 20:14:00
>>405
なるほどそういうことですか。納得した。>>404もこう言ってくれなきゃー。
同じ事を何回言っても分かってない相手には分かんないままですから。
回答者スキルをアップして神回答者となってください。ありがとう。

408 :デフォルトの名無しさん:04/12/22 20:17:20
ワラタ

409 :407:04/12/22 20:17:40
あぁ、でも同一フォルダ内に同名ファイルがあるわけ無いし。
俺の頭がおかしかったですね。ごめんなさい。

410 :デフォルトの名無しさん:04/12/22 22:01:13
.       ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (;´Д`)< ・・・・・・
  -=≡  /    ヽ  \_____________
.      /| |   |. |
 -=≡ /. \ヽ/\\_
    /    ヽ⌒)==ヽ_)= ∧_∧
-=   / /⌒\.\ ||  ||  (*´Д`)
  / /    > ) ||   || ( つ旦O ←>>407
 / /     / /_||_ || と_)_) _.
 し'     (_つ ̄(_)) ̄ (.)) ̄ (_)) ̄(.))


411 :デフォルトの名無しさん:04/12/22 22:22:41
includeとlibのパス指定が乱れてると悲惨だよね。
例えばincludeの方はDX8が優先になっていて、libがDX9優先だったりして。


412 :デフォルトの名無しさん:04/12/22 22:24:08
複数環境で開発する可能性があったら切り替えられるようにしておかない?

413 :デフォルトの名無しさん :04/12/23 16:48:35
シェーダープログラムやりたいんだけど、
radeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。


414 :デフォルトの名無しさん:04/12/23 17:11:38
とりあえず

- DirectX Info Lib (デバイス情報のデータベース。すばらしい!)
ttp://www.netsphere.jp/dxinfo/

415 :デフォルトの名無しさん:04/12/24 02:03:31
DirectX 8で作成されたサンプルプログラムをダウンロードし、
DirectX 9 SDKの環境でコンパイルしようとすると、d3dx8.hがインクルードできませんと
出てきます。d3d8.hの方はあるようなのですがd3dx8.hは検索にかけても見当たりません。
そもそも、DirectX 9 SDKの環境ではDirectX 8で作成されたものはコンパイルできないんでしょうか。

416 :デフォルトの名無しさん:04/12/24 11:22:54
できるはずだし、俺の9SDKのフォルダにはちゃんとd3dx8.hも入ってる。

417 :デフォルトの名無しさん:04/12/24 11:30:11
たぶん馬鹿には見えないんだよ。

418 :413:04/12/24 11:35:48
>>414
ども。凄いですねそこ。
とりあえず9600シリーズならシェーダプログラムできると考えていいんですかね。
ただSEで満足に動くのかというのが不安です。
こんなショボいボードでシェーダやってるよとかいう人いませんかー

419 :デフォルトの名無しさん:04/12/24 11:58:58
グダグダ言わずにやってみればいいだろう

420 :デフォルトの名無しさん:04/12/24 14:05:28
9.0b VC++.net DirectInputについて

正常に動いているサンプルを自分のプログラムに組み込もうとして失敗しました。
自分のプログラムの前にサンプルをそのまま入れ、別ウィンドウでサンプルを動かすことはできました。
****(一部抜粋)****
if( g_lpDIDevice!=NULL )
{
   HRESULT hr;

   // デバイスの直接データを取得する
   hr = g_lpDIDevice->Poll();
*******************
このhrの値が『S_OK』となってほしいのに、『0x8007000c アクセス コードが無効です。』と出てきます。
どう理由でこのエラーが発生するのか、また解決方法がお分かりの方がいたら助言お願いします。

421 :デフォルトの名無しさん:04/12/24 15:01:27
>>420
ヘルプに書いてある「pollする前に・・・」とかいうとこは読んだんだよな?

422 :413:04/12/24 15:11:25
>>419
俺ですか?
いや、今使ってるのはシェーダ対応してないのです。
でシェーダプログラムやるにあたってグラボ買おうかなと思うものの、金が無くて。
本とかめちゃくちゃ高いし。
だから安いボードでどのくらい動くものかなというのが知りたいです。


423 :420:04/12/24 15:26:44
>>421
読んでいません。
ヘルプを検索しましたがどれを読めばいいのかがさっぱり分からないので、これを嫁!というのを教えてもらえないでしょうか。

424 :デフォルトの名無しさん:04/12/24 15:49:19
ほうちで

425 :420:04/12/24 16:31:27
>>424
『pollする前に』でヘルプを検索しても『する前に』がヒットしない(=事前処理が書かれていない)のですが。
ググっても『■ 息抜きせよ!投票せよ! ■』といったような関係のないものばかり出てきます。
一体>>421は何を見せたかったのか分からないので、半端なまま放置されても(´・ω・`)


426 :デフォルトの名無しさん:04/12/24 16:40:36
>>425
MSDNでPollを検索しろよ、この糞野郎

http://www.microsoft.com/japan/msdn/library/ja/jpdx8_c/hh/directx8_c/_dx_idirectinputdevice8_poll_dinput.asp

427 :デフォルトの名無しさん:04/12/24 16:50:52
コイツこのあいだの「Imput」君だろ。真性だから放置でいいよ。
相手にしてたらスレが無駄に流れてしゃーない。

428 :420:04/12/24 18:00:36
>>426
ありがとうございます。

>>420のプログラムの前に別ウインドウでちゃんと動いているのでデバイスの取得などはできているとは思いますが、
そこまでにデータが失われている(受け渡されていない)可能性があるので調べなおしてみます。

>>427
昨日Win32APIスレでDirectInputについて初めて知ったので、その人と同じようなことするかもです(´・ω・`)

429 :デフォルトの名無しさん:04/12/24 18:11:19
>>416
>>417
いや、本当にないんですよ。
ハードディスク全体に検索かけても。
SDK Update (December 2004)をダウンロードしたんですけど、
ほかにダウンロードする必要のあるファイルってありますか?
もしくはVC++6.0だとできないケースってありますか?
ちなみに、d3d8.hは入っています。

430 :デフォルトの名無しさん:04/12/24 18:20:26
古いのでも落としてみれば。そっから探してぶち込んどけよ。

431 :デフォルトの名無しさん:04/12/24 18:25:17
>>429
あるって

432 :デフォルトの名無しさん:04/12/24 18:50:37
413見て気になったんだけど、GPUGEMって名前からいかにも
サンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人

433 :420:04/12/24 20:32:14
おかげさまで何とか解決できました。
色々ありがとうございました。


434 :デフォルトの名無しさん:04/12/24 22:27:49
シェーだを極めるには
どうすればいいのですか。

本を見ただけでは本に書いてあることより上のことはできません。
手法が問題なのだから、想像力で補える部分じゃありません。
シェーはフリーソフトなんかにゃほとんど使われません。
市販のゲームはソース見られません。

どうすりゃいいのですか。



  ∧⊂ヽ
 (゚Д゚ )ノ
 | ⊃|
 |  |
 ⊂ノ〜
 ∪

435 :デフォルトの名無しさん:04/12/24 22:34:49
極めるという曖昧な物言いではなく、何をしたいのかを明確にすること。

436 :413:04/12/24 23:20:50
DXスレだとシェーダやってる人ってあんまりいないのかな。。。
GLスレ逝ってきます。レスくれた人ありがとう。

437 :デフォルトの名無しさん:04/12/24 23:34:52
日本人は基本的に固定機能だけでプログラマブルシェーダまではとてもとても。

やったとしてもサンデープログラマのように
ピクセル一つ出力しただけで騒いでそこで満足して終了か


いずれにしても大規模なシェーダは100%無理。


438 :デフォルトの名無しさん:04/12/24 23:46:46
ところで大規模なシェーダって、具体的にどんな機能を持ったもののことを言っているんですか?

439 :デフォルトの名無しさん:04/12/25 00:07:42
やってもみないで挫折してる奴がほざいてるだけだべ。
無意味な行間からおかしな臭いがぷんぷん臭ってくるよ。

440 :デフォルトの名無しさん:04/12/25 00:10:53
必用最低限に効率良く書く必用のあるシェーダを大規模とはこれいかに?

441 :デフォルトの名無しさん:04/12/25 07:57:06
このヒステリックな反応は
図星に確実にヒットした証拠ではないかと

442 :デフォルトの名無しさん:04/12/25 10:13:55
で、大規模なシェーダの答えはまだか?

443 :デフォルトの名無しさん:04/12/25 10:34:21
積み残してるまともな質問。


413 :デフォルトの名無しさん :04/12/23 16:48:35
シェーダープログラムやりたいんだけど、
radeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。


432 :デフォルトの名無しさん :04/12/24 18:50:37
413見て気になったんだけど、GPUGEMって名前からいかにも
サンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人


444 :デフォルトの名無しさん:04/12/25 11:15:05
コンパクトだとか必要最小限とか言って
シェーダって一つ書けばそれで終わりと思ってる人もいるから手に負えない。
必要レベルが1000個だったらどうするつもりなんだろ

445 :デフォルトの名無しさん:04/12/25 11:30:03
>>413
AGPかPCI-Expressかの指定もない
GPU Gemsの内容について少なくともこのスレでは必要スペックを提示すべき
そしてそれが出来るなら適当な板は自作板だろう

1万円で動作確認程度ならGeForce6200が最適


>>432
DirectX、OpenGL、Cg、HLSLなど混在

446 :デフォルトの名無しさん:04/12/25 11:40:10
>>444
無駄な話で逃げ回らず、大規模なシェーダの具体例をどうぞ。

447 :デフォルトの名無しさん:04/12/25 11:56:48
>AGPかPCI-Expressかの指定もない

わざわざこれから9600SE買おうっつうくらいだからだいたいAGPってわかるやん?

>GPU Gemsの内容について少なくともこのスレでは必要スペックを提示すべき
>そしてそれが出来るなら適当な板は自作板だろう

誰か翻訳して?

>DirectX、OpenGL、Cg、HLSLなど混在

これ、答えになってるのん?

448 :デフォルトの名無しさん:04/12/25 12:00:12
雑魚はほっとけ

449 :232:04/12/25 12:46:41
>>445
>>AGPかPCI-Expressかの指定もない
インターフェイスが変わるとチップの性能が変わるとはしらなんだ

450 :デフォルトの名無しさん:04/12/25 12:58:38
現状のチップ性能だと、どちらでも誤差程度の違いしか出ないけど、
なぜ>>232の恥ずかしい過去を引きずって復活?

451 :デフォルトの名無しさん:04/12/25 13:09:12
数が増えればそれだけで大規模シェーダだ罠。
命令数が多くてもいいし

452 :デフォルトの名無しさん:04/12/25 13:12:25
意味のない話は邪魔。改めて積み残してるまともな質問。


413 :デフォルトの名無しさん :04/12/23 16:48:35
シェーダープログラムやりたいんだけど、
radeon9600SEとかでもできますかね?
GPUGEMとか買って試したいと思ってるんですが、
本のサンプルとかすらまともに動かない、とかだったら悲しいので。。。
できればOpenGLもやってみたいんですが、
DXもGLもそこそこ動いて、中古で1万くらいで買えて、シェーダープログラムにも
そこそこ使えるっていうボードを教えてください。


432 :デフォルトの名無しさん :04/12/24 18:50:37
413見て気になったんだけど、GPUGEMって名前からいかにも
サンプルコードがCgやGLのNV拡張使いまくりっぽいんだけど
そのへんどうでしたか?>買った人

453 :デフォルトの名無しさん:04/12/25 13:13:25
>>451
数を増やすだけでは単に遅くなるだけ。
何をするときに大規模にする必用があるのか、具体的例を挙げてくれ。

454 :デフォルトの名無しさん:04/12/25 13:31:27
たまにシェーダが数百、数千個とかいう話が出るけど、
数百、数千種類ってわけじゃないよね。
いわゆるライト1個違いとかの派生も含めてってことで。
でもそう考えてもそれだけの数になるってのは、
自分はヘタレなのでピンとこない。教えて大規模のひと。

455 :デフォルトの名無しさん:04/12/25 17:55:25
ShaderはDirect3D11になって
C#でコード書けるようになるまで待つのが基地。
今は単純にコンパイラによる制限が大きいだけだからな

456 :デフォルトの名無しさん:04/12/25 17:58:55
頂点シェーダーとピクセルシェーダーがあるけど、
なんで頂点シェーダー一本にしないの? 利点は頂点シェーダーが多いのに・・
DirectXでいう、HALとREFの関係?

457 :デフォルトの名無しさん:04/12/25 18:00:08
主役はピクセルシェーダ

458 :デフォルトの名無しさん:04/12/25 18:02:04
>>456は致命的にアホなので放置で。

459 :デフォルトの名無しさん:04/12/25 18:05:21
>>456
実装上の理由。
頂点処理はフレームあたりの実行回数は少ない、しかし内容は複雑。
ピクセル処理はフレームあたりの実行回数はとても多い、しかし内容は複雑じゃない。
この折半が現在のShaderのデザインに。
しかし>>456の意見はもっとも、俺もそう思う。

460 :デフォルトの名無しさん:04/12/25 18:06:40
> DirectXでいう、HALとREFの関係?
本当にそう思うのか。
駄目だこりゃ。

461 :456:04/12/25 18:12:48
>>レスありがとう
違うのね、根本的に。 勉強しなおしてきます。

462 :デフォルトの名無しさん:04/12/25 19:03:24
やっぱり一個でいいらしいよ

FarCry、OpenGLだがDOOM3、HL2と最近の3Dゲームはこぞって
1000個2000個と増えてきているが、それは幻と。

DX8世代は1モデルに50個、100個のシェーダとかザラだったが
それは重くなるんだそうだ。

463 :デフォルトの名無しさん:04/12/25 20:08:27
意味ワカンネ。
個数に基準とかいいとか悪いとかあんの?
全く意味不明なんだけど。

464 :アーサー:04/12/25 20:12:21
Direct3Dを使って変数の中の値を画面に表示させたいのですが、わかりますでしょうか?もしくはわかりやすいお勧めのサイトなどありましたら教えてください。お願いします


465 :デフォルトの名無しさん:04/12/25 20:18:15
>464
http://if.dynsite.net/t-pot/program/12_font/index.html
逝ってらっしゃい

466 :デフォルトの名無しさん:04/12/25 20:18:16
変数の中のデータを文字にして、それをシェイプなりテクスチャなりにして描画すればOK。

467 :デフォルトの名無しさん:04/12/25 20:53:55
魚おおおおおおおおおおおおお!!!!!!!!!!!!!!
仕様がいつの間にか変わってんじゃねーか!!!!!!!!!

以前挫折したままだったから再挑戦しようかと思ったのに!!!!!
サンプル拾ってきてコンパイルしたらワケワカランエラーが出たからググってみたら
仕様変更らしいじゃねーか!!!!
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)

468 :デフォルトの名無しさん:04/12/25 21:01:38
何かこういうふざけたノリで目立ったらレスを貰えると思ってる所が浅ましい。
そしてこういう風に環境を記号のように書く人間の
礼儀というものに対する感覚が理解できない。
質問部分だけは答えが欲しいもんだから謙って書いて、
環境を書くときはもう書けばいいんだろうといわんばかりの書き方。

469 :デフォルトの名無しさん:04/12/25 21:04:12
とりあえずSpriteと名の付く、仕様がころころ変わる上に、
変更点を追ってまで使う意味がまったくないものを使用しないこと。

470 :デフォルトの名無しさん:04/12/25 21:18:06
「Shaderは一個!でないと遅くなる!」



素晴らしい

471 :デフォルトの名無しさん:04/12/25 21:27:53
PresentIntervalも変わってた。

472 :デフォルトの名無しさん:04/12/25 21:30:13
日記はチラシの裏にでも書け。

473 :デフォルトの名無しさん:04/12/25 21:31:55
ていうか9600SEにPCI-Expressあるのかどうかも知らないとか、
インターフェイスで何の速度が変わるのか知らないが分けて考えてるあたり
どうもバカが紛れ込んでいるような気がしてならない。

474 :467:04/12/25 22:54:34
>>469
ありがとうございます。
Spriteってそんなに変更が多いものなんですね。
でもそうすると、どうやればいいのか完全に分からなくなります。
昔StretchRectのやつで表示してたら、それでは背景色の透過やなんかができないから
スプライトでやれと言われたのですが。
スプライトって3Dの板のことですよね・・・?
今回は英語版のMSDN見ながら修正してなんとかいけました。
日本語のほうはまだ更新されてないようです。

>>468
教えられない馬鹿は黙ってろよ。
・・・っと釣られちまったorz

475 :デフォルトの名無しさん:04/12/25 22:59:56
ここで一つ勉強しましょう

お約束「具体的に書け」


1. (トラブルシューティング) 具体的に書いて進展解決したためしはない

2. (手法)例えばスキミング。「スキミング」という「単語」こそ使っていないものの、
 書いた文を読めば「これで実現できることはスキミング以外にない」ことがわかるはずだが
 これがわからない。「単語」で表わされないと理解できない。表されても理解できないもの多い。



読解力14位になるはずだ。

476 :デフォルトの名無しさん:04/12/25 23:09:26
こういうくだらない質問で長々荒れるから、ここの質が上がらない

>>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はバージョンではなく、成分数

477 :デフォルトの名無しさん:04/12/25 23:09:57
誰も質なんぞ上げようと思ってやってない

478 :デフォルトの名無しさん:04/12/25 23:13:09
>教えられない馬鹿は黙ってろよ。
>・・・っと釣られちまったorz

な?やっぱこういう奴。教えてやる価値なんてない。
ですますなんてのは上っ面。答えを引き出すための偽装。

479 :デフォルトの名無しさん:04/12/25 23:40:16
深読みし過ぎってのはよくあることだが、
こいつは浅いな

480 :デフォルトの名無しさん:04/12/25 23:48:10
オブジェクトのマウスによるピックアップってどないしたらよろしの?
2次元から逆に3次元に変換してポリゴンとの交点を検出するイメージ?

481 :デフォルトの名無しさん:04/12/25 23:48:18
こっちのスレもよろしく

DirectX総合スレ (Part2)
http://pc5.2ch.net/test/read.cgi/gamedev/1095863432/

482 :デフォルトの名無しさん:04/12/25 23:48:49
467は深くそして多面的な人間性を持っていますね。

483 :デフォルトの名無しさん:04/12/25 23:51:30
>>480
D3DXIntersect
昔のSDKならPickサンプル入ってるよ

484 :デフォルトの名無しさん:04/12/25 23:53:06
>シェーダープログラムにもそこそこ使えるっていう
SM3.0に対応してたら何でもいいんじゃねーの?

485 :デフォルトの名無しさん:04/12/26 00:25:56
チップセットの性能を知りたいならココ

3D Chipset Specs
http://users.erols.com/chare/video.htm

486 :デフォルトの名無しさん:04/12/26 01:02:03
現在VRAMをどんぐらい使ってるかとか
どんぐらい空いてるかって
調べる方法ないんでしょうか?

487 :デフォルトの名無しさん:04/12/26 01:19:40
シェーダは一つしか許されないらしいから
VRAMが足りなくなることなんかないですよ

488 :デフォルトの名無しさん:04/12/26 01:39:48
>>483
さんくすこ。でもマネージだとInteresectでSDKドキュメント引っかからない・・・

489 :デフォルトの名無しさん:04/12/26 01:49:33
× : Interesect
○ : Intersect

490 :デフォルトの名無しさん:04/12/26 04:13:11
>>VRAMが足りなくなることなんかないですよ
なんで?

491 :デフォルトの名無しさん:04/12/26 14:42:09
一つでは
そんな大した画になることはないから

492 :デフォルトの名無しさん:04/12/26 14:57:27
バックバッファにしかVRAM使わないのは
サンプル弄ってるレベルの話でしょ?

493 :デフォルトの名無しさん:04/12/26 15:03:14
それってやっぱ、描画キックしたらDMA転送で
そのつどVRAMに転送するって発想だからなのかな…

まとめてVRAMに載せておくって発想とかないんだろうね
ATIとかnVidiaのデモは、
最初のロードで必要な物は
全てVRAMに送ってしまっていると思うけど

494 :デフォルトの名無しさん:04/12/26 16:27:07
おまえら何言ってるの?

495 :デフォルトの名無しさん:04/12/26 23:59:00
>>494
君には到達不可能なレベルの話

496 :デフォルトの名無しさん:04/12/27 15:25:24
>>478, >>496
教えられない馬鹿は黙ってろよ。


497 :デフォルトの名無しさん:04/12/27 19:38:13
まだユーザーの環境を選ぶからなー。
今は頭のいい人達にいろいろ実験してもらって、
俺はそのうちワケわかんなくても使えるくらい資料豊富になったときに
ソースぱくって使わせてもらえばいいや。

498 :デフォルトの名無しさん:04/12/27 21:26:02
メディアプレーヤーの視覚エフェクト作ってるのですが、
その描写を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;
}
どうすれば初期化できるでしょうか、、ご教授ください。

499 :デフォルトの名無しさん:04/12/27 21:40:03
まずはチュートリアルから順番に学習すること。

500 :デフォルトの名無しさん:04/12/27 21:41:51
>>498
Cの基礎から勉強しなおして来てください。

501 :498:04/12/27 21:59:49
>>499
チュートリアルは全部やりました。
WMP10SDKの視覚エフェクトのチュートリアルにはDXを利用した描写がなく、
デバイスコンテキストを利用した描写方法しかのってないのです。


502 :デフォルトの名無しさん:04/12/27 22:03:00
ですからCの基礎から勉強しなおしてください。
次はDXのSDKチュートリアルをやってください。

503 :デフォルトの名無しさん:04/12/27 22:05:34
>>501
デバイスの作成すら出来ない時点で、チュートリアルが正しく理解できていません。
四の五の言わずに言われたことをやってください。
あなたに余計なことを発言する権利はありません。

504 :デフォルトの名無しさん:04/12/27 22:21:30
>>503,502
わからないなら口だすなて

>>498
ウィンドウハンドルの取得方法が間違ってる。
そのメソッドじゃないよ。

505 :デフォルトの名無しさん:04/12/27 22:46:41
>>504
どもです。
RenderWindowed内で取得するとうまくいきました。

506 :デフォルトの名無しさん:04/12/27 22:59:52
他の方への御礼を忘れてますよ。

507 :デフォルトの名無しさん:04/12/27 23:02:51
極悪非道のageブラザーズ
漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J

508 :デフォルトの名無しさん:04/12/27 23:11:07
てめぇの不備を指摘されたり都合の悪い事を言われた回答者は無視。
甘い顔でオムツ変えまでしてくれるような回答者だけにレス。
氏ね糞野郎。ほんとうにこういう中身のない上っ面野郎って氏んで欲しい。
こんな馬鹿に「どもです」とか言われたいがために
糞質問に答えてしまう馬鹿回答者も消えて欲しい。

509 :デフォルトの名無しさん:04/12/27 23:13:05
もちつけって

510 :デフォルトの名無しさん:04/12/27 23:19:17
>>498-509
よくできたネタだな。

511 :デフォルトの名無しさん:04/12/28 02:36:59
というかhWndってグローバルだと何か問題があるの?
クラス化したってパブリックにするでしょ?
なんでいちいち取得する必要があるの?

つーか結果的にDirectXじゃないでしょ?
そういう時はハンドル取得できてるかどうか確認しろよ基本だろ
だから基礎からって言う人がいたんだよ

512 :デフォルトの名無しさん:04/12/28 02:44:38
>>511
>>509

513 :デフォルトの名無しさん:04/12/28 14:36:29
>>511
なんか外しまくってるぞ。
もちつきなさい。

514 :デフォルトの名無しさん:04/12/29 03:06:08
鏡見て発言しないか?
顔が真っ赤になってることに気づこう

515 :デフォルトの名無しさん:04/12/29 12:46:24
つうかDirectXとWinAPIを切り離して考えろってのもなー
便宜上線引きしてあるだけであって、どっちも同じだろ。

516 :デフォルトの名無しさん:04/12/29 12:55:11
>>便宜上線引きしてあるだけであって、どっちも同じだろ。


517 :デフォルトの名無しさん:04/12/29 23:02:21
IGraphBuilderを別のスレッドで作って
その中でIVideoWindow2で画面表示までやりたいんですけど
具体的にはどのようなコードを書くのさ?

518 :デフォルトの名無しさん:05/01/01 02:53:51
水面にオブジェクトを写り込ませて波紋を表現したいのですが

面対称のオブジェクトをテクスチャにレンダリング→
テクスチャを水面オブジェクトに投影(カメラマッピング?)
→バンプマップをかける
というアプローチで合ってますでしょうか?

519 :デフォルトの名無しさん:05/01/01 04:28:00
アプローチが思いつくなら、なんでそれを試さないかな?
試してうまくいかなくての質問ならまだ判るんだけど。

520 :デフォルトの名無しさん:05/01/01 10:51:18
朝晩の寒さが身に沁みる季節になってまいりましたが、いかがお過ごしでしょうか。
初めてお目にかかります。こちらにお世話になってるAの母です。

Aはこちらのダイレクティング・ペケなるものが大好きなようで、毎日毎日学校から帰ってくるなり
パソコンのスイッチを入れては、夜遅くまでガタガタやっているようです。
つい先だってはマグニチュード9.9の地震まで起きました。芸術点です。
それだけダイレクティング・ペケが素敵なところということでしょうし、娘も楽しそうにしているので
特に問題とは思っておりませんでした。
しかし、HALを「ハル」と読みだすようになってしまい、先日生まれてはじめてハルノートを使用することに。
そして、もうすぐ入試を控えている身であるにも関わらず、ダイレクティング・ペケにのめりこんで
しまいまったく勉強もおぼつかない状態です。
私どもの都合で大変申し訳ないのですが、どうかHALをハルと読むのをやめるという
形にしてはいただけないでしょうか。
コーデル・ハルみたいですげぇムカつきます。
勿論、入試が終わるまでの期間で結構ですので、どうぞよろしくお願いします。

521 :デフォルトの名無しさん:05/01/01 11:56:21
>>519
締め切りまで時間がないので簡単な方法がないか
お聞きしたかったんです。
けっこうありがちなエフェクトなのでもっと
エレガントな方法があるのではないかと思いまして・・・。

522 :デフォルトの名無しさん:05/01/01 12:11:59
すでに9時間が経過しているが、自分で試すよりここで聞く方が本当に早いのか、
よく考えてみると良い。

523 :デフォルトの名無しさん:05/01/01 20:00:51
たしかに、初詣など行かずに作っていれば今頃
できてたかもしれません。ありがとうございました。

524 :デフォルトの名無しさん:05/01/03 22:05:37
頂点シェーダについて尋ねたい。
D3DVERTEXELEMENT9で頂点宣言を行うが、オフセットは自分で
計算しないとならないのが面倒くさい。頂点構造体から半自動的に
オフセットを定義する方法はないのだろうか。

525 :デフォルトの名無しさん:05/01/03 23:25:15
>D3DVERTEXELEMENT9で頂点宣言を行うが
行なわない、行なわない

>オフセットは自分で計算しないとならないのが面倒くさい。
何のオフセットを、何処でだ?

>頂点構造体から半自動的にオフセットを定義する方法
D3DVERTEXELEMENT9で頂点宣言を行うと思ってるから思いつかないんじゃないの…

以上があってるか間違ってるかの問題はさておき
そのオフセットとやらは、使用する直前で決まる動的なサイズなの?
違うと思うんだけど…

#define

って知ってる?(これを使用する問題なのかもさておき)
それとも構造体を書いた、そのサイズの高々数バイトを暗算して
defineする手間を言ってるの?

ともかく、もっと具体的に

526 :デフォルトの名無しさん:05/01/03 23:44:44
>>524
D3DVERTEXELEMENT9 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をハードコードせず自動的にってことだよね。
し ら ん 。

527 :デフォルトの名無しさん:05/01/04 00:28:23
>>525
分かってないならレスするな。ヘルプで「頂点宣言」を検索してみろ。
defineとか筋違いなこと言ってんじゃねえ。

>>526
そう、それ。やっぱ手動か。

528 :デフォルトの名無しさん:05/01/04 00:30:03
コード打つのが面倒くさいってのと同じレベルだな

529 :デフォルトの名無しさん:05/01/04 00:31:27
>>527
単純に動的に代入しちゃいけないの?

530 :デフォルトの名無しさん:05/01/04 00:37:03
半自動
D3DDECLTYPE_FLOAT3なら
sizeof(float) * 3

www

531 :デフォルトの名無しさん:05/01/04 00:41:02
#define A 4
#define B 8
#define C 12
#define D 16
.
.
.

以下お好きなだけどうぞ

532 :デフォルトの名無しさん:05/01/04 00:42:33
>>528
計算間違いしたらイヤだろ。それに頂点要素を後から追加するときに
オフセット計算しなおしになったらめんどくさいんだよ。

>>529
動的代入したいって話なんだよ。

>>530
それは今やっている方法だ。問題は頂点構造体に要素を追加したい場合に
任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。

533 :デフォルトの名無しさん:05/01/04 00:44:31
>>532
今どうやってるって? 計算できているなら動的に代入できるんでないの?

534 :デフォルトの名無しさん:05/01/04 00:45:07
>>531
分かってないくせにレスつけて気取ってんじゃねえ。
t-potでも100回読み直してから出直してこい。

535 :デフォルトの名無しさん:05/01/04 00:47:43
>>533
頂点構造体のメンバのオフセット位置を計算しないとならない。
構造体メンバの先頭からのバイト数を知るための式があると楽なんだが。

536 :デフォルトの名無しさん:05/01/04 00:49:26
頂点宣言ってD3DVERTEXELEMENT9構造体の配列で宣言するんじゃなかった?
8の頃もDWORDの配列で宣言しててDWORDじゃ宣言してないと思ったけど?
D3DVERTEXELEMENT9構造体、単体で頂点宣言って言うの?
頂点要素が一つでもD3DDECL_END()で終わる配列でしょ…

細かい事だが、質問者で、日本語の不備(これの事)を指摘されて
それを分ってないって言うならね…

537 :デフォルトの名無しさん:05/01/04 00:55:08
そもそも、頂点宣言はD3DVERTEXELEMENT9で一つでやる必要がない
それがDX9での売りだろ
頂点ストリームだけのD3DVERTEXELEMENT9構造体
法線ストリームだけのD3DVERTEXELEMENT9構造体
頂点カラーストリームだけのD3DVERTEXELEMENT9構造体
UVストリームだけのD3DVERTEXELEMENT9構造体

それらを組み合わせて使える(シェーダーだけどな)
t-potのサイト名を出して、さも自分は理解してると言わんばかりなんだから
知ってるんだろw


538 :デフォルトの名無しさん:05/01/04 00:59:33
>>536,537
頂点宣言という言葉はDirectX9ヘルプに書いてあったのでそれを使っている。
どうも用語の使い方に曖昧さがあるか間違っているようなので、言い直す。

D3DVERTEXELEMENT9構造体のOffsetメンバを自動的に決定するための
簡易な方法はないだろうか。この場合、オーバーラップが無いものとする。

539 :デフォルトの名無しさん:05/01/04 01:04:52
お前が理解出来ないで安易に用語使って質問したんだろw

540 :デフォルトの名無しさん:05/01/04 01:05:02
もうどうでもいいや。手で計算するよ。
寝るよ、おやすみ。

541 :デフォルトの名無しさん:05/01/04 01:05:29
>>538
質問してるくせに随分と偉そうな物言いだな。

542 :デフォルトの名無しさん:05/01/04 01:06:01
>>539
その程度のレスしかつけられないなら自慢げにレスしてんじゃねえよ。

543 :デフォルトの名無しさん:05/01/04 01:07:34
あああ。すまん。申し訳ない。まったくもって勘違いしていた。
ここは初心者スレだったね。
質問場所を間違えたよ。今は反省している。
うん。おやすみ。

544 :デフォルトの名無しさん:05/01/04 01:09:37
冬休みだなぁ・・・

545 :デフォルトの名無しさん:05/01/04 01:15:04
>D3DVERTEXELEMENT9構造体のOffsetメンバを自動的に決定するための
>簡易な方法はないだろうか。

自動的に暗算できる程度の”算数”の学力を手にれる

546 :デフォルトの名無しさん:05/01/04 01:17:48
このアホが言うと通りに”頂点宣言”でヘルプを調べたが
しっかり

>D3DVERTEXELEMENT9 構造体の配列として表現される。
>配列の各要素で、1 つの頂点要素を記述する。

と書かれていました。


547 :デフォルトの名無しさん:05/01/04 01:18:18
つか、

D3DVERTEXELEMENT9 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()
};

ってやって別のストリームで流せばオフセットなんて計算する必要ないんだよ。
ってそれはわかってる状態でわざわざオフセットを計算する方法を聞いてるってこと?

548 :デフォルトの名無しさん:05/01/04 01:20:12
t-potを網羅しておられるんだから
当然わかっていらっしゃるだろう。

失礼な事を言うものではない、547よ…

549 :デフォルトの名無しさん:05/01/04 01:24:15
構造体の先頭からのオフセットってことは、
(int)((char*)&hoge.tu - (char*)&hoge.x);
(int)((char*)&hoge.nx - (char*)&hoge.x);
みたいなことをやりたいってこと? 手で計算した方が早いだろ。

550 :420:05/01/04 01:28:43
・・・ただいま(´・ω・`)また質問させてください。

Toruの(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

551 :デフォルトの名無しさん:05/01/04 01:40:47
それならoffsetofマクロで事が足りそうな。

552 :デフォルトの名無しさん:05/01/04 02:05:42
>>524
各要素間に余分なブランクがなく詰まっていると仮定すれば
要素のサイズを D3DVERTEXELEMENT9 の Type メンバから求めていけば、
オフセットは求められるけど。例えばこんな感じか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/48.txt

553 :デフォルトの名無しさん:05/01/04 02:20:23
>問題は頂点構造体に要素を追加したい場合に
>任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
>オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。

その理論だと、追加する事自体がエレガントではないと思わないのか?


554 :デフォルトの名無しさん:05/01/04 02:28:50
>>552
では、D3DVERTEXELEMENT9の配列の各要素を定義する時に
その定義途中の各要素に順にアクセスして、
合計のoffsetを計算する方法をご教授してください。

つまり、配列定義中の各要素の値の一部を決定するのに
その各要素をピックアップ出来るか?って事です。
お願いします。

555 :552:05/01/04 02:38:52
>>554
すまんよくわからんけど、Offsetの合計なら上のソースの sum の値が
ずばりそれに当たるはずだけど。

556 :デフォルトの名無しさん:05/01/04 03:00:38
なんども聞くけど
どうして頂点ストリームを使わないでオフセットに拘るの?
もし、そうしなけりゃいけないような設計にしてしまったとかいうなら
早めに設計をみなおした方がいいよ。

557 :デフォルトの名無しさん:05/01/04 03:08:34
ともかく

プログラムは「めんどくさ回避」で進化してきた。
シェーダも3.0を迎えるにあたり「2.0ではめんどくさかったから3.0ではラクに」
結局これも「めんどくさ回避」なのだが


手 を 抜 い て い い と こ ろ と 悪 い と こ ろ が あ る


ことを理解していないセイガクが多すぎる。

「自分でやるべきところは面倒くさかろうが難しかろうが自分でやれ」

558 :デフォルトの名無しさん:05/01/04 03:10:06
>>555
それってD3DVERTEXELEMENT9の配列が定義終わってないと使えないでしょ?

かの御仁の要求は、面倒、計算ミスが心配、エレガントではない
と言った理由により、定義をする時点で求めたいと言った主旨でしょ?

559 :デフォルトの名無しさん:05/01/04 03:12:26
メールはちゃんと読みましょう
日本語を勉強しましょう

「C」つってんのに勝手に脳内で「C++」に置き換えんなや!
みてえな

560 :デフォルトの名無しさん:05/01/04 03:29:42
整理すると

D3DVERTEXELEMENT9 decl = {
{ 0, 0/*       この時点で" 0"が欲しい        */, ..../*略*/},
{ 0,12/*この時点で今までの要素を受けて自動(半)で"12"が欲しい*/, ..../*略*/},
{ 0,24/*この時点で今までの要素を受けて自動(半)で"24"が欲しい*/, ..../*略*/},
D3DDECL_END()
};

要は定数直書きが気に入らないって奴だろ

561 :デフォルトの名無しさん:05/01/04 03:41:29
>>558
なんか動的代入したい、とか書いてあったので勘違いしました。
定義の段階で求めようと思ったら、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), ...
};
エレガントからかけ離れていく悪寒。

562 :デフォルトの名無しさん:05/01/04 03:59:15
561を責める訳ではないが
12byteや4byte単位の足し算を面倒と言って、
しかも途中に違うストリームを挿入したら、以降は書き換えとか発生して面倒と言ってるんだから

その方法も面倒だし
頂点構造体の方も書き換えになって、意味ないじゃんと思う。

そもそも、任意の要素を追加していくタイプの配列で
最新の要素が、その今までの任意の要素に影響をうける場合
そのコードを書いている、その場で手動でコーディングがもっとも効率が良いと思うけど

そう考えられないなら、その内に究極的に言うと
変数の型を宣言するのは面倒です。コードからどう言った型で使っているか読み取って
プリコンパイル時か何かに、自動で型を認識してくれる方法はないですか?
とか言い出すのと同じレベルの”面倒”って奴だと思う

563 :デフォルトの名無しさん:05/01/04 03:59:26
こんなんやってみるとか・・・。

switch(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;

564 :デフォルトの名無しさん:05/01/04 04:02:54
>>562
ここのオフセット指定に関しては
なんでDirectXの関数がオフセットを欲しがるのか個人的には謎なんだけど。
だって配列に設定されてる値から確実に求められるじゃん。
ここでどうしてオフセットを求めてくるのかわからん。

565 :デフォルトの名無しさん:05/01/04 04:36:57
推測だけど、ストリーム処理時のユーザーの自由度の為かと

typedef struct _VERTEX {
float x, y, z;
float tu, tv;
DWORD diffuse;
} VERTEX;

この頂点構造体で作られた頂点バッファの値を使い回して
テクスチャなしのポリゴン描画に流用しようとしたとして

D3DVERTEXELEMENT9の宣言時にテクスチャストリームを無くして
オフセットをテクスチャ分薦めた物を宣言して使用すれば
その頂点バッファを使い回し可能だとか…


566 :デフォルトの名無しさん:05/01/04 12:03:34
おはよう。昨晩のワタクシめの質問から色々意見が出たようで、
スレのにぎわいに貢献できたと自負しております。

>>552の方法はオレも考えた。それを実装しようと思っていたところだった。
手動でオフセット計算するにせよ、正しい値かどうかを確認するルーチンが
欲しいというのもある。

>>556
1.これまで単一ストリームでプログラムしていたので、その姿勢を引きずっていたため。
2.複数のストリームに対して個別に複数の頂点バッファを作成するのがイヤ。
3.一つの頂点バッファで複数のストリームを表現したい場合は、ストライドを
計算しないとならない。これってつまりオフセットそのもの。

ところでオフセット値なのだけれど、4とか12という固定値で決め打ち
しているソースが意外と多く見つかって、sizeof演算子を使っているほうが
少ないと感じた。型の幅はCPU/OS依存なので固定値にしてはならないと
昔習ったオレとしては気持ち悪いのだけれど、今時はこれでいいわけ?

567 :デフォルトの名無しさん:05/01/04 12:25:21
>型の幅はCPU/OS依存
んなわけないだろ。
コンパイラ依存。

568 :デフォルトの名無しさん:05/01/04 12:34:02
>>566
頂点ストリーム使ったことないでしょ?
俺が色々やってみた結果これが一番シンプルに組めるよ。

ストリーム0をPosition
ストリーム1をNormal
ストリーム2を〜以下略って設定していくだけですごく簡単だよ。
わずらわしいこと1つも無かったよ。
単一のストリームでやっちゃうと同じ位置情報の処理なのに
別ルーチンが必要になったりしてプログラムが大変なことになるでしょ?
そんなアホなことしてないで頂点ストリーム使えるようになりなよ。

よく調べもしないで見当違いな結論出して苦労してんのみっともないよ。

569 :デフォルトの名無しさん:05/01/04 12:55:17
>>567
失敬。その通り。

>>568
君の言うことを検討してみた。
頂点バッファが複数になることを懸念していたが、よくよく考えてみると
OpenGLのArray系での配列指定時には座標配列、法線配列など個別に
指定せざるを得ない。そのように考えれば複数ストリームもアリだな。

570 :デフォルトの名無しさん:05/01/04 13:35:47
俺の場合、SetPrivateDataでVertexBufferにD3DVERTEXELEMENT9配列要素そのものを関連付けしてるよ。
んで動的にIDirect3DVertexDeclaration9を作ってる。
これってDirectX9からCOMインターフェイスになったんだよなあ、これは改悪と思う。

571 :420=550:05/01/04 17:29:45
賑わうのはいいけど激しく質問をスルーされた(´・ω・`)

572 :デフォルトの名無しさん:05/01/04 23:58:37
なんだなんだ、昨晩の勢いがウソのように静かになったな。
やはりオレが燃料を投下しないとダメなのか。罪な奴だなオレ様も。

HLSLでグローバル変数にセマンティクスを記述しても無視されるが、
敢えて記述する利点はなんだろう? MS公式本のソースコードには
セマンティクスが書いてあるグローバル変数と書いてないのと
混在しているが。

573 :デフォルトの名無しさん:05/01/05 00:51:28
>>550
そもそも機能追加してfpsが上がるプログラムが疑問

574 :420=550:05/01/05 02:05:17
>>573
追加したところ(DirectInput関係)以外を削ってみてもやはりGetCapabilitiesを使うと60fpsから始まります。
もちろんループをしているところもfps表示に加え、画像の描画で負荷をかけても同様です。
fpsが上がる要因となる部分はこれしかないし、何が問題なのかとorz
ウインドウモードですがVC++とギコナビ以外特に負荷のかかることはやってませんし。
ちなみにGetCapabilitiesを使って60fps0.5s/停止0.5sまで処理がおかしくなると、
ウインドウを動かすとタイトルバーが透明になったり、閉じたあとIEも含めたアプリケーションの動作が鈍くなったりします。


575 :デフォルトの名無しさん:05/01/05 06:11:52
>>574
そりゃお前、そんなところみてるより他の部分の処理がおかしいって疑ったほうがいいんじゃねぇか。

576 :デフォルトの名無しさん:05/01/05 10:37:21
なんかDirectXとカードの相性で
GetCapabilities動かす->内部モード変更->今回の動きにベストマッチ ってかんじじゃないのか?
ほかのやつでも試してみなよ

577 :420=550:05/01/05 14:06:49
>>575
だから他のところコメントアウトして削ったってorz
フレームレートの調整なんかやり方知らないから元々やってないし、Sleepは0だし・・・。

>>576
相性と言うか開発では9だけどグラボは8.1だからでしょうか
もう1台のPCはスペックに差がありすぎて常に61〜60fps(;´Д`) (グラボは9)

578 :デフォルトの名無しさん:05/01/06 19:08:22
質問させてください

IDirectInputDevice8::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という状況下での解決ということでお願いします

以上よろしくお願いします

579 :デフォルトの名無しさん:05/01/06 19:27:28
そういう場合
SetCooperativeLevel を親と子で2回呼ぶか
あるいはデバイス2個作るとかってやり方じゃないのかな
たぶん

580 :デフォルトの名無しさん:05/01/06 20:01:48
>>579
>SetCooperativeLevel を親と子で2回呼ぶか
これに関しては
hwndがプロセスに属する最上位の有効なウィンドウハンドルって限定されてるので
どこで呼んでもhwndには同じウィンドウハンドルを指定しなければならないので無理でした。
最上位でないハンドル、たとえば子ウィンドウのハンドルなどを指定すると
S_FALSEが返ってきます。

>デバイス2個作る
IDirectInput8::CreateDevice
には
IDirect3D9::CreateDevice のようにD3DPRESENT_PARAMETERSなどの
ウィンドウハンドルやターゲットを指定するようなパラメータがないのでやり方がわかりませんでした。
指定のしかたがあるのでしょうか?あれば教えてください〜


581 :デフォルトの名無しさん:05/01/12 17:52:00
質問です。
いわゆるモーションブラーなどの「視覚エフェクト」に関して詳しいページなどありませんでしょうか。
D3Dを使った2Dアクションを作っているのですが、やはりエフェクトが充実していないと
映えないようでして…。

いちおうモーションブラーくらいは自力実装しましたが、さらにステップアップするための参考物が欲しいしだいです。
よろしくお願いいたします。
書籍でも構いません。

582 :デフォルトの名無しさん:05/01/12 18:18:18
視覚エフェクトは、シェーダを使うならt-potの中の人の本が
サンプル色々あってよさそう。

583 :デフォルトの名無しさん:05/01/13 10:06:42
>>582
ありがとうございます。
その方のWebPageも丁寧でいいですね。
書籍も探してみます。

584 :デフォルトの名無しさん:05/01/13 14:12:49
三度すいません。>>581の中の人なのですが、
知り合いのマシンでシェーダをテストしてみたところ、対応していないものが多すぎるようです。

ハイエンド向けなら良いのですが、2Dアクションゲームでそれはちょっと…。
(シェーダ自体は面白そうなので個人では遊ばせてもらいますが)

シェーダに頼らないエフェクトについて、参考になるものもあればご教授いただけると幸いです。

585 :デフォルトの名無しさん:05/01/13 20:09:18
同じ処理をシェーダー使わずにやる

586 :デフォルトの名無しさん:05/01/14 16:30:08
DDSとPPMってどっちがいいの?

587 :デフォルトの名無しさん:05/01/14 17:16:08
1年でC++をマスターしつつDirectXをマスターって無謀ですか?
プログラムはVBちょこっととエクセル程度です。
ちなみにCGの原理と用語はほとんど知っています。
スレ違いでスミマセン・・・m(_ _)m

588 :デフォルトの名無しさん:05/01/14 17:21:51
>>587
あなたの努力しだいだけど一年あったらできるんじゃない?

589 :デフォルトの名無しさん:05/01/14 17:22:24
こんな質問してる時点で無理

590 :デフォルトの名無しさん:05/01/14 17:55:47
そもそもマスターという定義が曖昧すぎる。
喫茶店でも開くのか?

591 :デフォルトの名無しさん:05/01/14 20:05:12
VBちょこっと
がどの程度かにもよる

592 :デフォルトの名無しさん:05/01/14 20:34:18
よく「マスター」とか「極める」の言葉の程度を疑問に思ってる馬鹿がいるが、

マスターはマスターなのである。
それ以上でもそれ以下でもない。

マスターの一般的な意味合いが
「世界最高」なら「世界最高」

「とりあえず組むのに困らない」なら
「とりあえず組むのに困らない」

よくこんな程度が分からないでプログラムが出来るものだ
それとも出来ないのかも知れないが

593 :デフォルトの名無しさん:05/01/14 20:47:04
結局、文脈からマスターがどの程度か読み取れないと自分で言っており、
だから疑問が出るわけなのに、それすら理解できない>>592は、
プログラム以前に設計段階で破綻するだろう。

594 :デフォルトの名無しさん:05/01/14 21:25:51
1年 +20
マスター -10点
VBちょこっと -20点
CGの原理と用語 +5点
スレ違い -10点

計 -5点/100点

595 :デフォルトの名無しさん:05/01/14 21:27:24
図星だった

596 :デフォルトの名無しさん:05/01/14 22:28:22
先ずCを2ヶ月くらいで身に付けてから考えたら?

597 :デフォルトの名無しさん:05/01/14 22:35:10
DirectXなんて勉強してるやつらって、なにしてんの?
業界人はこんなところに書き込まないよ。どうせお前らオタクだろ。

598 :デフォルトの名無しさん:05/01/14 22:40:14
>>594
Error 計算結果が違います。

599 :デフォルトの名無しさん:05/01/14 23:40:55
>>594
やる気 +5点

600 :デフォルトの名無しさん:05/01/15 12:57:20
>>521
D3DXMatrixReflect()と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を使ってるんですが・・・。

601 :デフォルトの名無しさん:05/01/15 13:29:26
バージョン2.0使ってみたらできました。すいません。
ってか学校のPCでも動かなくなってしまったよ。
1.4で回避するほうほうはないですかね?

602 :デフォルトの名無しさん:05/01/15 13:52:45
>>587
まともに3Dのゲームが作れるようになるには2年は必要だね。

603 :デフォルトの名無しさん:05/01/15 13:55:23
>>602
そうだな。
でも、2年で一人前とは言えないまでも使える人間が育つこの業界は楽だなw

604 :デフォルトの名無しさん:05/01/16 00:09:23
そんな事だから35歳定年説がなくならないんですよ。

605 :デフォルトの名無しさん:05/01/16 01:12:34
プログラム勉強中の学生です。
DirectX8で2Dのライブラリ等を作って、次は3Dをやってみようとしています。
ただ、難しさは相当違う感じなんで、何か良い勉強法等あったら教えていただきたいです。
また、TWINTAIL LOVERS等を参考にしているのですが、他に良いサイトありましたら教えてください。
具体的ではない質問ですが、よろしくお願いします。

606 :デフォルトの名無しさん:05/01/16 01:24:04
>>605
DirectX によるゲームプログラミング入門 : 第 1 章 3D ゲームプログラムの基礎
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/

607 :デフォルトの名無しさん:05/01/16 01:29:50
テクスチャ使うときの定石みたいのありますか?
サイズとか、同じテクスチャをうまくつかいまわす?とか

608 :デフォルトの名無しさん:05/01/16 01:40:30
>>606
お早い返答ありがとうございます。
そのページを参考に勉強してみます。

609 :デフォルトの名無しさん:05/01/16 15:06:20
       /\___/ヽ                           l   
      /:::::::       \                  /\___/ヽ
     .|:::.   ''''''   ''''''  |                 /       :::::::\
      |::::.,(一),   、(一)|                |  ''''''   ''''''   .:::|
     .|::::::: ノ ,,ノ(、_, )ヽ、,, |               |(●),   、(●)、.::::|
      \:::::.ヽ`-=ニ=- ' /                |  ,,ノ(、_, )ヽ、,, .:::::::|
     /   `一`ニニ´-,ー´                  \ `-=ニ=- ' .:::::/
     /  | |   / |                       `ー`ニニ´-一´ヽ、
    /   | |  / | |                      /    _    l
    /   l | /  | |                     /  ̄`Y´   ヾ;/  |
__/    | ⊥_ーー | ⊥_ _____________,|    |    |´  ハ
   |  `ーヽl_l_l.} ヽl_l_l.}                       |    |    |-‐'i′l
  (、`ーー、ィ   } ̄`   ノ                       |__ |   _|   7'′
    `ー、、___/`"''−‐"       I            (   (  ̄ノ `ー-'′\
                     D @            ̄   ̄          \

610 :デフォルトの名無しさん:05/01/19 00:47:39
アンチェリ画像が綺麗に出ないんですが、良い方法ないですかね。
加算合成だと、色変わってしまうんでそれ以外でお願いします。

611 :デフォルトの名無しさん:05/01/19 23:16:39
>610
意味がわからん
「アンチェリ」ってアンチエイリアス(anti-alias)のこと?

612 :デフォルトの名無しさん:05/01/19 23:18:40
世の中では通用しない勝手な略称を平気で使う馬鹿は放っておけ。

613 :デフォルトの名無しさん:05/01/19 23:39:37
うぴょろ

614 :デフォルトの名無しさん:05/01/20 00:00:13
ちょっとageさせてもらいますね。

複数の画像を画面の上下に分けて別々に描画したいのですが、どういうやり方があるのでしょうか?
Drawで画像を描画して、Presentで画面の更新をしています。
普通に机と●と△の画像を描画して表示させると
 _____________
|  _________   |
|  \  ●   △   ●\  |
|  ||\             \|
|  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ |
|  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||   |
|     .||              ||  |こうなります。
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
自分がやりたいのは上下に分ける(これは左右に分けてますが)
  __________
 |____|____ |
 |   △  | ●   △|
 |      |       |
 | ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
 | ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
 |        |||      | こういう感じです。
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

615 :デフォルトの名無しさん:05/01/20 00:04:36
Presentで出力範囲を設定しつつ二回描画。

616 :614:05/01/20 00:10:31
>>615
ありがとうございます。

617 :デフォルトの名無しさん:05/01/20 00:41:41
具体的にはそれで
何がしたいのだろうか


618 :デフォルトの名無しさん:05/01/20 20:29:13
D3DXMatrixTransformation2D
のScaleCenterがうまく機能しないんだけど
ちゃんと動作ができている人いますか?

ScaleCenterの値をどんな値に変更しても
なぜか常に画像の0,0の位置から拡大に・・・

619 :デフォルトの名無しさん:05/01/20 22:18:28
SetViewportってのもあるぞい
Presentは一回ですむ

620 :デフォルトの名無しさん:05/01/21 09:37:47
>>617
対戦ロボゲーとかじゃないか?

621 :デフォルトの名無しさん:05/01/21 10:26:26
ちなみにSetViewportでは、同一画像を二回Drawしなければならないので効率が悪い。

622 :デフォルトの名無しさん:05/01/21 11:36:08
>618

誰か助けてください まじで。

623 :デフォルトの名無しさん:05/01/21 14:28:51
マルチポストする馬鹿を助けたいと思う人間は多くはあるまい。

624 :デフォルトの名無しさん:05/01/21 17:38:35
>>623 が馬鹿で単にわからないだけかと

625 :614:05/01/21 17:46:04
>>619=621
ありがとうございます。

>>617>>620
対戦するゲームって大抵画面を分割するから、もし作るとしたらどうなるのかなと思って(・ω・)

Presentを2回する方法だと処理は余裕があるはずなのに動きが遅くなります(2分の1ぐらい)。
描画を2回やるだけなら問題ないのですが。
なのでSetViewportと言うのを調べて使ってみます。
>>621では効率が悪いと書いていますが、他にもあるのでしょうか。
やはり慣れるまではSetViewportを使って、それで処理落ちするようになったら他の方法を探したほうがいいのかな。

626 :デフォルトの名無しさん:05/01/21 18:07:43
垂直同期を待っているという落ちでは?

627 :614:05/01/21 18:20:32
あれ、Presentってそういう機能(?)があるんですか。
CPUフルでやってるのかと(´・ω・`)

628 :デフォルトの名無しさん:05/01/21 20:29:00
デフォだと勝手に待ってくれる

629 :デフォルトの名無しさん:05/01/21 20:53:28
>>618
取り敢えずその辺のソースをさらしてみ。

630 :デフォルトの名無しさん:05/01/21 21:26:01
>>629

// トランスフォーム行列を作る
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 ) という風に
数値を直接書いても、全く変わりませんでした。

631 :デフォルトの名無しさん:05/01/21 21:36:29
>>630

D3DXSpriteの場合はDrawの引数のpCenterに
ScalingCenterを自己解決しました。

自作Spriteも修正中

632 :631:05/01/21 21:44:03
D3DXSpriteのDrawに与えたScalingCenterはどのような処理を行っているんでしょうか?
自作Spriteは4角形ポリゴンで表示しているため、座標にどのような修正をしたらいいのかが
いまいち分かりません。

処理は
D3DXMatrixTransformation2D で行列をつくって、それを反映させて、
ローカル座標とUV座標を入力、色を入力した4角形座標で
ポリゴンを表示するといった流れでやっています。

633 :デフォルトの名無しさん:05/01/21 21:57:01
>>632

ローカル座標 から 中心座標の値をあらかじめ引いておくことで
ちゃんと中心座標から拡大されるようになりました。

ここにソースを載せて改めて自分で見て、気づいたことだったので
>>630 さんに感謝してます。

ありがとうございました。


634 :デフォルトの名無しさん:05/01/21 21:57:56
>>633

>>630さん じゃなくて >>629 さんでした

635 :デフォルトの名無しさん:05/01/24 06:09:20
DirectSoundでストリーム再生する場合は別スレッドを作ってそこでデータを補充するのが定石だと思うのですが、
メインのスレッドでデータを補充してストリーム再生を実現させるためにはどのようにすればいいでしょうか?

636 :デフォルトの名無しさん:05/01/24 07:54:37
>>635
処理落ちを考慮して先読みするだけ。
例えば常に2秒先まで補充しておけば問題ない。

637 :420:05/01/24 18:51:50
スマソ、またまた帰ってきますた(´・ω・`)
DirectInputでゲームパッドを2つ以上で使いたい場合、どこをどうすればいいのでしょうか?
PC[USB]─[コンバーター]─[1P]
              └─[2P]
こんな感じに分かれてて、現在1P側にさしたコントローラーだけに反応します。
1P側を差さずに2P側を差しても反応しなかったので、現状のプログラムは1P側のコントローラの情報を取得していると思います。
検索をしたり本を調べてみましたが2Pのことは書かれてませんでした。
出来れば以下のどちらかで、ここをこうしろ!という点がありましたら助言お願いしますorz
ttp://www.geocities.jp/toru_website/di/index.html
Samples\C++\DirectInput\Joystick


638 :デフォルトの名無しさん:05/01/24 19:54:24
http://www.microsoft.com/japan/msdn/library/ja/DirectX9_c/directx/input/tuts/tut3/tutorial3usingjoystick.asp?frame=true

639 :420:05/01/24 23:16:58
2Pが繋がらなかったのは元々コントロールパネルでも表示されていなかったのが原因なようです。
>>638
少なくともmsdnは見てますよorz
接続されているジョイパッド1つだけ(1P優先)なら出来ますが、2つ以上接続した際にどうやってコントローラーを入れ替えるのかが分かりません。
変数名1と同じ動作を変数名2にさせてみたら2つ目のコントローラーのデータが取得できるかと思ったらやっぱり1Pでした・・・トポステ..

640 :デフォルトの名無しさん:05/01/25 00:36:26
>>639
2つはやったことないが
>>638に書いてある通り
EnumDevicesでスティックを列挙して
コールバック関数でデバイス作ればできるんじゃないのか?
2つ接続したら2回呼ばれるだろうから
そのとき同じLPDIRECTINPUTDEVICEにポインタ入れないようにして

MSDN見てるっていうなら>>638のやり方はやったのか?

641 :デフォルトの名無しさん:05/01/25 00:39:30
試しはせん!試しはせんぞ!

642 :420:05/01/25 01:00:07
>>640
SDKのサンプル(Samples\C++\DirectInput\Joystick)でもやっています。
g_pJoystickと同じことをg_pJoystick2でも(ry
もちろんjsもjs2が同じことをしています。
2Pの十字キー(左スティック)の情報が入っていると思っていたjs2.lX  js2.lYは1Pですたorz


643 :デフォルトの名無しさん:05/01/25 01:22:40
>>420
質問。
EnumDevicesで指定したコールバック関数は何回呼ばれてる?

644 :640:05/01/25 02:19:23
>>642
はっきり言って書き方からして理解してなさそうな感じがするんだが
自分もそのうちやるかもしれんので試してみた
↓こんな感じでちゃんと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;
}

645 :420:05/01/25 08:01:07
>>644
ありがとうございます。
家に帰ってから早速試してみたと思います。
>>643
変数を変えずに(ただのコピーで)2回やってましたがやっぱり1Pでした。
どっかで動作を勘違いしている部分があると思うので、644のプログラムを試してから色々いじってみます(´・ω・`)

646 :デフォルトの名無しさん:05/01/25 16:25:14
direct Xを、初めから丁寧に解説してくれる、いいサイト知りませんか?
何をどこから手を付けていいか、わからない・・・。

647 :デフォルトの名無しさん:05/01/25 16:33:15
チュートリアルに懇切丁寧に解説されている。

648 :デフォルトの名無しさん: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のビルボードのサンプルっぽいのがそうやってた。

649 :デフォルトの名無しさん:05/01/25 19:07:20
>>648
v1 = v0 + step;
角度0の時のstepベクトルの値は?

650 :420:05/01/25 19:28:01



                 orz


やっぱり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に入れているのだろうか(´・ω::,,...

651 :デフォルトの名無しさん:05/01/25 19:34:06
>>648
クォータニオンはあくまで回転情報なので、
例えば+Z方向を向いてるときをニュートラルだとしたら
クォータニオンを行列に戻して ベクトル(0,0,1)を掛けて
それに距離を掛ければ移動量になるんじゃないかな。

652 :デフォルトの名無しさん:05/01/25 19:46:04
>>650
コールバック関数がちゃんと2回呼ばれてるか
CreateDeviceの戻り値取得してデバイス作成に成功してるか
確認を

データの取得はそれでちゃんと別々にできる
デバイス列挙とか作成あたりどう書いてるんだ

653 :420:05/01/25 20:11:21
g_lpDI->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY );

g_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

654 :420:05/01/25 20:15:04
↑g_diDevCaps[i].dwSizeとGetCapabilitiesは別にどうでm

655 :デフォルトの名無しさん:05/01/25 20:17:58
420はやはり勘違いしてるようだ

656 :420:05/01/25 20:21:19
Σ(´・ω・)y- マジッスカ
 ノ(  へへ

657 :644:05/01/25 20:29:19
>>420
なんでわざわざ
(*(int*)DeviceCount)
なんていうわけわからんことをやってまで
変数参照してるか考えてください

この場合のデバイスを列挙するというのがどういうことなのかも

658 :デフォルトの名無しさん:05/01/25 20:36:04
EnumJoysticksCallback( 1Pコントローラ情報, LPVOID lpContext );
EnumJoysticksCallback( 2Pコントローラ情報, LPVOID lpContext );
                     ・
                     ・
                     ・
(デバイスの数分だけ呼ばれる)

とでも書けば分かるのかな?

659 :デフォルトの名無しさん:05/01/25 20:51:04
とにかく420は、コールバック関数というモノをもっとよく知るべき。

660 :420:05/01/25 20:58:34
できました、細かい説明までしてくださりありがとうございますorz

DIENUM〜というのが単純にNULLやS_OKなどを返しているのかと思ってました。
659の通りコールバック関数について勉強してみます。
その前に試行錯誤した残骸を隔離するなり処分するなりせねば (;´・ω|

661 :デフォルトの名無しさん:05/01/26 02:28:42
ESCボタンが押されたらWM_KEYDOWNでVK_ESCAPEを感知して終了します。
でも、DirectInputで特定のボタンが押されたときに
SendMessage(hWnd,WM_KEYDOWN,VK_ESCAPE,0);
を実行すると落ちます。なぜでしょうか?

662 :デフォルトの名無しさん:05/01/26 02:43:47
どなたかDirectX7のリファレンスを英語でも結構なので
UPしてくれませんか?
かなり探しましたがどこにもありません。

663 :デフォルトの名無しさん:05/01/26 03:09:34
>>661
うっかりDefWindowProcにもメッセージを渡してるんじゃないか?

>>662
うpろだ用意しる!

664 :デフォルトの名無しさん:05/01/26 09:46:08
>>662
今のSDK(インストール前のパッケージ)には入ってないのかな?
Cマガの2004年1月号収録のSummer2003には7.0から9.0の日本語版が揃ってたよ。
インストール前のExtrasフォルダね。


665 :デフォルトの名無しさん:05/01/26 10:58:26
DirectXで作ったゲームとかを動かすとネットにつなげようとするのはなんでですか?
ネトゲじゃない普通のでもフリーウェアとかでも同じです。

666 :デフォルトの名無しさん:05/01/26 11:51:01
スパイウェアに汚染されているんだよ。
まずはHDDをフォーマットせよ。

667 :デフォルトの名無しさん:05/01/26 12:49:07
俺は665じゃないが・・・
そんなことがあるのか。
なるほど、そういう症状が出たら俺も気をつけよう。

668 :デフォルトの名無しさん:05/01/26 15:58:27
>>665
ええと何だったっけな
ウィルスや、スパイウェアとかじゃ無いんだけど、そういうのあるのよ

ある意味スパイウェアだけど

669 :665:05/01/26 16:14:00
>>666-668
DirectXの中に何かそういうのがあるのでしょうか?
普通にWinAPIだけで作ったものは動かしても何もないのに、
たとえばDirectDrawで作っただけでも動かすとネットにつなげようとします。
DirectPlayとか使ってるならわかるのですが・・・。
ノートンとかで遮断すれば済む話なんですが、
配布して遊んでくれた人から「これ何してんだ?」というメールをもらいます。
知らない人からみればパソコンから何か情報盗んでるみたいで不快です。
なにか設定とかプログラム側で対処できないでしょうか?

670 :デフォルトの名無しさん:05/01/26 19:58:59
>>669
OS入れ直す
一度もネットに繋げないままで
新たにプロジェクト作ってソースをコピペしてコンパイルまでやる
これで同じようなことするexeができたらお手上げ

671 :デフォルトの名無しさん:05/01/26 21:10:42
アドウェア?

672 :デフォルトの名無しさん:05/01/26 22:39:16
>>670
いや確かランタイム側の話なんで、OS再インスコや、新たにプロジェクト云々はやっても意味無いよ。

673 :665:05/01/26 22:53:14
>>670
新規インストールした3つのパソコンで確認しましたが、
何れもネットにつなげようとしました。
(2000+7a、2000+8.1、XP+9c)

>>672
なるほどDirectXランタイム側の問題なんですか。
そうすると諦めるしかないんでしょうかね。

674 :デフォルトの名無しさん:05/01/27 01:03:48
そんな話は始めて聞いたが…

675 :デフォルトの名無しさん:05/01/27 01:18:22
パケモニいれてどこに繋いでるか見てみれば

676 :デフォルトの名無しさん:05/01/27 04:51:41
漏れ、ZoneAlarm使った場合DirectXがプログラムコントロールに追加される。
サーバー動作制限部分にヒットしている気がする。

677 :デフォルトの名無しさん:05/01/27 09:54:06
>>675
Microsoft(US)につないでいるようです。

>crl.microsoft.com
>CryptRetrieveObjectByUrl::InetSchemeProvider
>MC1=GUID=xxxxxxxxxxxxxxxxx&HASH=xxxx&LV=xxxxx&V=x
こういったものを送信したあと、

>Microsoft-IIS/6.0
>Microsoft Windows Hardware Compatibility
>数字の羅列のあと文字化けが続く
こういうのを受信してました。

ハードウェア コンパチビリティ(?)ということは、
何か互換をとるために情報を送受信しているんですかね。

678 :デフォルトの名無しさん:05/01/27 10:28:59
ハードウェアのWindowsとの互換性をチェックしてるみたいやな。

679 :デフォルトの名無しさん:05/01/27 11:27:06
DirectXの本とかみると

BOOL と NULL って使われているんですがこれって
bool と 0 じゃいけないんですかね?

誰か詳しく教えてくださいませ

680 :デフォルトの名無しさん:05/01/27 11:41:09
bool と 0 の方がいいと思う

681 :デフォルトの名無しさん:05/01/27 12:14:52
DirectXでは大丈夫かも知らんが、WinAPIにはBOOL型なのに-1を返す関数がある。
ポインタでないところはNULLより0がいい。ハンドルのときどうするかは微妙だけど。

682 :デフォルトの名無しさん:05/01/27 12:26:18
>>679
4バイトのやりとりするのにboolにしちゃうのはなぜ?

683 :デフォルトの名無しさん:05/01/27 13:16:01
>>679
SDKでBOOLって書かれてるものは、自分のコードでもBOOLにしといた方がいいよ。
「実は一緒でしょ?」みたいな不要な仮定をしてもそんなにメリットないから。

GetMessageのように BOOL 型で 0, -1, それ以外、と3種の値を返すものもあるし。

NULLも同様だけど、これは0でも良いと思う。

684 :デフォルトの名無しさん:05/01/27 20:34:34
BOOL、0 で逝くことにします
ありがとうございます

685 :デフォルトの名無しさん:05/01/27 21:13:35
>681を読めてない>683...

686 :デフォルトの名無しさん:05/01/27 22:07:14
>>681

ポインタでないところはNULLより0 って
ポインタだから NULL と 0 の問題になっているんだけど
どういうことだろう

687 :デフォルトの名無しさん:05/01/27 22:19:36
>>686
定数を直接書かないなんてことは大原則だろ。これすら守れないような
ひとはパソコン捨てて田舎に帰ってください。

688 :デフォルトの名無しさん:05/01/27 22:34:18
>>687
漏れはポインタに変換される 0 と、
物の個数が0であることをあらわす 0 と、
インデックスのベース値の 0 は定数でも直接書いてるな。

そうしない奴はプログラマとしての適正ないと思う。私見だけど。

689 :デフォルトの名無しさん:05/01/27 23:15:32
えと、#define NULL 0ですよね。
NULLが0なのは仕様ですけど
なんでわざわざ0って書くの?

690 :デフォルトの名無しさん:05/01/27 23:17:12
>689

楽だから

691 :デフォルトの名無しさん:05/01/27 23:19:57
>>690

http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html

692 :デフォルトの名無しさん:05/01/27 23:23:05
>>689
気分。
その日の湿度とか、朝のウンコの快便具合でも変わったりする。

693 :デフォルトの名無しさん:05/01/27 23:48:40
C MAGAZINE - プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン
http://www.cmagazine.jp/src/kinjite/c/null.html

694 :デフォルトの名無しさん:05/01/27 23:56:29
つ C++の設計と進化 P.291

695 :デフォルトの名無しさん:05/01/28 00:05:18
つーか
例えNULLを0と書いても100%問題がおきなかったとしても
視認性とか可読性を考えてNULLと書く

ということをしないようなプログラマはダメだと思います
絶対にバグを出さない天才プログラマで
全て一人でやるか同レベルの天才としか分担作業をしない
なら話は別ですが

696 :デフォルトの名無しさん:05/01/28 00:21:26
そもそもNULL定数なんて言語仕様に含まれてたっけ?

697 :デフォルトの名無しさん:05/01/28 00:57:38
なるほろ
NULLはめんどうだが、可読性のためと。

698 :デフォルトの名無しさん:05/01/28 01:05:47
正常に動くかどうかはテストで確かめられる
可読性を重視したほうがいい

699 :デフォルトの名無しさん:05/01/28 09:11:02
で、NULLと書いて可読性と視認性はあがるのか?
ハンガリアンと同じで面倒なだけに感じるのだが

700 :デフォルトの名無しさん:05/01/28 12:52:37
>>695
Win32 のハンドルとかに代入するときは 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 とか?

かえって可読性下がると思うが。

701 :デフォルトの名無しさん:05/01/28 12:56:02
ヘッダやドキュメント等で「〜の場合にはNULLを返す」「NULLが指定されると〜」などと
書かれている場合には、何も考えずおとなしく NULL を使う。

そうでない場合、ポインタならC++の標準規格に基づいて 0 を使う。
単なる整数の場合、自分で仕様を決めてその通りに記述する。
疑問の生じる余地はないと思う。

702 :デフォルトの名無しさん:05/01/28 14:58:05
>>700
>for (int i = 0; i < num; i++) ...; じゃなくて、
>for (int i = ARRAY_BASE; i < num; i++) ...; とか書くの?
>ビットシフトさせたいときは d <<= ONE; とか?
>下4ビット取り出すときは d & MASK_LOWER_4BITS とか?
お前はバカのオーバースペックそしてバカのレッドゾーン軽やかにマッハバカ

703 :デフォルトの名無しさん:05/01/28 15:12:49
ARRAY_BASEの例の考え方を発展させていった結果がイテレータでしょ?
文脈にもよるがi=0は使いたくないなぁ。

704 :デフォルトの名無しさん:05/01/28 15:20:24
>>677みたいに送信してる文字列とか取得できるような
ソフトがフリーであったら教えてください。

705 :677:05/01/28 15:22:56
これだよ。
www.vector.co.jp/soft/winnt/net/se308001.html

706 :デフォルトの名無しさん:05/01/28 15:30:03
>>704
Ethereal

707 :デフォルトの名無しさん:05/01/28 21:42:50
俺はDel房だからC++を弄るときについついエラーを出す
面倒なので
#define nil NULL
を上に追加

708 :デフォルトの名無しさん:05/01/28 22:02:47
漏れはC#厨なので(以下ry

709 :デフォルトの名無しさん:05/01/29 02:48:19
閉じているメッシュの体積はどうやって求めますか?
バウンディングボックスの体積と比較してみたいのです。

710 :デフォルトの名無しさん:05/01/29 03:14:29
数学板で聞くとか。

711 :デフォルトの名無しさん:05/01/29 06:23:26
輪切りにして積分みたいにしてみようと思います

712 :デフォルトの名無しさん:05/01/29 07:40:19
>>709
ここはDirectXスレだが。
DXTaisekiKeisan関数があるとでも思ったのか。

713 :デフォルトの名無しさん:05/01/29 11:15:17
>>712意味わかりませんが。聞いちゃいけないのか( ゚Д゚)ゴルァ!!

714 :デフォルトの名無しさん:05/01/29 11:59:06
出し惜しみせずに3Dの技術を誰かが答えます Part4
http://pc5.2ch.net/test/read.cgi/gamedev/1021171809/

715 :デフォルトの名無しさん:05/01/29 13:47:35
DirectX9.0b で フルスクリーンからウィンドウモードに変更したときに
今までハッキリ表示されていた、文字やスプライトの底辺がすこしにじんだ感じになります
描画位置によって上ににじみがでたり場所が変わります

またフルスクリーンにすると、直っていますが、ウィンドウモードにすると
なぜかまたにじんでいます

SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_NONE );
SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_NONE );

上記の設定を行いましたが、変化がなかったため違う問題のようです

この原因がなにか分かる方いないでしょうか?


716 :デフォルトの名無しさん:05/01/29 13:48:57
凸メッシュに分割してしまえば
あとは凸多角形の面積を求める方法が使えるんじゃなかろうか
とか言ってみる

でもメッシュの凹凸判定ってどうやるんだろー

717 :デフォルトの名無しさん:05/01/29 13:58:51
クライアントとバックバッファのサイズがあってない

718 :デフォルトの名無しさん:05/01/29 14:22:16
>>717 いや ちゃんとAdjustWindowRectで求めているので、それはあってると思います

719 :デフォルトの名無しさん:05/01/29 14:29:53
>>717

GetClientRectで調べてみたら、確かに違いました
早とちりしてしまった

ありがとうございます

720 :デフォルトの名無しさん:05/01/29 17:05:45
>>716
三頂点と面法線を内積して隣接する辺のベクトルと比較すれば簡単じゃん。

721 :デフォルトの名無しさん:05/01/30 01:38:25
DirectInput で データの取得前に行う Acquire() は

データの取得前に必ず実行するようにしたらだめですか?
(1ループに1回)

やねうらお氏のサイトで
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp40to47.html

WM_ACTIVATEAPPを見て、AcquireとUnacquireしなさいとか
書いている本も多々あるが、そんなものは真っ赤な嘘である。

って書いてあったので、どうせなら毎回やればいいやと
思ったんですが、誰か教えて下さい。

722 :デフォルトの名無しさん:05/01/30 03:41:15
>>721
パフォーマンス的に問題がなければOKかと

723 :デフォルトの名無しさん:05/01/30 12:43:18
グラデーション等がかかるようなフォントを描画するプログラムを作って使うのと、
自分で画像を作成して使うのってどっちが実用的ですか?
フォント描画だと楽だけど重くなりそうですが…


724 :デフォルトの名無しさん:05/01/30 13:03:34
>>723
自分でフォントにグラデーションかけたほうがいい。
高速化としては、まずはグラデーション用のBMPを読み込んでおき、
下地としてフォントの文字がある部分を白に背景を黒にして文字を描き、
白か黒の部分をマスクにして先ほどのBMPを貼り付けていく。
これで簡単にグラデーションのフォントが完成。
貼り付けるBMPを他の模様などにすれば応用も楽。

725 :デフォルトの名無しさん:05/01/30 13:26:37
DirectX を スレッドでやるのはタブーなのですか?
描画すらさせてもらえなくなった・・・。

726 :デフォルトの名無しさん:05/01/30 16:18:27
>>724
ありがとうございます。
フォント関連は放置気味だったんですが、試してみます。

727 :デフォルトの名無しさん:05/01/30 21:23:17
>>725
lock&unlock

728 :デフォルトの名無しさん:05/01/31 01:11:55
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))

上記のマクロの意味が分かる方いませんか?
DirectInputでのキーの番号付のようなものらしいです。

0->field がNULLポインタを参照にしているのになぜエラーにならないだろうと
そんな疑問を感じるんですが、どうなんでしょうか。

729 :デフォルトの名無しさん:05/01/31 01:33:19
type構造体のメンバfieldがtypeの何バイト目にあるか調べる。
アドレスを計算しているだけでアクセスするわけではないので鰓はでない。

730 :デフォルトの名無しさん:05/01/31 02:10:50
>>729
ありがとうございます
オオなるほど そういう処理がされているんですか
->って違う使い方もできたんですね

う〜むC++は奥が深い・・・
結構勉強していたつもりでもまだまだだなぁと感じました
MSヘッダは知らない処理だらけだしorz

731 :デフォルトの名無しさん:05/01/31 02:43:48
>>730
揚げ足気味だが、それはC++ではない。Cの構文だ。

732 :デフォルトの名無しさん:05/02/04 00:20:20
DirectX9.0c october 2004 と Extras 入れたら

uuid.lib(unknwn_i.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください

っていうエラーがでました
VC6 と WindowsXP 使ってます

原因分かる方教えてください

733 :デフォルトの名無しさん:05/02/04 00:25:29
VC6を窓から投げ捨てる
それがイヤなら2004を窓k(ry

734 :デフォルトの名無しさん:05/02/04 00:39:26
>>733

October は VC6に対応しているらしいんですよ
なぜかなぁ〜
Extrasの中にあるVC6用のファイル上書き保存したのに


735 :デフォルトの名無しさん:05/02/04 01:44:04
>>734

XPSP2 用の PlatformSDK に問題があるようなことを外国のサイトで発見したけど
どうやって解決すればいいかわからない。。

でも日本でこの問題がでていないってことは、
何か間違ってることしてるのかな。。

736 :デフォルトの名無しさん:05/02/04 03:30:18
PlatformSDK の uuid.lib は VC6 と相性が悪い(?)ので、
VC6 に元からある uuid.lib を(一応バックうpしてから)上書きして使うのが無難。

737 :デフォルトの名無しさん:05/02/04 14:02:20
>>736

さすがに上書きはまずいと思うよw

platformSDK使う他のプログラムが動かなくなるし

で、libが重複してしまっているから、試しにプロジェクトのパスからplatformSDKのlibフォルダを
はずしたら、なんと・・・・うまくいきました

パスはincludeだけでいいみたいでした

解決ヽ(´ー`)ノ

738 :デフォルトの名無しさん:05/02/04 23:26:30
ありゃ? DirectX9ランタイムって
デバッグとリテールの選択の余地ないの?

739 :デフォルトの名無しさん:05/02/04 23:28:37
何でそう思ったのか小一時間問いつめたい

740 :デフォルトの名無しさん:05/02/04 23:34:56
どっちでインストールされたのかも分かんない・・・。
コントロールパネルにも無いので、
system32のそれらしいファイル探してた。
でもわかんない。

741 :デフォルトの名無しさん:05/02/04 23:37:55
あー。もしかしてデバッグ版を選択できるのって
SDKに付属のランタイム入れるときだけなんですか?

742 :デフォルトの名無しさん:05/02/04 23:42:42
はい

743 :デフォルトの名無しさん:05/02/04 23:44:39
ありがとうございました。

744 :デフォルトの名無しさん:05/02/04 23:50:17
どういたしまして。

745 :デフォルトの名無しさん:05/02/05 00:06:43
私の様なザコが2ちゃんねるに来るのが間違ってました。
すみませんでした。
でもカスとか簡単に人に言えるような人間にはなりたくないです。

746 :デフォルトの名無しさん:05/02/06 15:50:50
聞く前に試さないのが悪い

747 :デフォルトの名無しさん:05/02/07 16:06:37
なんとかそこそこWindowsAPIが理解できてきたので、DirectX9を勉強し始めたのですが、どうやって学べば良いか分かりません。
解説サイトとかはDirectX8以前を扱っているものがほとんどで、上手くコンパイル出来ないし…
MSDNのサンプルとかを理解できる能力がないと無理なのでしょうか?

748 :デフォルトの名無しさん:05/02/07 16:26:57
チュートリアル読め

749 :デフォルトの名無しさん:05/02/07 16:51:16
>>748
こんな良いものがあったとは…
取り敢えずウィンドウの作成やってみます

750 :デフォルトの名無しさん:05/02/08 02:23:46
最初はとっつき難いもんだろWinAPIだって

751 :デフォルトの名無しさん:05/02/08 13:06:58
すみません、質問なんですが、これまでDirectX8.0を入れてプレイしていたゲームを、
新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。

752 :デフォルトの名無しさん:05/02/08 13:08:35
すみません、質問なんですが、これまでDirectX8.0を入れてプレイしていたゲームを、
新しくDirectX9.0cを入れてプレイしてみたところ、ゲームの表示が画面からはみ出て、
大変見づらくなってしまいました。
おそらく新しいバージョンのDirectXをインストールしたことが原因だと思うのですが、
以前のDirectX8.0をインストールしなおす方法はあるのでしょうか?
スレ違いでしたら大変申し訳ありません。

753 :デフォルトの名無しさん:05/02/08 13:12:19
おっしゃる通り、スレ違いなのでお引き取り下さい。

754 :752:05/02/08 13:14:02
やはりそうでしたか、大変失礼しました。どちらのスレに行けばよいでしょうか?

755 :デフォルトの名無しさん:05/02/08 13:22:34
http://pc5.2ch.net/test/read.cgi/pcqa/1107780143/

756 :デフォルトの名無しさん:05/02/08 14:37:53
>>753
スレ違いというか DirectX関連の質問なんだから答えてあげりゃいいじゃんよ
わからないんだったらしょうがないが

>>751
新しいDirectXから古いDirectXに戻ることはできないよ
でも新しいDirectXには古いDirectXが入っている
通常ゲームでは決められたバージョンが使用されているので、
DirectX8でゲームができたならDirectX9.0cを入れても
動作は変わらないはず

問題がありそうなところは、ディスプレイの解像度の設定
ゲームがフルスクリーンだと思われるので、そのときの解像度に
設定してみて、画面がはみでるかたしかめるのがいいと思う

757 :デフォルトの名無しさん:05/02/08 20:25:33
何こいつ

758 :デフォルトの名無しさん:05/02/08 21:07:45
DirectMusic のInitAudioに設定する IDirectSound** は
IDirectSound8 から取得することってできないんですか?

Music と Sound を共存させる方法がよくわかりません


759 :デフォルトの名無しさん:05/02/09 08:36:25
>>758
>IDirectSound8 から取得することってできないんですか?
ヘルプに書いてあるでしょ。

>Music と Sound を共存させる方法がよくわかりません
そのまま使えば共存できるでしょ。

760 :デフォルトの名無しさん:05/02/09 17:00:21
質問宜しいですか?
CSSから呼び出せるDirectX Transformを作ろうとしてます。
<body style="filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=50);">
みたいに使うやつです。
で、とりあえず動くものはできたんですが、上の例でいうOpacity=50みたいに
引数を渡す場合の、トランスフォーム側での値の取得の仕方が分かりません。
詳しい方ご教示下さい。

761 :デフォルトの名無しさん:05/02/10 02:35:58
http://pcweb.mycom.co.jp/column/winxp/151/

Longhornが割と早く出てくるとか。
WGFに早く乗り換えたい。

762 :デフォルトの名無しさん:05/02/10 14:53:57
>>759

いやできないんどすよ?
でなければInitAudioの引数の意味がないんですが。

763 :デフォルトの名無しさん:05/02/10 15:39:54
DECLARE_INTERFACE_(IDirectSound8, IDirectSound)


764 :752:05/02/10 16:10:55
>>756
丁寧なレスありがとうございます。
解像度を設定しなおしてもやはりはみ出るので、ディスプレイの水平方向の設定を変えたところ、
最も見たかった部分はなんとか画面の中に収まるようになりました。
スレ違いなのに回答してくださってありがとうございました。

765 :デフォルトの名無しさん: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)

としてみたのですが、うまく行きませんでした。


766 :765:05/02/10 21:01:45
正直意味不明ですが…

1. 4点に逆行列を掛ける
2. 4点のxyzそれぞれに視点の座標xyzを引く
3. 4点を任意の位置に平行移動
4. 描画

で解決しました。

767 :142:05/02/10 22:15:59
http://ime.nu/www.sun-inet.or.jp/~yaneurao/rsp/rsp40to47.html

768 :デフォルトの名無しさん:05/02/11 04:02:04
誰かDirectSoudでOggを使ったストリーミングサンプルUPしてください

どうやったらWaveでもOggでも利用できるスレッド管理を作れるのか
わかりません

もう・・ストリーミング疲れてきた・・・助けて・・・(;´Д`)

769 :デフォルトの名無しさん:05/02/11 07:40:16
>>768
で き な い な ら あ き ら め れ ば

770 :デフォルトの名無しさん:05/02/11 09:17:53
丸投げすんな馬鹿。
自分の実装したコードで気に入らない部分を具体的に列挙せよ。

771 :デフォルトの名無しさん:05/02/11 10:43:46
>>770
してねーだろ サンプルほしいっていってるだけだっつの。
参考にするだけ

772 :デフォルトの名無しさん:05/02/11 11:38:38
相変わらず心の狭いやつ多いな・・・

773 :デフォルトの名無しさん:05/02/11 11:50:11
>>771
結果的に同じだろ…アフォか

774 :デフォルトの名無しさん:05/02/11 13:01:45
「サンプルないと作れません」

今までずっとパクってきたからそうなるんだよ
自分のことプログラマって思ってるんだろうけど
おまえさんはキーパンチャー

775 :デフォルトの名無しさん:05/02/11 16:47:12
そういうあんたはちゃんと作れるのかと小1時間

776 :デフォルトの名無しさん:05/02/11 18:05:23
まー結局まともにプログラミングできるやつはこーいうところこないわけで

777 :デフォルトの名無しさん:05/02/11 18:19:04
まともに出来ないので書き込みします。

3Dのフライトシューティングを作っているのですが、空と地面の描画(表現の仕方)についてアドバイスをお願いします。

地面についてですが、とりあえず全て平ら(又は水面)を表示してみようと思います。
現在1万x1万の四角形のポリゴンを10x10分用意して、2DのRPGのマップみたいに表示しています。
□□□
□□□ こんな感じです
□□□
高度0なら特に問題はありませんが、高高度では地面の端が見えてしまいます。

次に空についてですが、半球の内側に青色のテクスチャを貼り付けると言うのをやってみました。
半球が小さいと閉塞感があり、逆に大きいと処理が・・・。

2つともある程度の距離感があり、地面は距離が離れていても広範囲が見渡せるようなテクニックがあればアドバイスをお願いします。
検索したり本屋にいったりして調べてみましたが、この手の解説をしているところがさっぱり。
やはりほとんど限りない空間を動き回るようなゲームは難しいのでしょうか。

778 :デフォルトの名無しさん:05/02/11 18:24:18
フォグ

779 :デフォルトの名無しさん:05/02/11 18:36:03
>>777

FF11はマップ別にフィールドがあるけど
話によるとドラクエ8は 世界がすべて同じ空間上にあるらしい
(洞窟などは別として)
なのでできない問題ではないみたいですね

処理としてはやっぱり マップを複数のチップで構成して
視点の位置からRだけ離れている範囲のみを表示するといった感じに作り、
なおかつフォグでぼやかせれば うまくいくんじゃないかと。

780 :777:05/02/11 18:38:48
フォグを使うと高高度では真っ白になって地面が全く見えなくなってしまいます。
霧が濃いステージという設定なら有効かもしれませんが・・・。

781 :デフォルトの名無しさん:05/02/11 18:53:34
>>780
それはフォグを調整すればいいだけだし・・・・・・・。

782 :デフォルトの名無しさん:05/02/11 19:44:48
>777
フォグとカメラのfovyあたりを調整しる
このあたりのパラメータの設定はテクニックじゃなくて
感性の問題になってくると思われ
被写界深度なんかはこの場合効果なさそうだな

783 :777:05/02/11 19:50:05
ありがとうございます。
微調整を繰り返しましたがやはり高高度での遠方(地面)が見えないのですが、これは性能上の問題なのである程度は我慢するしかなさそうですね。

あとは空の描画なのですが、真上が青で地平線近くが水色のグラデーションをかけたいです。
これは半球のポリゴンに画像を貼り付けて〜といった形じゃなさそうなのですがこれでいいのでしょうか?
いいのでしょうか?って期待した結果は得られてませんが。。

784 :デフォルトの名無しさん:05/02/11 20:00:19
>>783

自分で返答していてなんだけど、結局2chで質問しても
まともな技術持った人のアドバイスじゃないからハッキリ言って役に立たないと思うよ
ここで質問してずいぶん論議よんだ内容が、MicrosoftのDirectXのページいって
すぐに解決したことがあったし

誰かを蹴落とすような言い方しかできないやつや、自分の力を誇示したい輩の
下手なアドバイスくらうよりは、本とかまともなWEBサイトみたほうがいいと思われ

おもしろ半分で書き込んでみるとそれなりに、にぎわって楽しいかもしれないけどw


785 :デフォルトの名無しさん:05/02/11 20:19:15
知ったかするから仕様的なことは聞かない方がいいけど
手法的なことは2chのが参考になると思う

786 :777:05/02/11 20:43:00
アルゴリズムに正解は無いから、自分が考えている以外の考えがでると良し悪しに関係なく役立つよ。
でもここに来るのは最終手段ですが。

787 :デフォルトの名無しさん:05/02/11 20:44:54
>783
グラデーションがかかるように頂点カラー設定しる

788 :デフォルトの名無しさん:05/02/11 21:07:43
>>787
{ 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 },
以下略

まだ試してないけど処理落ちしそうなんですが

789 :デフォルトの名無しさん:05/02/11 21:21:04
グラフィックカードのレジスタに直接値を書き込むにはどうしたらいいですか?

790 :デフォルトの名無しさん:05/02/11 21:24:28
出刃どら各

791 :デフォルトの名無しさん:05/02/11 21:24:53
>789
ttp://www.geocities.co.jp/playtown/2004/psx/hw1f80j.htm

792 :デフォルトの名無しさん:05/02/11 21:35:23
>788
頂点バッファ使ってないの?
まぁ処理オチが気になってから頂点バッファを使うように変更してもいいと思う

793 :デフォルトの名無しさん:05/02/11 21:42:51
>>784
BBX荒らされてるしMS公式はネイティブの質問不可能だから
今はここしか質問するところがない。

794 :デフォルトの名無しさん:05/02/11 21:46:56
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄|         
 | ヤンマーニ! | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |__| ̄ ̄ ̄ ̄ ̄ ̄ ̄|マーニ! |
    ∧| ヤンマーニ! |____| ̄ ̄ ̄ ̄ ̄ ̄ ̄|     ぞろぞろ・・・・・
. . ( ゚ |_______|. ||    | ヤンマーニ! |
  / づΦ∧∧ ||  ( ゚д゚)||    |_______|ぞろぞろ・・・・・
.       ( ゚д゚)||  / づΦ     ∧∧ ||
 ̄ ̄ ̄|  / づΦ ぞろぞろ・・・・・ ( ゚д゚)||       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
ー| ̄ ̄ ̄ ̄ ̄ ̄ ̄|          / づΦ  .   | ヤンマーニ! |
_| ヤンマーニ! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄|    |_______|
  |_______|    | ヤンマーニ! |       ∧∧ ||
.    ∧∧ ||    .     |_______|   .   ( ゚д゚)||
   ( ゚д゚)||      .       ∧∧ ||           / づΦ
   / づΦ           ( ゚д゚)||
         ぞろぞろ・・・・・ / づΦ

795 :デフォルトの名無しさん:05/02/11 21:47:59
ごばtt

796 :777:05/02/11 22:04:14
>>792
頂点バッファを直接使う機会がなかったから全てXファイルからのポリゴンでした。
頂点バッファを直接使うのってあまり重くならないのでしょうか。

・・・地面を描画する前に空を描画しちゃえば10万離れた位置に描画しなくてもよかったか('A`)

797 :デフォルトの名無しさん:05/02/11 22:13:18
>796
あぁ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
みたいな感じで
これそのままソースに書くなよ
あくまでも考え方として式を書いてるだけだから

まぁやりかたがよくわからんかったら空のメッシュだけライトの設定を変えたり、
テクスチャで色つけたり、マルチテクスチャでグラデ専用のテクスチャ重ねて張ったり
方法はいくらでもある
自分のできる方法でやればいい

798 :777:05/02/11 22:32:52
>>797
ありがとうございます。
その頂点の座標は
         ・
    ・        ・
        |\___
 ・     .└―――`   ・    (自分がやっている方法)
           
・                  ・  こうではなく


         ・
              ・
        |\___
       .└―――`   ・
           
              ・
         ・            こういうことでしょうか?

自分がやっているのは乳首が常に上にありますが、797の方法では期待(視点)の前方に乳首がある。
んでその高さにあわせて各頂点の色を変化させていく。



799 :797:05/02/11 22:46:32
いや、>797で書いたのは同じように半球を上からかぶせたのを考えてる
まぁメッシュの形が何であれ縦にグラデを入れる計算なんだが
         ・    <- Y座標maxH 色maxC
    ・        ・
        |\___
 ・     .└―――`   ・
           
・                  ・ <- Y座標minH 色minC
まぁこう指定するるんだが

800 :777:05/02/11 22:51:26
ああ、リアルタイムで変えるんじゃなくて初期設定でやるんですか。
了解です〜

801 :デフォルトの名無しさん:05/02/11 22:58:02
>800
そうそうw
ちゃんと書いてなかった漏れも悪かた

802 :デフォルトの名無しさん:05/02/12 17:23:48
基本だが、天球を描くなら、
クリアするのはZとステンシルバッファのみにして、
Zバッファ無効で最初に描く。

これで少しスピードアップ。

803 :777:05/02/12 19:33:17
そんな技術があるのですか、ちょいと調べてみます。

SDKのDirect3Dサンプルで400fpsやものによっては2000fpsを突破しているんですが、
自分のはせいぜい60fpsを維持するのが精一杯で・・・どうやればここまで高速化できるのかt
70個の小さなスプライトの表示だけなのに窓モードで60fpsから50fpsに落ちたり・・

804 :デフォルトの名無しさん:05/02/12 19:42:53
>803
最初はあまり気にするな
ずぶの初心者が作ったものがプロの作ったサンプルと同じように動作するわけがないんだから
自分なりにやっていきながら、たまにはヘルプよんだり、ネットに落ちている
ソースコードつきのサンプルを眺めたり、SDKサンプルのソース読んだりしながら
少しずつテクニックを上乗せしていけばいいだけ

805 :デフォルトの名無しさん:05/02/12 20:00:17
>>803
>60fpsから50fpsに落ちたり・・
どれは同期とってるからでは?

806 :デフォルトの名無しさん:05/02/12 20:07:12
Presentを使ってるからだと思うけど、同期を取らない描画方法ってあるのでしょうか?

807 :デフォルトの名無しさん:05/02/12 20:14:03
>>806
PresentationIntervalメンバだよん。

808 :デフォルトの名無しさん:05/02/12 20:26:09
>>807
ありがとうございます。
でもVSYNCを無視しても60〜65fps(ノ∀`)

809 :デフォルトの名無しさん:05/02/12 20:36:58
>>808
・・・・・・・・・・・・・・・・・・・・。

810 :デフォルトの名無しさん:05/02/12 21:15:52
ちゅーかVSYNCは無視するなよ

811 :デフォルトの名無しさん:05/02/12 21:35:17
もともと窓モードではVSYNCはかからないよ

812 :デフォルトの名無しさん:05/02/12 21:56:03
ああ、ごめん
サンプルが窓モードだと強制的に
D3DPRESENT_INTERVAL_IMMEDIATE
にしてただけだった。

813 :デフォルトの名無しさん:05/02/12 22:09:21
>>777
400fpsとか2000fpsは理論値なんで、実際にそのスピードで
描画してるわけじゃない。
モニタのリフレッシュレート以上には描画できないよ。

天空を最初にZバッファ無効で描画すると、ファープレーンを
遠くに設定しなくてすむので、Zバッファの精度も良くなる。
GeForce系はZバッファの精度がイマイチだしね。

814 :デフォルトの名無しさん:05/02/13 00:09:46
>>813
>400fpsとか2000fpsは理論値なんで、実際にそのスピードで
いや、そう設定すればそう動かすこともできるじゃんw
とか、言わなくていい場面であえて言って混乱するのを狙ってみる鬼。

815 :777:05/02/13 01:29:46
>>814
見なきゃ良かったorz

Zバッファを有効にした状態で、座標を変えたり視点を変えたりして
SetMaterial・SetTexture・DrawSubsetをやっています。
(あと光の設定)
遠くに行こうが画面外に行こうが特別な処理をしていないのが重い原因・・?

ステンシルバッファについては使ったことが無いから今猛勉強中ですが、
1つの点に対して2重以上の描画をしないようにする手段の1つとして考えていいのでしょうか。
視覚的には何も変わらないが、余分な描画をしない分早い、と。

816 :デフォルトの名無しさん:05/02/13 01:56:45
>>777
ステンシルバッファは現状のキミの目的からすると、使わなくていいんでは。
まずはZバッファの有効無効と、クリッピングプレーンの調整をするのが良い。


817 :777:05/02/13 02:02:40
ラジャー(`・ω・´)ゝ .oO(クリッピングレーン・・・(´・ω:;.:...  )

818 :デフォルトの名無しさん:05/02/13 02:27:51
>70個の小さなスプライトの表示だけなのに窓モードで60fpsから50fpsに落ちたり・・

遅くなる原因としては、
・70個ばらばらにDrawしている
・余計なレンダーステートの変更をしている
・DirectXがデバッグモード
・VCのビルドがデバッグモード
なんてゆーのが考えられます。
まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。

819 :デフォルトの名無しさん:05/02/13 02:46:30
>・VCのビルドがデバッグモード
これ結構ありえるよなー

820 :777:05/02/13 03:00:14
> ・70個ばらばらにDrawしている
アチャ━━━━(ノ∀`)━━━━!!!!
目がつぶれてきたので後日後日。

9.0bでDrawは(画像 , rect , Scale , 回転の中心 , 回転の度合い , 描画位置 , ARGB)ですが、9.0cでは何か変わったのかな?
DrawPrimitiveUPが9.0bの形で使えればいいのですが。


821 :デフォルトの名無しさん:05/02/13 03:54:09
これからVisualC++7を使って、DirectXのプログラミングをするに当たって、二点質問があります。
1.2Dのゲームを作ろうとしている場合でもDirectX9.0ベースで考えるべきなのでしょうか。
  それともDirectX7.0のライブラリを使ってDirectDrawを使用すべきなのでしょうか?
2.良い参考書はありますか? 店頭ではI/O別冊が目立ちますが、どうも内容が薄いようです。
  オンラインは調べ物にはいいですが、読み物としては最悪なので紙ベースの資料(日本語)が欲しいのです。

822 :デフォルトの名無しさん:05/02/13 04:41:43
基本的にはご自由に。
1.Direct3Dの方が主流だから書籍とか情報源が多い。
今からわざわざDirectDraw使う必要は無いと思う。
2.王道的にDirectXのヘルプのチュートリアルで
デバイス作成から一つずつ地道に。

と大衆的意見(推測)。

823 :デフォルトの名無しさん:05/02/13 04:47:30
>821
>それとも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
漏れはちょっと意見が違う
ずぶの初心者はチュートリアルの前、もしくは平行して初心者向けの書籍を読んだほうが学習効率がいいと思う

824 :デフォルトの名無しさん:05/02/13 05:31:35
>>821
洋書だがManagedDirectX0KickStart。 samspublishingからです。

825 :デフォルトの名無しさん:05/02/13 05:35:22
>>823
もちろん他の情報源も必要ということが前提。


826 :デフォルトの名無しさん:05/02/13 05:36:24
825=822(名前欄忘れ

827 :デフォルトの名無しさん:05/02/13 05:43:09
最初は本買わずにSDKのTutorialやったほうがいいと思う。
極限まで簡略化してて学びやすいし分かりやすい。
んで、Tutorialを全部見終わってからレベルに見合った
本を買っていけばいいと思う。

828 :デフォルトの名無しさん:05/02/13 06:59:56
チュートリアルを全部やっても2Dができるようになるわけじゃない。

829 :デフォルトの名無しさん:05/02/13 10:27:19
2DやるならまずはSDLから入りなはれ。

http://pc5.2ch.net/test/read.cgi/gamedev/1005469181/

830 :821: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
便利なライブラリのようですね。


831 :821:05/02/13 12:09:00
途中で送信してしまいました。
>>829
便利なライブラリは急いで成果を上げる際には良いのですが、
理解を深めるのにはあまり向かないと思うので、
他のプラットフォームを意識する必要が出てきてから
汎用的な機能を切り出すよう考えてみて、その上でライブラリの適用を考えたいと思います。

832 :デフォルトの名無しさん:05/02/13 12:35:57
Direct3D(今はDirectGraphicsか)の学習の仕方としては、
まず最初に三次元空間と3DCGの基礎理論を知っておいたほうが
いいんではないだろうか。いきなりカメラ座標が〜とか、
視野が〜とか言われてもワケわからんと思う。基礎を知ってると、
ヘルプのチュートリアルは分かりやすい。

本のオススメは、DirectX9シェーダプログラミングブック。
シェーダの本だけど、前半1/3くらいはDirect3D基礎と数学理論。
結構丁寧に書かれている。

833 :821:05/02/13 12:51:11
>>832
カメラや照明の考え方は、3DCGツールを使っていた関係で大丈夫かな、と思います。
数学理論ですが・・・
ベクトルや行列なら問題無いですが、統計の概念が入ってくると辛いかもしれません。
ゲームを作るのが目的なのに、単純なレイトレーシングでどうにかなる物じゃないですしねえ。


834 :デフォルトの名無しさん:05/02/13 16:17:57
>1.2Dのゲームを作ろうとしている場合でもDirectX9.0ベースで考えるべきなのでしょうか。

2DだとスプライトをDrawPrimitiveでうまくまとめるならいいけど個別に
DrawするならDirectXじゃなくてOpenGLのほうがいいかも。
DirectXはドライバモデルが不出来でDrawにもの凄くオーバーヘッドがある。
だけどOpenGLはビデオカードメーカーがチューンし易いのでかなり高速。
DirectXではこの問題を解決するためにインスタンシングを付けたけど
nVidiaによればOpenGLはこの様な仕組みに頼らなくても高速らしい。
なのでOpenGLとキー入力やサウンド用にSDLを組み合わせるのがお勧めかも。

835 :777: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に)。

836 :デフォルトの名無しさん:05/02/13 16:56:37
>>835
3Dには透過色の概念がない。アルファチャネルを使う。
ところで、ID3DXSpriteを使う方法はどうだい?

837 :777:05/02/13 17:18:06
>>836
それだと元に戻ってるのでは。
>>818
> ・70個ばらばらにDrawしている
>まずはDrawPrimitiveUP1回で全スプライトを描画するようにすべし。
という理由からDrawPrimitiveUPを使おうとしているので。

838 :デフォルトの名無しさん:05/02/13 17:32:40
>>835

☆3.DrawPrimitiveUPで描画☆
はスプライト毎にDrawPrimitiveUPを呼んで描くやり方

☆4.インデックスバッファ(DrawIndexedPrimitive)で描画☆
が、一回のDrawIndexedPrimitive呼び出しで全部描くやり方


プリミティブタイプ、
D3DPT_TRIANGLESTRIPとD3DPT_TRIANGLELISTの違いに注意。

839 :デフォルトの名無しさん:05/02/13 17:49:32
簡単にいくならTLVERTEXのvectorを用意して
そこにどんどんデータを詰めていって最後にDrawPrimitiveUP


840 :デフォルトの名無しさん:05/02/13 18:03:30
Meshを使うのは邪道なんでしょうか?

841 :777:05/02/13 19:10:23
これって複数種類(数字0〜9など)の画像も1回で描画できるのでしょうか。
SetTextureとDrawIndexedPrimitiveを画像分繰り返さないといけないし、透過色・アルファ値の設定も入れるとDrawより処理が重くなりそう・・・。

842 :デフォルトの名無しさん:05/02/13 20:00:42
重くならねーっつの。ウダウダ考えてる暇があるならとにかくコードを書いて自分で試せ。

>これって複数種類(数字0〜9など)の画像も1回で描画できるのでしょうか
違う数字を表示したいなら一枚の画像に0-9の数字を入れて頂点のUV座標ずらせばいいの。

>画像ごとにSetTextureとDrawPrimitiveを繰り返さなければいけない
これは仕方が無い。マルチテクスチャでも使わない限り解決法はない。
そんなことするよりも上の方法と同様になるべく同じ画像に詰め込んだ方がいい。

>透過色・アルファ値
ちゃんと理解してるけ? テクスチャのアルファ値とそれを貼り付ける頂点のアルファ値、そして
テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?

843 :デフォルトの名無しさん:05/02/13 20:08:53
うーん、そこまで初心者だとOpenGL使ったほうがいいかも。
DrawPrimitive1回で4頂点分しかDrawしないなんて使い方だと
DirectXでは最悪なパフォーマンスになるよ。
それだけDirectXはAPI発行にオーバーヘッドがあるって事。
だからDrawの前にスプライトを1つにまとめるような事をしても
1回で全部描画出きるなら高速化できるってわけ。

844 :デフォルトの名無しさん:05/02/13 21:10:49
初心者から2D Drawの方法を奪って3Dで代用させるマイクロソフトの流儀には腹立たしい。

845 :デフォルトの名無しさん:05/02/13 21:39:39
>>843
え?測ったことあるの?
少なくとも俺の環境では
DrawPrimitive1回で描画しても分割して描画しても
速度に大した差は無かったよ。

>>818の人ってホントに詳しく勉強したことがあるのか怪しい。
>・70個ばらばらにDrawしている
>・余計なレンダーステートの変更をしている
普通に考えてたかだか70個程度でオーバーヘッドなんてあるわけない。
別の理由を考えたほうがいい。
レンダーステートはいくら変更しても結局DrawPrimitiveが呼ばれるまで
グラフィックボードには情報は送られない。
好きなだけ変更すればいい。

846 :777:05/02/13 22:09:21
>>842
ごめんなさいorz
試しているけどDrawと配置場所が同じになるようにするのが精一杯で。
とりあえず画像を1つにまとめてます。


透明色を指定することは出来ましたが

赤赤白白 青青青青 (白は透明色)
赤赤白白 青青青青 この2つの画像を同じ位置に描画すれば、
赤赤赤赤 白白青青 赤と青の画像が表示されると思ったのですが、
赤赤赤赤 白白青青

理想      現実
赤赤青青 赤赤黒黒 (黒は背景色)
赤赤青青 赤赤黒黒 と表示されてしまいます。 
赤赤赤赤 赤赤赤赤 赤のZ値を上げて奥に表示させると青と黒(背景色)の画像しか表示されません。
赤赤赤赤 赤赤赤赤

>テクスチャステージステートとレンダリングステートによって最終的な透過処理が決定されるのよ?
初めて目にした言葉なんですが、これを使わないといけないのでしょうか?

847 :デフォルトの名無しさん:05/02/13 22:11:47
>>845
マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
バッチ処理に関してモロに書かれてるから。
レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
十分にボトルネックになりうる。これは絶対。

ただ、>>777はID3DXSprite使ってるようなんだけど、インターフェイス見てみたら
ちゃんと内部でバッチ処理しるっぽい(9.0b以降)ので、もしかしたら
DrawXXX系の関数に変えたところで改善しないかもしんない気がしてきた。


848 :デフォルトの名無しさん:05/02/13 22:23:11
>>846
君さ、こんなところでくだらない質問するだけ無駄だから本買ってきなよ。
透過処理の方法ぐらい載っけてあるから。
http://www.amazon.co.jp/exec/obidos/ASIN/4875934610/

一度基本的な機能をざっと見ることも必要だよ。

849 :デフォルトの名無しさん:05/02/13 22:28:50
>>846
これを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);


850 :デフォルトの名無しさん:05/02/13 22:29:20
>>847
>レンダリングステートはともかく、DrawXXX系の関数は70回の呼び出しでも
>十分にボトルネックになりうる。これは絶対。
なんねーよ。
70個程度でオーバーヘッドなんて出てたらゲーム作れねぇよ。

>マニュアルの[パフォーマンスの最適化]って読んだことあるけ?
ああ、読んだことあるけど、実際やってみるとわかるが速度にほとんど違いは出ない。
昔書いたものを惰性でのっけてるだけと考えるのが普通だろう。

では70個で速度に差が出てしまうのはどこの部分かということだが、
俺はピクセルフィルレートが一番の原因だと思う。
70個で速度に影響がでる部分っつったらここぐらいしかない。
なぜならピクセルフィルレートに関しては昔からほとんど速度が上がっていない。


851 :777:05/02/13 22:41:30
>>848
この本持ってたかも。
探してみます。

>>849
ありがとうございます。
ちゃんと透過できました。
ほんとお手数かけましたm( __ __ )m


852 :デフォルトの名無しさん:05/02/13 22:56:27
>70個程度でオーバーヘッドなんて出てたらゲーム作れねぇよ。

確かに70個でボトルネックにはならないかもしれんがDirectXでは
DrawPrimitiveのオーバーヘッドが異常に大きい事をマイクロソフトも
認めている。だから70個ならまだいいが数百個なら耐えられなくなる。
こんな事試した奴らならわかりきってるだろ?
それからたかが70個のスプライト程度でフィルレートが問題になる事はない。

853 :デフォルトの名無しさん:05/02/13 23:01:57
>>850
PC環境とパフォーマンスに対する考え方の違いかね。
バッチ処理でFPSが5も挙がればそりゃ十分にボトルネックだ。

バッチ処理を惰性で掲載してるってことはねえだろ。
NVIDIAの新めの資料にも言及されてるくらいだし。
むしろGPUの速度が上がるほどAPI発行の無駄は大きくなるはず。


854 :デフォルトの名無しさん:05/02/13 23:04:38
ROMってる初心者なのですがちと混乱してきたのでお聞きしたい。
皆さんが言ってる「Draw」ってID3DXSprinte::Drawのことですよね?
DrawとDrawPrimitiveUPは毎回ボードにデータを転送するやり方だから重い。
DrawPrimitiveは頂点バッファを使っているので転送のオーバヘッドがなく軽い。

DrawPrimitiveUP1回で描画しようと思ったらD3DPT_TRIANGLELISTで構造体に頂点を順番に格納して
複数のキャラクタを描画することができる だと思うのですが、Draw1回で複数分の描画って、どのようにやるのですか?

DrawPrimitive1回で済まそうと思うと、毎回バッファをLockUnLockするのですか?それはそれで重そうなのですけれども。

855 :デフォルトの名無しさん:05/02/13 23:10:14
ま、あれだ
本来順序良く学んでいけば解決できる問題も
「コレがしたい」と思って途中をおろそかにして、そればかり追っていくと実は遠回りになる
とりあえず機能全体を把握した上で、それらを応用してどうできないかを
考えた方がいいと思う
たとえ一見自分のやりたいことには関係のない機能も
応用したり組み合わせたりすればなにかに使えるかもしれないし


856 :デフォルトの名無しさん:05/02/13 23:11:28
>>852
なんだよDrawPrimitiveのオーバーヘッドって。
何と比べてどれくらい重いのか数字だしてから言えよ。

70個での話をしてるのに数百個の話もちだして馬鹿なのか?お前。

それにピクセルフィルレートに個数は関係ない。
例え5個のモデルしか描画しなくてもZバッファ無しでそれぞれのモデルが
全画面を覆いつくすような描画をしたら処理落ちは始まる。
こんなことも知らないのか?
お前、大丈夫か?

857 :デフォルトの名無しさん:05/02/13 23:13:59
>>854
そんなところ速度に関係ないって馬鹿だな。

858 :デフォルトの名無しさん:05/02/13 23:20:05
DirectXのDrawが重たい話については次のWindowsであるLonghornで
改善される予定になっている。しかしDirectXは9で最後なので
LonghornになったらWGFでプログラムし直し。
それを考えればDrawのオーバーヘッドが少ない高速なOpenGLで
設計しておいたほうが無駄がない。

859 :デフォルトの名無しさん:05/02/13 23:22:26
>例え5個のモデルしか描画しなくてもZバッファ無しでそれぞれのモデルが
>全画面を覆いつくすような描画をしたら処理落ちは始まる。

スプライトと言っている時点でそんなサイズで話する奴がいるかボケ。
普通に考えろよ?70個のスプライトでフィルレートが問題になるか?

860 :デフォルトの名無しさん:05/02/13 23:23:50
>>858
だからどれくらい差があるんだよ。

861 :デフォルトの名無しさん:05/02/13 23:26:39
>>859
だからその描画するときの画面に締めるスプライトのでかさによるだろ。
ホンっとアホだな。
腹が立ってくるよw

862 :デフォルトの名無しさん:05/02/13 23:31:21
>>854
あー違う違う。頂点バッファを使うかどうかはここでは関係無いよ。

ポリゴンを100個描画するのに、
DrawPrimitiveUPに1個のポリゴンデータを渡して100回呼び出すか、
DrawPrimitiveUPを100個のポリゴンデータを渡して1回呼び出すかの違い。

>>856
俺は>>852じゃなくて>>847なんだが、70回程度でボトルネックは言い過ぎだね。
GeForce2MXなんてショボイの使ってる俺が悪かった。
DrawPrimitiveのオーバヘッドに関しては、とりあえず君の環境でも
スプライトを1000個なり2000個なりで試してもらえないかな?
それでも考えを変えないようなら沈黙いたしますよ。

863 :777:05/02/13 23:36:28
    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|  ・・・。
  |   ,,ノ(、_, )ヽ、,, .::::|    
.   |   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/    
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||

864 :デフォルトの名無しさん:05/02/13 23:37:43
>だからその描画するときの画面に締めるスプライトのでかさによるだろ。

だからそのスプライトのでかさが画面全体を占めるってのはお前の
勝手な妄想だろボケが。自分の都合のいい設定でしか話ができんのかお前は?
スプライト70個出して遅いって言ってる奴にフィルレートのせいだよって
言うバカはいねぇ。

865 :854 :05/02/13 23:40:07
>>862
d。理解力なくてスマソ

866 :デフォルトの名無しさん:05/02/13 23:43:23
>>863
なんだよ。
1000個も2000個も描かなきゃ差がでないオーバーヘッドの話を
なんで70個の話のときに出すんだ。だからお前はアホだっていうの。

>>864
そうかい?
俺は初心者のやったことだからてっきり画面にくまなくスプライトを
70個描画したと考えたんだけど。
もちろん画面全体とまではいかなくても1個1個のピクセルフィルレートはかなり大きいとみてるがね。

867 :デフォルトの名無しさん :05/02/13 23:53:57
>なんだよDrawPrimitiveのオーバーヘッドって。
>何と比べてどれくらい重いのか数字だしてから言えよ。

この人はオーバーヘッドという言葉の意味を誤解してるっぽい
だから「ボトルネック」の話をしてる人と会話が合わないんだと思う

868 :777:05/02/13 23:55:52
数間違えてますた
60x2のビットマップを174個    (+他の画像や3Dの機体)
アスロン64 3200+  ゲフォ5950で有:平均90fps、無:平均109fps
製作しているマシンでは有:平均64fps 無:平均71fps    です。

869 :デフォルトの名無しさん:05/02/14 00:01:03
>>867
なんでそうやって人を無知扱いしたがるのか。
http://www.nifty.com/webapp/digitalword/word/009/00931.htm

どうして俺の発言よんで意味を知らないなんて発言に至ったのか是非聞きたい。

870 :デフォルトの名無しさん:05/02/14 00:03:45
少し遅いレスだが、
【書籍版】DirectX9実践プログラミング
はいい本だと俺は思ってる・・・・。

書物の話で、いままでそれなりの数見てきたがDirectX初期化が一番詳しく、頂点バッファ・インデックスバッファと
シェーダに関しても乗ってて、初心者がかじるには一番おいしい本だと思うのだが・・・

871 :デフォルトの名無しさん:05/02/14 00:07:34
やっぱり理解してないな・・・
そのページをあと100回良く読んでみろ

872 :デフォルトの名無しさん:05/02/14 00:08:20
>>871
説明できないからって意味ありげなレスつけて逃げないでね。
お願いだから。

873 :デフォルトの名無しさん:05/02/14 00:08:42
久しぶりにこのスレ盛り上がってるね。
いいよいいよ〜 (・∀・)

874 :デフォルトの名無しさん:05/02/14 00:08:57
クイズしたがる人ってうっとおしいよね

875 :777:05/02/14 00:22:43
地震キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!

876 :デフォルトの名無しさん:05/02/14 00:24:15
オーバーヘッド
・頭上の. 転じて "頭上でのやり取り", "直接の目的以外で使われるもの" の意.
・コンピュータ用語として, 本来の目的以外の処理によるCPU負荷や, ネットワークで
バックグラウンドでのやり取りや変換処理等による転送負荷, 予定外の作業による人的負荷などの意味で使われる.
・元々オーバーヘッドという語は "裏での処理" 的な意味で, これによる負荷を言うなら,
正しくは "オーバーヘッドによる負荷" と表現すべきであるが, 実際のところ
オーバーヘッドな処理は大抵は負荷にしかなってないか, さもなくば負荷になるときしか
認識されないので, 負荷の意で捉える事自体は大きく間違っているわけではない.


877 :デフォルトの名無しさん:05/02/14 00:26:21
大阪、神戸

878 :デフォルトの名無しさん:05/02/14 00:35:24
>>842=847=849=853=862俺ね。
アンカーつけねえから話がこじれるんだな。

別に>>777のデモのパフォーマンスがDrawXXX系の呼び出し回数のせいでガタガタになっている、
というんじゃなくて、DrawXXX系の関数のオーバーヘッドを無視していいかのような>>845のレスに
反応しただけなのね。少なくとも俺の環境じゃ70回の呼び出しでも目に見えて遅くなるし。
たった1000回の発行で顕著になるオーバヘッドを本当に無視できんのか、というのが>>862の趣旨ね。


>>777
ごめんねえ。だから君のデモに関する良い知恵があるわけじゃないのね。
でもDrawPrimitiveの呼び出し回数は少なくするべきなのは憶えておいてね。
スプライト以外でもバッチ処理ってのは重要だから。

879 :デフォルトの名無しさん:05/02/14 00:49:05
オーバーヘッド。ヤバイ。超ヤバイ。
何がヤバイって、回数が増えると超増える。増えまくり。
でも、回数が少ないときは関係ない。わかるやつだ。

880 :デフォルトの名無しさん:05/02/14 00:52:19
>無視できんのか
できる、できないのどちらでも取れるような言葉使いはやめろとあれほど(ry

881 :777:05/02/14 00:53:06
>>878
了解です

882 :デフォルトの名無しさん:05/02/14 01:16:30
http://www.t-pot.com/program/125_GlMesh/

OpenGLもVBOとかいう新機能で描画を高速に出来るらしい。
9でおしまいのDirectXから乗り換えるいい機会かも。

883 :777:05/02/14 01:33:25
半端な知識に肉付けしていく段階だし、いっその事OpenGLを1から勉強しようかな・・・
DirectXからOpenGLに移行するにあたってデメリットってありますか?
関数が違うとかは除いて、3Dの描画が苦手とかフォグが使えないとか(これは大丈夫だと思うけど)

884 :デフォルトの名無しさん:05/02/14 01:40:01
>>878
はぁ?
1000回も呼び出さなきゃでねぇような違いがどうして重要なんだよ。
ホント、ハゲだなオメーはw
そんな馬鹿だから、70回でオーバーヘッド発生してるようなグラボつかまされんだぞ(笑)

885 :デフォルトの名無しさん:05/02/14 01:45:36
MSの担当に
「DrawPrimitiveファミリ呼び出しは100回に押さえろ」
と言われた。

いや、MMOでそりゃ無理だろ・・・

886 :885:05/02/14 01:50:21
× 押さえろ
○ 抑えろ

恥ずかしい・・・

887 :デフォルトの名無しさん:05/02/14 01:52:42
>>883
お前も救いようがないなw
まず、観察眼が絶望的に足りない。
そもそも>>777でいっている閉塞感はプログラム的な問題じゃない。
すべての3Dゲームは処理的には箱庭しか作れない。
広大にみえるようにしてるだけ。
フライトシミュなんかで使われてるようなのは昔はスカイボックスとか
スカイドームとか呼ばれていたが今はぐぐってもまったく情報が出てこないな。
プログラム的にはスカイボックスorドームの親座標をカメラにするだけだ。
あとは箱庭とのつなぎ目をフォグ等で誤魔化すかしかない。
これで閉塞感があるならそりゃスカイボックスorドームの絵がショボイってただそれだけだろ。

888 :777:05/02/14 01:55:02
空・地面の描画以前に機体2機+画像で60fpsギリギリなんですg orz

889 :821:05/02/14 02:04:57
>>834
そういえば、OpenGLは選択肢にしてませんでした。
どんな機能があるのか、一切調べてないので、合わせて調査してみます。

890 :デフォルトの名無しさん:05/02/14 02:10:12
>>888
Zバッファ使ってちゃんと前から描いているか?
何度もいうけどPCではピクセルフィルレートが一番ネックになる。

機体2機はわかるけど画像は何を指しているの?
画面を占める割合でかなり重くなるよ。

891 :デフォルトの名無しさん:05/02/14 02:17:19
>DirectXからOpenGLに移行するにあたってデメリットってありますか?

そんなのどこがデメリットと思うかは個人差。GLSLをやるための資料が少ないとか
そんなのなら海外であされば出てくるしなんとでもなる。
それにゲーム業界で働く場合を考えたらDirectXなんてMSのゲーム機でしか
使わないし、PS3やその他のハードがOpenGLらしい事を考えるとメリットの
ほうがでかい。OpenGLならLonghornに乗り換えてもそのまま使える。

892 :777:05/02/14 02:21:20
SetRenderState( D3DRS_ZENABLE, TRUE );
これですよね?
別にそれほど画面を占領しているわけではないけど、やはりDrawで200弱を画面内外関係なしで描いているからでしょうか。


893 :デフォルトの名無しさん:05/02/14 02:22:40
>>892
画面外ならDrawするなよ。バウンディング球でも使ってクリップしろ。

894 :デフォルトの名無しさん:05/02/14 02:23:33
DirectXだと3Dサウンドがそのまま使えるってところか。
音のミキシングできるのって結局DirectSoundしかねぇのに
わざわざOpenGL使って苦労してる奴ってやっぱりかっこ悪いじゃん。
これはまあPCで組む場合だけだけど。

895 :デフォルトの名無しさん:05/02/14 02:24:58
>>892
カメラに近い方からちゃんと描いているかどうかも重要だぞ。

896 :デフォルトの名無しさん:05/02/14 02:33:20
>音のミキシングできるのって結局DirectSoundしかねぇのに

SDLを使え。
http://www.tsg.ne.jp/text/2002/sdl-opengl/

897 :デフォルトの名無しさん:05/02/14 02:41:44
http://www.openal.org/

3Dサウンドはこんなのもあるらしい。

898 :777:05/02/14 02:42:23
皆さんレスありがとうございます。
DirectXと並行にOpenGLも勉強してみたいと思います。

>>895
現状はスプライトDrawだからカメラとか関係ないぽ。
早いとこ変えないといけないんだけど、ビルボーディングのやり方をすっかり忘れたのd
(常に一定の位置・大きさ・形にするにはこの方法を使います・・よね?)

899 :デフォルトの名無しさん:05/02/14 02:46:42
>>898
いや、だからあるんだよ。
描画する限りないわけないの。
スプライトだって上になるものと下になるものがあんだろ?
これを描画の順序で決めちゃいけないのが3Dなんだよ。

しかし、αが使われてる物に関しては別でこれは後ろから描画しないといけない。

900 :777:05/02/14 02:57:09
スプライトDrawのどこに3Dを扱っているのかが・・
スタンプ(貼り絵)みたいに下から(カメラから遠い?)ものから描画してます。

勝手に変数を入れてるけど
pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,RotationAngle,&vec2Position,ARGB);
これって2Dじゃなくて3D・・・?

901 :777:05/02/14 03:13:00
画像全部とデバッグ用の文字を消したら、平均90fpsが平均670(一時的に1150)fpsまであがったよ、ママン(´・ω・`)

902 :777:05/02/14 03:16:18
追記:20万四方の地面を消したら平均1050fps(´・ω・`)

903 :デフォルトの名無しさん:05/02/14 03:20:17
>>901
あははははははッ。それ9.0以前のSDKだろ。
そのころのID3DXSpriteとID3DXFontは糞遅いので有名。
文字列描画はサンプルフレームワークのCD3DFontを使いなはれ。
すっかり忘れてたけど、これスプライト実装の参考になるから。

904 :デフォルトの名無しさん:05/02/14 03:26:43
>>891
>OpenGLならLonghornに乗り換えてもそのまま使える。
ソースは?というか実装どこだ

905 :777:05/02/14 03:30:33
9.0bだけどそこまで重いのか、って現にfpsに差があるわけで(´・ω・`)
> すっかり忘れてたけど、これスプライト実装の参考になるから。



906 :デフォルトの名無しさん:05/02/14 03:53:01
スプライトってHUDに使ってんじゃないの?
だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
画面座標で描けるし速い。

907 :デフォルトの名無しさん:05/02/14 04:27:18
てか、自前でいっぺん描写からやりなおしたほうがよくないか?

908 :デフォルトの名無しさん:05/02/14 10:40:32
D3DXに無駄に高レベルな関数が用意されているのがそもそもの問題。
Sprite系とXFile系は必要ない。

909 :デフォルトの名無しさん:05/02/14 10:46:25
>>901
GDI使ってたんじゃないの?それだと遅いよ。

910 :777:05/02/14 22:21:28
この連休外に出ていないのにインフルエンザにかかった自分の体に小一時間問い詰めたい・・
なんか色々混乱してて質問死に来たけど何を質問しに来たのか忘れt
Googleがいつもと違うように見えるしもうだめp

911 :777:05/02/14 23:06:12
すいません、思い出しました。
>>906
その通りです。
>だとしたら、トランスフォーム済み&ライティング済み頂点使えば、
>画面座標で描けるし速い。
これは
┌――┐←適当な座標に描いて
|   |      
|   |      
└――┘
     _ ←ワールド・ビュー・射影トランスフォーム後
/ ̄ ̄/      機体などを描画してから頂点のスクリーン座標を取得。
 ̄ ̄ ̄       描画したいスクリーン座標に頂点を持ってくるのを画像数×4点行い、画像の描画  ということでしょうか?


912 :デフォルトの名無しさん:05/02/15 00:00:27
>>911
質問するのは最低限、チュートリアルを終わらせてからにしてくれ。
そんな質問をする必用が無くなるから。

913 :878:05/02/15 00:23:40
なんかヘンなこと書いてるな俺。DrawPrimitiveのオーバヘッドが顕著になるのは
CPUとドライバのせいであってビデオカードが原因じゃねえや。
GPUの速度が上がるほど無駄が大きくなるって自分でも書いてるし、阿呆か。

わかりやすいグラフも追加ー。
ttp://mirror.ati.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf

914 :デフォルトの名無しさん:05/02/15 00:24:10
>>911
つか、マジでDirectX実践プログラミングを全部終わらせてくんね?
お前邪魔じゃん。マジで。
レベル低いとか高いじゃなくてお約束を知らない状態が面倒なんだよ。
1人でこつこつやる時期ってのも必要なんだよ。

お前、この状態→>>911じゃ駄目だろ。

915 :デフォルトの名無しさん:05/02/15 00:26:00
ID3DXSprinte::Draw・・・スプライトごとに呼ぶとすごいオーバーヘッド。しかも1回の描画で全スプライトを
                  描画できない。よって使うな。
DrawPrimitiveUP・・・・・プリミティブごとにすごいオーバヘッド。描画するなら構造体に詰め込んでD3DPT_TRIANGLELISTで
                  1回の呼び出しで全描画。

ってことですよね?DrawPrimitive・DrawIndexedPrimitiveは頂点バッファを使うので高速だが、
バッファのLockUnLockを頻繁に行うようだとパフォーマンスが低下する
という認識でいいのでしょうか?

916 :デフォルトの名無しさん:05/02/15 01:30:03
最新のDirectXがDown出来るけどとうとうWin2Kのサポート打ち切られた
らしい。しかもWinXPの正規ユーザーしか落とせない制限付き。
さらにDirectXは9で終わりでLonghornではWGFときては作り手としては
翻弄されまくり。

917 :デフォルトの名無しさん:05/02/15 02:07:57
リリースノート見たけど本当にWin2Kはサポート打ち切られてる。
あとWGFについてはspinに記事があった。
http://216.239.57.104/search?q=cache:Yo9Cbw6ZW4EJ:spin.s2c.ne.jp/news0406.html+WGF&hl=ja&lr=lang_ja
APIは大幅に変わりそう。

918 :デフォルトの名無しさん:05/02/15 02:08:08
>>914

すでに >>912 がいっている。
便乗して同じことをだらだらというやつも邪魔に感じるんだが。

919 :デフォルトの名無しさん:05/02/15 07:27:47
>>918
ふっ、俺みたいな翻訳機は初心者スレでは普段は重宝されるんだよ。
例えばチュートリアルなぞ初心者には普通に読めん。
>>912の内容だと初心者には「だからチュートリアルは難しいよ」って思わせるだけだ。
しかし、質問スレにいる奴等は馬鹿だからDirectXの入門書が売れる理由がわからないので
「初心者にDirectXのヘルプのチュートリアルが難しい」のが理解できない。
これを理解している俺がチュートリアルではなくDirectX実践プログラミングを勧めてるところを評価してほしいね。

920 :デフォルトの名無しさん:05/02/15 07:36:14
チュートリアルよりDirectX実践プログラミングのほうが難しいのですが。

921 :デフォルトの名無しさん:05/02/15 07:40:57
>>920
レアものだな。
しかし、日本は民主主義。
少数派にまわった奴へのサポートは充実してないんだよ。
まあ、諦めて吊っとけや。
今度生まれてくるときにはDirectX実践プログラムもわかりやすくなってると思うよ。

922 :デフォルトの名無しさん:05/02/15 08:14:35
一応、入門書5冊買って比べてるんだが。
ちなみに古い方な。緑色の。
新しいのはちょっとはまともになったのか?

923 :デフォルトの名無しさん:05/02/15 09:16:34
チュートリアルは必要最小限のコードで、かなり分かりやすく説明されている。
読めないのではなく読まないの間違いだろう。

924 :デフォルトの名無しさん:05/02/15 20:23:11
>>922
ちょっとした事情により緑も青も両方持ってるのだが
内容が若干追加されてるだけで
文章や説明の仕方が見直されてるわけじゃないので
分かり易くなったりはしていない

925 :デフォルトの名無しさん:05/02/15 20:34:06
あの本って買う価値あるか?
チュートリアルの方が分かりやすいと思うんだが。

926 :デフォルトの名無しさん:05/02/15 23:05:20
>925
読みさすさだったり、とっつきやすさは個人差があるからな
どちらが絶対にいいとは言えないからな
漏れは日本語ネイティブが書いた文章と翻訳された文章と2つあったら
日本語文章の方がいいなぁ

927 :デフォルトの名無しさん:05/02/16 00:23:56
チュートリアルと実践プログラミング以外にも選択肢はあるぞ。

928 :デフォルトの名無しさん:05/02/16 01:15:13
実践は8のも9のも持ってるが、9はかなりマシになったと思う。
ゴミのような書籍もある中、9の実践はかなりまともな本だと思うぞ。
俺はね。

929 :デフォルトの名無しさん:05/02/17 03:20:06
DirectInput極めたいんだけど何かいい本ある?

930 :デフォルトの名無しさん:05/02/17 07:57:15
>>929
なぜ「本」なのか・・・サンプルとヘルプ以外に何が必要なのか・・・。

931 :デフォルトの名無しさん:05/02/17 08:12:11
ヘルプにDirectInputのこと何も書いてなかったよ。

932 :デフォルトの名無しさん:05/02/17 08:58:52
>>929
極めるんだろ? 本なんかに頼ったら本を書いた香具師ほども極められないと思うぞ。

933 :デフォルトの名無しさん:05/02/17 09:13:18
DirectInput なんてサンプル読めばすぐだろ。

934 :デフォルトの名無しさん:05/02/17 09:35:27
2004OctのヘルプにはDirectGraphicsしか載ってねえんだな。そういえば。

935 :デフォルトの名無しさん:05/02/17 09:53:39
うわ、見事にごっそり抜け落ちてる。
いままでD3Dのヘルプしか見てなかったから全然気が付かなかった。
こうなると旧SDKは保存しておかないと泣きを見る訳か。

936 :デフォルトの名無しさん:05/02/17 12:35:08
DirectX7の日本語ヘルプは存在するのでしょうか?
以前、アドバイスを貰いいくつか書籍を買ってみたのですが
どれも英語ヘルプのみ収録されていました。
日本語ヘルプが出たのはいつ頃か、いつ頃以降の書籍なら
収録されている可能性が高いのか教えてください。

937 :デフォルトの名無しさん:05/02/17 13:55:59
>>936
Extrasをダウンロードすれば入ってなかったっけ?

938 :デフォルトの名無しさん:05/02/17 14:05:36
Summer2003のExtrasフォルダに[7.0][8.0][8.1(en)][9.0]が揃ってる。
収録されている書籍は[DirectX9シェーダプログラミングブック][Cmagazine2004-01]。
あとはシラネ。
Summer2004のExtrasには確か無かったハズ。

939 :デフォルトの名無しさん:05/02/17 16:19:34
>>937
今ダウンロードできるものには含まれてないようです。

>>938
DirectX9シェーダプログラミングブックを買ってきました。

ありがとうございました。

940 :デフォルトの名無しさん:05/02/17 19:35:17
DirectSound で 2秒間のバッファを作り
IDirectSoundNotify8 で その0秒目、1秒目にイベントを設定して、
別スレッドのWaitForMultipleObjectsでキャッチしてます

ところが、ResumeThreadを実行すると、一度に2秒分ぐらい制御が返ってきます
つまり、Suspend と Resume を繰り返すとどんどん音楽が早送りに・・・><;

ファイルからデータを読み取るログをとってみたんですが、やはりResume を行うと
1秒間の内に2秒分のデータを読み込んでしまっているようです

WaitForMultipleObjectsの動作が怪しいきがするんですが
分かる方いますか?

941 :デフォルトの名無しさん:05/02/17 20:48:43
>940
よくわからんが、ストリーミング再生用スレッドに
ResumeThreadとSuspendThreadなんてどこで使うの?

942 :デフォルトの名無しさん:05/02/17 21:02:11
>>941

一時停止と 停止に使うよ

943 :940:05/02/17 21:11:37
再生時
pBuffer->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 );
}
}




944 :940:05/02/17 21:12:20
>>943

ファイルをオープンするときに、データの前半を読み込んでおいて
あとはスレッドでストリーミングって感じです

WaitForMultipleObjectsが1秒間の内に2回 制御を返しているのが
原因だと思うんですが、なんでそうなるのかわかりません

それと読み込んだばかりのときにPlayを行うと普通に再生されますが
一度停止したあとに、Playをするとぶちぶち音が・・・

話によるとプライマリバッファが再生されていないことが原因らしいので
とりあえず無音データをつめこんで、再生させてみましたが変化ありませんでした

早送りとなにか関係があるのかな。。。

945 :デフォルトの名無しさん:05/02/17 21:44:23
そのコードだけじゃよくわかんねーな。
Stop()で停止してればWaitForでスレッド待機してるから
別にSupend/Resumeは呼ぶ必要ないんじゃないの? 設計次第だろうけど。
音とびするのはイベント取りこぼして禁止領域に書き込んじゃってる可能性あり。
ちゃんとGetCurrentPositionで確認してる?

946 :デフォルトの名無しさん:05/02/18 01:05:37
とりあえずResumeとSuspendは要らない。
あとは「DirectSound ストリーミング」とかでググって、既知のNotifyのバグを調べる。

947 :デフォルトの名無しさん:05/02/18 01:18:53
はやくWGFでねぇかなぁ。DirectXはもうダメだ。

948 :940:05/02/18 13:38:45
うおおおおおおお!
ストリーミングでけたどーー!!

いやーいろんなことして本当に苦労した

結局バッファ作成のときに設定したフラグが問題だったっぽい
DSBCAPS_LOCSOFTWARE を加えたら正常に動作した

こーいうのマイルよまじで。。。

同じ問題で苦労した人いなかったのかな ぼそ

949 :デフォルトの名無しさん:05/02/18 13:57:33
サウンドカードが対応していて、ちゃんと作ってあれば、
DSBCAPS_LOCHARDWAREでもちゃんと動く。

950 :デフォルトの名無しさん:05/02/18 15:28:38
>>949

ちゃんと動く場合もあるってなだけで
動かない場合があるから発見に苦労するのよ

951 :デフォルトの名無しさん:05/02/18 15:34:51
>>950
いや・・・・普通ソフトウェアバッファだから。

952 :デフォルトの名無しさん:05/02/18 15:43:30
stop()した後もイベント飛んでくるから、
Suspendしちゃ駄目

953 :デフォルトの名無しさん:05/02/18 18:25:41
>>951
べつにソフトウェアバッファのことだけ いえることではないんだが?
DirectX全般 どのハードウェアでも動くようになっていなくて苦労するんだがw

954 :デフォルトの名無しさん:05/02/18 18:28:23
質問です〜。

DirectInputって、普通キーボード入力を GetDeviceState で取りますが、
逆に、コードで書いた文字をDirectInput経由でOSに送ることできますか?
(キーボード入力代行)

DirectInput使わなかったら、APIのkeybd_event("user32.dll")とかで
できるんやけど・・・。 DirectInput使う要件があるので・・・。
どなたかご存知の方、よろしくお願いします。

955 :デフォルトの名無しさん:05/02/18 22:36:25
>>953
ハードウェアが対応してるのか調べてから機能を使うでしょ普通は


956 :デフォルトの名無しさん:05/02/18 22:39:40
ユーザー側に選択権を与えればいいだけの話。

957 :デフォルトの名無しさん:05/02/18 23:26:43
仕事をおしつけるとも表現する

958 :デフォルトの名無しさん:05/02/19 00:42:09
まぁでも、940のはソフト側の不備だろう

959 :デフォルトの名無しさん:05/02/19 02:00:05
マー結局苦労するわけだ

960 :デフォルトの名無しさん:05/02/19 07:41:53
>>954 無理

961 :初心者です:05/02/19 14:46:46
はじめまして。
Visual 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. 」
というエラーメッセージが表示されて、サンプルは実行できるの
ですけど、ものすごく遅いのです。
この原因は何なのでしょうか?
よろしくお願いします。


962 :デフォルトの名無しさん:05/02/19 14:57:17
>>961
ビデオカードの性能が足りていない

963 :初心者です:05/02/19 15:18:17
>>962
 回答ありがとうございます。
 古いビデオカードはやっぱりだめなんですね。
 お金がないので、無理して使ってたんですけど・・・。
 これからビデオカード買いに行ってきます。
 予算が無いんですけど、頑張って5000円ぐらいの
 買ってきます。
 ありがとうございました。


964 :デフォルトの名無しさん:05/02/19 19:29:49
>963
5000円で何のグラボ買うつもりだ?


965 :デフォルトの名無しさん:05/02/19 21:44:19
>>964

GetForce2MX以上は買えるよ

966 :デフォルトの名無しさん:05/02/19 23:11:20
7000円あればGeForceFX5200買えるだろ。
5000円レベルでも来年ならDirectX9cに対応してるかも。

967 :デフォルトの名無しさん:05/02/20 00:17:12
ストリーミング再生を 1ループで終わらせたい場合は
データを読み込んだときに 最後まで読み込んだか を調べて
最後の書き込みは 無音データをつめこんでから 書き込んで
pBuffer->Play( 0, 0, 0 ) とループしないように設定しなおす
といった面倒な方法でしか実現できないんでしょうか。

無音データを入れる理由は 最後が途中で終わる場合があるため。

968 :デフォルトの名無しさん:05/02/20 00:59:15
>967
任意のポイントで止める方法は無いはずだから、それで良いんじゃない。

俺はループを止めるんじゃなくて、
GetCurrentPosition()で再生位置を調べて、終了位置を越えてたらStop()としてる。

969 :デフォルトの名無しさん:05/02/20 01:06:19
ここで止めたいって場所でNotify仕込みたいところだけど、
再生中は設定できなくて、昔ムカついた記憶があるなあ……。

970 :デフォルトの名無しさん:05/02/20 01:23:40
>>968

GetCurrentPositionはいつ調べるんですか?
スレッドの中だった場合、かならずストリーミング再生なので最初にきめた
刻みごとにしか実行されないですよね
WaitForMultiなんたらで処理がストップしてしまうため

main loop に記述するのもひけるし・・・


971 :デフォルトの名無しさん:05/02/20 06:09:50
>970
頃合いを見て、再生スレッドをイベント待ちからポーリング監視に切り替えてる。

972 :デフォルトの名無しさん:05/02/21 01:33:48
DirectXのゲーム画面を取り込むスクリーンキャプチャを作りたいんですが、
どうしたら良いでしょう?
非DirectXなら GetDC(NULL) でスクリーンのデバイスコンテキスト取得して
ごにょごにょで何とかなったんですが、DirectXの場合はどうしたものやら。

973 :デフォルトの名無しさん:05/02/21 02:48:24
GetFrontBufferData

974 :デフォルトの名無しさん:05/02/21 17:01:14
DirectX敷居高杉。
EasyLinkLibrary使ってもコンパイルすらできないぜ。
おまいら頭いいな。

975 :デフォルトの名無しさん:05/02/21 17:52:17
Microsoft Visual C++ Toolkit 2003しかもっていないのですが、それをつかってDirectXのプログラムの作成方法を解説してあるサイトとかはありますか?
つまりその、Visual C++なしでやりたいのですが。

976 :デフォルトの名無しさん:05/02/21 17:58:30
VC++なくても、コンパイルするためのコマンドラインが解れば、
普通に検索して出てくるページのコードが活用できるだろう。

もしくは、VC2005を落とす。

977 :デフォルトの名無しさん: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"

978 :デフォルトの名無しさん:05/02/21 18:40:16
>>974
VC++さえ買えばコンパイルはできる
いきなりラッパーライブラリを使うと余計難しい

>>975
プログラムの作り方は同じ
nMakeの使い方覚えろ

>>977
Cマガジン買え

979 :デフォルトの名無しさん:05/02/21 18:49:39
>>977
何が解らないの解りません。

ところで、
次スレをそろそろ立てたほうがよさそうだな。

980 :デフォルトの名無しさん:05/02/21 20:18:25
学生なら visual studio .net spoke というものが安くていいよ
社会人になったら10万するものが 3980円で買える
やるなら絶対買った方がいい

981 :デフォルトの名無しさん:05/02/21 21:01:00
次スレ立てた
http://pc5.2ch.net/test/read.cgi/tech/1108987183/

982 :デフォルトの名無しさん:05/02/21 22:16:17
>>981
ご苦労。もう帰っていいよ。

290 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)