■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

鬱だ氏のう DirectX (Part 5)
501 名前:名前は開発中のものです。 :02/08/31 12:13 ID:???
sdkのスキンメッシュのサンプルの
SetTimeのMatrixKeyって補完のところは手抜き?
行列の補完てどうするの?

502 名前: :02/08/31 18:23 ID:???
たしかマトリックスキーの時は補完無しで
位置・スケール・回転の時には補完ありになるんだったよね?

マトリックスの補完はできないと思うので、
補完したかったらマトリックスキーでなく、
位置等の情報を持つXファイルを作れば良いと思われ...

速度優先でやりたかったら、各フレームごとにサンプリングして
マトリックスキーをいっぱい作る。


503 名前:名前は開発中のものです。 :02/08/31 18:28 ID:???
行列をQuaternionに変換するやり方を知らんのか?

504 名前:名前は開発中のものです。 :02/08/31 18:35 ID:???
x補完
o補間

MatrixKeyとはスケールと平行移動も込み?

505 名前:名前は開発中のものです。 :02/08/31 23:33 ID:???
Xファイルから読み込んだメッシュのバウンディングボックスを
作るために、D3DXComputeBoundingBoxを使おうと思ったんですが
数値がおかしく、うまく作れません。
第一引数に渡す頂点データのバッファへのポインタってD3DXLoadMeshFromXの
第四引数じゃだめなんでしょうか?

506 名前:名前は開発中のものです。 :02/08/31 23:47 ID:???
>>505
サンプルはLockしてそのポインタを渡しているから俺もそうしているが、
それ試して上手くいかなかったらソースの一部を書いてくれ。

507 名前:名前は開発中のものです。 :02/09/01 15:06 ID:xIdjFJT5
>>503
やって見たんですがスケールが変になります。
うまくやる方法ないでしょうか。

キーフレームが細かければ全メンバの線形補間の方が再現性たかいです・・・
m._11 = lerp( t, m1._11, m2._11);
m._12 = lerp( t, m1._12, m2._12);
m._13 = lerp( t, m1._13, m2._13);
m._14 = lerp( t, m1._14, m2._14);
m._21 = lerp( t, m1._21, m2._21);
m._22 = lerp( t, m1._22, m2._22);
・・・・

508 名前:オレー ◆Kvyv1OZU :02/09/01 16:07 ID:???
>507
マトリクス→クォータにオン→D3DXQuaternionSlerp→マトリクス
じゃ駄目なのか?

509 名前:507 :02/09/01 16:16 ID:???
こうやってます・・・
 D3DXVECTOR3 pos;
 D3DXQUATERNION q, q1, q2;
 D3DXMATRIX r, t;
 D3DXVec3Lerp(&pos, (const VEC3*)&m_pMatrixKeys[dwp2].mat._41,
   (const VEC3*)&m_pMatrixKeys[dwp3].mat._41, fLerpValue);
 D3DXQuaternionRotationMatrix(&q1, &m_pMatrixKeys[dwp2]);
 D3DXQuaternionRotationMatrix(&q2, &m_pMatrixKeys[dwp3]);
 D3DXQuaternionSlerp(&q, &q1, &q2, fLerpValue);
 D3DXMatrixRotationQuaternion(&r, &q);
 D3DXMatrixTranslation(&t, p.x, p.y, p.z);
 pframeToAnimate->matRot = r * t;

510 名前:名前は開発中のものです。 :02/09/02 01:57 ID:5xwxSg5f
Directx8を使っています。
Zバッファを有効にしながらアルファチャンネル(カラーキー)で抜けを作ったポリゴンの
描画はどうすれば良いのでしょうか?
今は、抜けの部分にもzバッファが適用されてしまいます。

511 名前:名前は開発中のものです。 :02/09/02 02:07 ID:???
>>510
一般的には、アルファテストで抜けの部分を描画しないようにする。

アルファの微妙な濃度が重要な場合は、どこまでやるかによる。
Z書き込みなしで オブジェクト単位/ポリゴン単位 でZソートとか。


512 名前:510 :02/09/02 02:23 ID:???
>>511
ありがとうございます。
アルファテストでD3DCMP_GREATERを設定することで解決しました。


513 名前:名前は開発中のものです。 :02/09/02 09:15 ID:???
一般的、ねぇ。。。

514 名前:名前は開発中のものです。 :02/09/02 09:46 ID:???
Dx8以降なら一般的と言えそう

515 名前:510 :02/09/02 11:13 ID:???
>>513
他にも方法があるのでしたら教えてくれないでしょうか?

516 名前:名前は開発中のものです。 :02/09/02 21:28 ID:???
箱の中に水を張って水面の反射と屈折をシミュレートするプログラムを作成しています。
水面にマルチテクスチャで反射と屈折のテクスチャを合成して張っています。

で、反射はキューブマップを使って求めているのですが、屈折の描画方法で詰まっています。
屈折したベクトルと箱の交点を求めることでテクスチャ座標は求まるのですが、
箱の底面で交わるとは限らず、側面と交わることもあります。また、水中に物体を沈めた場合、
その物体と交わる場合もあります。

そういうような底面以外で交わった場合には、底面のテクスチャだけではどうしようもなくなってしまうのですが、
どうすればいいのでしょうか?

517 名前:名前は開発中のものです。 :02/09/02 22:06 ID:???
>>516
で、何の市販ゲー?
タイトル教えてよ。

518 名前:名前は開発中のものです。 :02/09/02 23:26 ID:???
水中に物体を沈めるとキビシイけど
底面と側面だけならなんとかなりそうな気がするよ

519 名前:名前は開発中のものです。 :02/09/03 00:54 ID:???
PixelShaderが動いてくれません。誰か教えてください。
D3DCapsで確認してPixelShader1.0未満だったので
D3DDeviceはSOFTWAREで初期化しました。
カードはGeForce2GTS
OSはWinXP Pro ,DirectX8.0SDK
鬱です。オナガイします

520 名前:名前は開発中のものです。 :02/09/03 00:58 ID:???
SOFTWAREで初期化ってなんだ?
SoftwareVertexProcessingの事?
HEL(REF)の事?

521 名前:名前は開発中のものです。 :02/09/03 01:06 ID:???
>520
長かったので勝手に省略しました(^^;
SOFTWARE = SoftwareVertexProcessing

現在はこんな感じで初期化です
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, ...


522 名前:名前は開発中のものです。 :02/09/03 01:12 ID:???
リファレンスラスタライザでやってみろ
つか、GF2なんて糞カード捨てろ

523 名前:名前は開発中のものです。 :02/09/03 01:20 ID:???
...
D3DDEVTYPE_REF,hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, ...
でも動かないし、
サンプルであるMFCPixelShaderでも真っ黒のまま動かない、、
あきらめてGF2からRadeon9000に変えますw

524 名前:名前は開発中のものです。 :02/09/03 01:43 ID:???
>>516
水中の物体は自力で屈折線が物体と交わってるか調べるしかないんじゃないかなぁ…。

壁の方は、屈折線が壁にぶつかったら、底面を延長させた平面にぶつかるまで延長させて、
そこに対応するテクスチャを貼る感じになるんじゃないだろうか。
これはGemsにもやり方が載っているので参考にしてみるといいかも。。

525 名前:524 :02/09/03 01:47 ID:???
あ、つまり屈折用のテクスチャは1枚だけでよい、ってことです。
回って漢字の内外正方形の四隅を繋いだ感じなんだけど分かりますかね

526 名前:524 :02/09/03 01:58 ID:???
>壁の方は、屈折線が壁にぶつかったら、底面を延長させた平面にぶつかるまで延長させて、

意味不明な日本語ですた(汗

屈折線が壁にぶつかっても、
延長させた底面と延長させた屈折線の交点を求めるってことです
その交点のテクスチャ座標に壁のテクスチャ座標の画像を貼るわけですな

自己レスでスレ汚してしまってスマン

527 名前:名前は開発中のものです。 :02/09/03 04:22 ID:???
変な現象に困ってます
なぜかD3DXFONTの描画をやめるとアプリが劇重になります
lpFont->DrawText("test", -1, &rc, DT_NOCLIP, D3DCOLOR_RGBA(255,255,255,255));
↑をコメントアウトすると40〜50秒くらい固まって、その後終了キーの入力を受け取って、
終了するといった具合です
固まっている間は、カーソルもほとんど動きません(動いてもかくかく)
デバイスの作成や、レンダリングステートなどいろいろいじってみましたが、どうもフォントが原因のようなのです
DX8.1,Win2Kです(WinMeだと起こらなかったです)
どなたかこんな現象に遭遇された方いますか?

528 名前:名前は開発中のものです。 :02/09/03 08:12 ID:???
>>509
俺は行列の補間やったことないから自信ないけど、それスケーリングどう見ても無視してない?
最初は遅くなってもいいから、行列を一旦スケール、回転、移動の3つに分解してみては…。
速度の最適化は動いてからでもいいですから。

>>508
オレーたん発見ー… 明らかにスレ違いですがレースゲー頑張ってください。
あそこのスレでは書き込むと自演っぽく見えるので(汗

529 名前:528 :02/09/03 08:17 ID:???
今書いてて思ったんだが、行列を全てアフィン変換へ分解できるのなら、
ロード時に拡大回転移動の3つのキーへ変換してしまえば、
SetTimeのMatrixKeyの補間は不必要なのかな? これって間違ってる?

530 名前:516 :02/09/03 11:25 ID:???
>>524
レスどうもです。
底面と側面を一枚のテクスチャで扱うわけですね。
なんとなく側面の水面の上と下の部分を上手く合わすのが大変そうな
気がしたりもするんですが、なるほどやってみます。

531 名前:名前は開発中のものです。 :02/09/03 13:37 ID:eoJAGzi4
DirectAudioで普通にwavを再生すると、
自動的にストリーミング再生にしてくれるようなのですが、
このあたりの設定ってどこで指定するのでしょうか?
バッファサイズとかの設定はDirectSound使わないとだめ?
LoaderさえあればDSound使うのですが。DSUTILってのもありますがね。

532 名前:名前は開発中のものです。 :02/09/03 15:55 ID:???
>>531
パフォーマンスのバッファ管理に何か不満があるの?
何故バッファサイズを設定したいのか教えて欲しいかも。

もしDirectSoundで再生するにしても、WAVE FORMATは簡単だから読み込みは楽だ。
ただ、このスレのちょっと前にもあったように、
今更DirectSoundを使う必要性もないんじゃないかと思う。

533 名前:名前は開発中のものです。 :02/09/03 17:00 ID:???
>532
特に不満はないんですけどね。
ストリーミングか否かを明確にできればいいかなぁと。内部ではそんな区別は無いのかな?

ところでボリュームを個々に設定するのにAudioPathをそれぞれ作るのでいいのですかね。
セグメントとAudioPathは一まとめに扱うか。。。むずいな。。。

534 名前:名前は開発中のものです。 :02/09/03 17:57 ID:???
>>533
不満がないならDXAudioでいいと思う。
折角内部を隠蔽してくれてるんだし深く追求しなくても…

ちなみにDXAudioではIPersistStreamあたりでデータ転送の仲介をしてるはず。
結局どんなデータでもストリーミングになるんでない?
MSのDirectX開発ページんとこにカスタムローディングの説明があるから見てみるべし。
ヘルプにも載ってるかも… よく見てないけど。

AudioPathも、LoadObjectFromFileとセットでCreateAudioPathするだけだし。
それほど難しくないと思う。

535 名前:516 :02/09/03 18:18 ID:???
>>524
やってみますた。
この方法、あらかじめ陰のかかったテクスチャ用意しないとダメっぽいっすね…
あと水面の上下で箱の角がうまいこと一致しないっす。
これは俺のテクスチャ座標の求め方間違ってるからなのかな。見直そう。

536 名前:名前は開発中のものです。 :02/09/03 18:22 ID:???
>533
難しいのはいろんな概念が一気に出てきたためで、扱いは簡単ですね。
詳しい解説どうもです

537 名前:524 :02/09/03 21:33 ID:???
>>535
確かに水面の近くでテクスチャがずれそうですな。
この辺どうなってるのかは俺もよく分からんです… 役立たずでごめん。

陰についてはDXならシェーダで何とかならんかなぁ。
底面にぶつかった座標値からだせそうな気も…
これまたシェーダやり始めたばかりでよくわからんです(涙

538 名前:名前は開発中のものです。 :02/09/04 02:50 ID:xIbAbvD0
Directx8で質問です。
ラグナロクオンラインのように背景ポリゴン、キャラ2Dみたいにする場合、
2Dキャラ表示用のマトリクスはどう作ればよいのでしょうか?


539 名前:名前は開発中のものです。 :02/09/04 03:43 ID:???
一般的ビルボード行列は、
_11〜_34まで逆ビュー行列。_41からはx,y,z,1

でも俺は 「地面に立っている、少し奥側に傾いた板」を使い、行列は
普通でやってます。理由は
頭が地形にめり込むのを抑制するためと、
多少パース付かないと味気ないから。

足のつま先が地面にめり込むのを抑制するためには
ビルボードをカメラ方向にわずかに近づけてる。
転置ビュー行列の_31,_32,_33をある割合でx,y,zから引く。

はっきりいってビルボードはうんざり。
次のプロジェクトからは使いたくない。

540 名前:539 :02/09/04 03:44 ID:???
あくまでビルボードがメインのゲームってことね

541 名前:538 :02/09/04 04:13 ID:???
>>539
>>_11〜_34まで逆ビュー行列。_41からはx,y,z,1
できました。ありがとうございます。

>足のつま先が地面にめり込むのを抑制するためには
>ビルボードをカメラ方向にわずかに近づけてる。
>転置ビュー行列の_31,_32,_33をある割合でx,y,zから引く。
めりこみの抑止ですが、Z値をコントロールすることで回避は
できないのでしょうか?





542 名前:名前は開発中のものです。 :02/09/04 04:29 ID:???
>>541
D3DRS_ZBIAS だけど
どれくらいの効果かはやってみないとわからん

543 名前:名前は開発中のものです。 :02/09/04 04:30 ID:???
ZBIASって効果ないよ。同一平面の前後(壁と弾痕とか)位しか効果がない

544 名前:名前は開発中のものです。 :02/09/04 05:37 ID:???
最近D3Dやって思うんだけどOpenGLの方がクウォリティー高くない?

545 名前:名前は開発中のものです。 :02/09/04 05:52 ID:???
>>最近D3Dやって思うんだけどOpenGLの方がクウォリティー高くない?
いまいち抽象的すぎて言いたいこと分からんが、
今となってはドライバの対応状況の万全さでD3Dかな。

結局ね、ゲーム屋に言わせればAPI(インターフェイス)なんて
なんだっていいのよ。どうせラップせねばならぬし。


546 名前:名前は開発中のものです。 :02/09/04 07:12 ID:???
>>544
動作環境が広い面ではOpenGLだが結局は545の通り。
英語圏ではOpenGLでゲーム製作は多いし、
使えるライブラリではこっちの方が多いかな?
OpenGLのメジャー作といえばQuake3

547 名前:名前は開発中のものです。 :02/09/04 12:59 ID:???
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::END

この流れでスプライトを表示しようとすると、表示できませんでした。

IDirect3DDevice8::BeginScene
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::END
IDirect3DDevice8::EndScene

こうしてやるとスプライトを表示できました。
でも前者のやり方でスプライトを表示できている人もいる
みたいなんですが、うちの環境が変なんでしょうか?
ソフトはVC.NETで、OSはWin2k、
DirectX SDK のバージョンは8.1なんですけど。

548 名前:名前は開発中のものです。 :02/09/04 17:56 ID:???
>>547
ID3DXSpriteの説明に、ID3DXSprite::BeginはIDirect3DDevice8::BeginSceneの代わりには使えないと書いてある。
もしそうやってるソフトウェアがあったとしてもそんなの気にしない。SDKのとおりにしる


549 名前:名前は開発中のものです。 :02/09/04 19:10 ID:???
>>548
自分のPCがおかしいのかという不安が解消されました。
ありがとうございます。

550 名前:名前は開発中のものです。 :02/09/05 01:31 ID:/DOtiz09
ビルボードで貼り付ける画像の解像度は描画速度に関係してくるのでしょうか?
例えば16×16の画像を2倍に拡大した場合と32×32の画像をそのまま使用した場合で
解像度が低い方が描画が早かったりするんでしょうか?

551 名前:名前は開発中のものです。 :02/09/05 08:30 ID:???
>>550
理屈ではもちろんそうだが、その例では目に見える違いがでないかもしれない。
テクスチャ転送量全体を考えてみるべし。
むやみに低解像度にして画面がしょぼくなったら損だよ

552 名前:名前は開発中のものです。 :02/09/05 15:24 ID:XAnwUSlO
だれかOgg Vorbis形式の再生方法教えて!
ov_openするとアクセス違反になる..なぜじゃー(>_<)

553 名前:名前は開発中のものです。 :02/09/05 15:36 ID:???
>>552
もしかしてDLLのプロジェクトで作ってたりする?
俺も前にやったんだけど同じところでアクセス違反になって不思議だったんだが…
違ったらごめん。ちなみに解決策はコード生成でDLL(マルチスレッド)だ。
なんでそれで動くかはわからん(ぉ

554 名前:名前は開発中のものです。 :02/09/05 15:40 ID:XAnwUSlO
>>553
うおぉぉーーー!あなたは神様です(T-T)
マジでそれでうまく行きました(^^)
ありがとうっす♪

555 名前:名前は開発中のものです。 :02/09/05 18:31 ID:???
>>554
まさか本当にDLLで作っていたとは(笑 まぁ、解決してよかった。
それにしてもOgg Vorbisは本当にいいな。
再生するだけなら扱いも楽だし。ライセンス料かかるMP3は消えてよし。

556 名前:名前は開発中のものです。 :02/09/06 01:43 ID:3M9KUq9c
DirectX7から8へ乗り換え中です。
SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
7のときはこんな感じでアルファブレンドができたのですが、8だと
ただの抜けあり描画になってしまいます。
テクスチャはBMPでカラーキーを使用しています。
他になにか設定が必要なのでしょうか?

557 名前:名前は開発中のものです。 :02/09/06 01:48 ID:???
>>556
試しに↓も入れてみてくれ

SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);


558 名前:名前は開発中のものです。 :02/09/06 01:48 ID:???
SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
もな

559 名前:名前は開発中のものです。 :02/09/06 01:55 ID:???
>>556
8からカラーキーの使用は無くなった筈だが…
TGA若しくはDDSでアルファ情報があるテクスチャを使うんじゃ?
因みにDDSはSDKのUtilitiesのTextureToolで作れるよ。

560 名前:556 :02/09/06 02:19 ID:3M9KUq9c
>>557
入れてみましたが駄目でした。
SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
これも入ってます。
SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
この設定で加算はできています。
>>559
7にあったカラーキーが無くなって今までアルファブレンドだった
設定でカラーキーが使えるようになったと解釈して良いですか?
今までのアルファブレンドはどこに?
TGAのアルファプレーンは反映されるのですが、それだとプログラム側で
アルファ値をコントロールできないので、頂点アルファあたりを使って
アルファブレンドをやりたいのです。なにか良い方法ないでしょうか?


561 名前:名前は開発中のものです。 :02/09/06 02:25 ID:KmTxppnE
なあ、テクスチャの方はαを設定したのか?

562 名前:556 :02/09/06 02:29 ID:3M9KUq9c
>>561
テクスチャのアルファって?

563 名前:名前は開発中のものです。 :02/09/06 02:29 ID:KmTxppnE
SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_BLENDDIFFUSEALPHA );
これやらないとテクスチャはαブレンドにならないけど、
こういう話とは違う?>>560


564 名前:556 :02/09/06 02:54 ID:3M9KUq9c
すいません。この設定が効いてませんでした。
SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
ちゃんと出るようになりました。カラーキーの部分の抜けを適用したまま
半透明レートを頂点カラーでコントロールできます。
答えてくださったみなさんありがとうございましました。



565 名前:名前は開発中のものです。 :02/09/06 02:56 ID:KmTxppnE
良かったね。おめでたう。

566 名前:名前は開発中のものです。 :02/09/06 03:02 ID:NU3TRrfk
凄く初歩的な質問なんですが。
床などにテクスチャを貼る場合、
テクスチャの画像を大きくして並べる数を少なくするのと、
テクスチャの画像を小さくして並べる数を増やすのではどっちが軽いんでしょうか?

567 名前:名前は開発中のものです。 :02/09/06 03:05 ID:???
速度的には同じ。
メモリ的には小さい方が軽い。

568 名前:名前は開発中のものです。 :02/09/06 03:06 ID:???
テクスチャの画像を大きくして並べる数を少なくするのは歪みが生じない?
今のDirectXは平気になったんか?

569 名前:名前は開発中のものです。 :02/09/06 03:14 ID:???
昔のソフトでよくあった、テクスチャの繋ぎ目に隙間が開いてしまう現象
はなんだったんだろう?

今でもコントロールパネルから調整できるよねぇ?

570 名前:名前は開発中のものです。 :02/09/06 03:26 ID:m11JpBjY
ありがとうございます。
画像を小さくして並べる数を増やす方が良いのですね。
参考になりました。


571 名前:名前は開発中のものです。 :02/09/06 03:31 ID:???
テクスチャ繋ぎ目のすきま。
プログラマが固定小数点信者だったからとかない?(憶測

572 名前:名前は開発中のものです。 :02/09/06 03:37 ID:???
おいおい、ポリ数が多くなりすぎて逆に遅くなるだろ

573 名前:名前は開発中のものです。 :02/09/06 03:51 ID:???
面がでかすぎるとライティングも困る

574 名前:名前は開発中のものです。 :02/09/06 03:58 ID:???
その辺のバラス取りが泣ける。性能UPによって変わっていくし…

575 名前:名前は開発中のものです。 :02/09/06 04:30 ID:???
Gx00系は画面真っ暗。表示されず。

576 名前:名前は開発中のものです。 :02/09/06 04:49 ID:???
Gx00系ってMatroxのアレのことと今知った

577 名前:名前は開発中のものです。 :02/09/06 05:05 ID:???
>>575
Gx00系で何をすると画面真っ暗なんだ。大丈夫なのかお前。

578 名前:名前は開発中のものです。 :02/09/06 05:10 ID:???
Gx00系って、、、G4x0以外は使えねぇだろ…g200とか

579 名前:名前は開発中のものです。 :02/09/06 05:16 ID:???
G400もつかえねーけどな
450は氏欄

580 名前:名前は開発中のものです。 :02/09/06 05:17 ID:???
G400はバンプマップで地球儀だせるよ。それ以上は無理

581 名前:名前は開発中のものです。 :02/09/06 05:24 ID:???
>>579
どうでもいいが、つかえねー理由ぐらい書いとけよ。

582 名前:名前は開発中のものです。 :02/09/06 05:25 ID:???
抜き色がおかしくなる

583 名前:名前は開発中のものです。 :02/09/06 05:31 ID:???
俺はGeForce4Tiが現役マシンだが、G400も過去に使ってた。
具体的にDirect3Dの何を使ったら抜き色が変になったかを
書けば対策方法を教えるが?

584 名前:名前は開発中のものです。 :02/09/06 05:43 ID:???
>>579=>>582
>抜き色がおかしくなる

なぜ抽象的な表現を使う。
具体的に書いてみ。
何をしたら抜き色が変になったんだ。

585 名前:名前は開発中のものです。 :02/09/06 05:58 ID:???
つーか
○×のビデオチップが使えねーとかどうだとか
そういう話以前の問題だろ。

586 名前:名前は開発中のものです。 :02/09/06 06:44 ID:???
RenderState設定をいい加減にしてるだけだろ

587 名前:名前は開発中のものです。 :02/09/06 11:26 ID:2HBzLxJN
Gx00だと半透明の出具合が違うな。
GeForce系やRADEONでは大丈夫な設定でも。
なにか設定抜けてるのかな。

588 名前:名前は開発中のものです。 :02/09/06 15:51 ID:f2V/Iqy/
Ogg vorbisの曲データからPCMデータを抜き出して
DirectSoundに渡して再生するサンプルを誰か作ってー

589 名前:名前は開発中のものです。 :02/09/06 15:57 ID:???
すごいクレクレ君だな。

590 名前:名前は開発中のものです。 :02/09/06 16:59 ID:???
>>588
1)OggVorbisをWAVEファイルへ変換するソフトを作る
2)WAVEをDirectSoundで再生するソフトを作る

1はOggVorbisのSDKに九割方は同じのがあるし、2なんてWeb探せばどこにでもあるだろう?
しかも両方とも100行以内でかけるような簡単なものだ。
1と2ができるなら一緒にしてできないなんてことはありえまい。少しは自力でやってみ。

591 名前:531 :02/09/06 17:13 ID:???
DirectMusicのSetVolume×10パス分を毎フレーム呼んだら死んだ。
なんじゃコリャ。激重い。
やっぱゲームの効果音にはDirectSoundなの?

592 名前:名前は開発中のものです。 :02/09/06 18:15 ID:???
>>591
もしかしてSetVolumeって自動でフェードっぽいことしてくれないかなぁ?
ちとわからないんだけど、英語ヘルプにどうもそれっぽいことが書いてある気が…
dwDulationに与える値を設定してみてちょ

593 名前:592 :02/09/06 19:08 ID:???
>>591
今実験してみたけど、DirectMusicって自動フェードしてくれるみたいよ。
やっぱDirectMusicマンセーだな(w


594 名前:名前は開発中のものです。 :02/09/06 19:55 ID:???
う〜ん。フェードっつっても超非線形なのでやっぱ毎フレーム指定したいかも。
既にインターフェースそのままでDSoundにごっぞり鞍替え中。
でも自動でフェードしてくれるのは知らなかった。サンクスコ

595 名前:名前は開発中のものです。 :02/09/06 20:36 ID:???
PerformanceのInitAudioでDirectSoundのインターフェイスをとれば、
DMusicとDSoundを共存させられる気も。

596 名前:名前は開発中のものです。 :02/09/06 22:43 ID:/3OZCZxa
DirecDrawで、オフスクリーンサーフェスにTGA形式の画像を読み込みたいんだけど
これって自前でTGA解釈するしか方法ないのかな?
(バイナリとして読み込んでヘッダフッタ削ってDIBにするとかみたいな)

・・・今更DirectDrawとかいうな

597 名前:名前は開発中のものです。 :02/09/06 23:19 ID:???
>>596
海外のその手のサイトに行けば腐るほどそういうライブラリが
転がってるんでないの

598 名前:名前は開発中のものです。 :02/09/06 23:27 ID:/3OZCZxa
ごめん、ぐぐってたら考えが変わってきた

DirectX8.0SDKからDirectDraw弄る際のリファレンスってどこにありますか?
手持ちの日本語ヘルプファイルには無かった・・・

599 名前:531 :02/09/06 23:27 ID:???
鞍替え完了。サクッとFPSキープ。
DSUtilを読んでたら、publicメンバのGet関数を発見した。

>>595
DirectMusicは規模がでかいのであんまり関わりあいたくないかも。
waveしか使わなかったらDSoundのみもありですな。

600 名前:名前は開発中のものです。 :02/09/06 23:31 ID:???
>>598
ない。DX7のヘルプはMicrosoftのサイトに置いてあるからそれをDLしる

601 名前:名前は開発中のものです。 :02/09/06 23:42 ID:???
>600
すいません
ddutil.h読んでたら謎が解けました

ごきげんよう

602 名前:名前は開発中のものです。 :02/09/07 00:24 ID:iRBKvDit
IRC/opennap
http://opennap.scenecritique.com

603 名前:名前は開発中のものです。 :02/09/07 07:36 ID:???
DirectXに何の関係が?

604 名前:名前は開発中のものです。 :02/09/07 08:16 ID:???
DirectX9beta

605 名前:名前は開発中のものです。 :02/09/09 03:59 ID:oCHjDl9e
とりあえず、待ちきれないやつは後藤たんの記事でハァハァしとけ

■【9/6】DirectX 9のスーパーセットとなるNV30
http://www.watch.impress.co.jp/pc/docs/2002/0906/kaigai01.htm
■【9/5】DirectX 9世代のGPU戦略〜0.13μmに賭けるNVIDIA
http://www.watch.impress.co.jp/pc/docs/2002/0905/kaigai01.htm

606 名前:名前は開発中のものです。 :02/09/09 11:58 ID:LhGt96LR
Ogg Vorbisって1回全部読み込んでPCMデータにしてからじゃないと
再生できないのかなぁ??(ov_readを全データ分,前処理でするって事)
それとも手作業で別スレッド作って読み込みつつ再生しないといけないの?
MCIみたいに自動的に別スレッドで読み込みつつ再生してくれる方法ってないの?
どなたか知ってたら教えてくださいm(__)m

607 名前:名前は開発中のものです。 :02/09/09 12:23 ID:???
>>606
すれ違い。
それにストリーミング再生くらい自分で作れないと駄目。
しかもOggVorbisに限った話じゃないし。

608 名前:名前は開発中のものです。 :02/09/09 22:13 ID:???
リアルタイムアクションゲーのBGMってことで
DirectSound + OggVorbisで64bpsの曲を流したら、
数秒に1回、一瞬ラグ入るんですが、みんなもそう?
やはり重いのかな。
CPUはP4 1.7G です。

609 名前:名前は開発中のものです。 :02/09/09 22:26 ID:???
>>608
BGM切ると正常になるならOggVorbisのせいかもしれないが、
OggVorbisのデコードの仕方に問題がある可能性も否定できない。
うちでもOggVorbis使ってるが固まることがないから。

610 名前:名前は開発中のものです。 :02/09/10 07:41 ID:???
>>609
バッファがでか過ぎたようでした。500kありました。
十分小さくしたら問題なくなりました(16kでも行けた)

611 名前:名前は開発中のものです。 :02/09/11 01:56 ID:???
半日悩んだんだけど、どうしてもわからない・・・
DirectX8.0SDK+BCC5.5.1+ttp://www.geocities.com/foetschのBorland用Libファイルで
自作のD3Dラッパーが動かない・・・(コンパイルは通る)

ちなみにチュートリアルはコンパイルできて、期待通りの振る舞いをします
ランタイムのバージョンは8.1です

チュートリアルとほとんど変わらない事をやってるはずなのに
ログ見たところCreateDeviceでInvalidCallが返ってくるです

以下にソースを晒しますので、お暇な方はちょっと見てやってください

http://naha.cool.ne.jp/lichterlo/myd3d.h.txt
http://naha.cool.ne.jp/lichterlo/myd3d.cpp.txt

612 名前:611 :02/09/11 02:23 ID:6aqmQWZz
age忘れゴメソ

613 名前:名前は開発中のものです。 :02/09/11 03:33 ID:???
>>611
コンパネ→DirectX→Direct3D で Use Debug Version にして
デバッガで走らせると、アドバイス的なメッセージもガンガンでてくるぞ

614 名前:名前は開発中のものです。 :02/09/11 03:36 ID:???
デバッグメッセージを受け取れる状態で実行しないと効果がない罠

615 名前:名前は開発中のものです。 :02/09/11 04:03 ID:???
デバッガで走らせると、と書かれてあるように見えるが

616 名前:名前は開発中のものです。 :02/09/11 05:13 ID:QUS9ooCg
>611
ハードウェアアクセラレータ最大 になってる?


617 名前:611 :02/09/11 06:07 ID:???
>613
デバッグバージョンのランタイム持ってなかったのでDL中です
アドバイスthx

>616
環境はPenIV1.8GHz512MB
GeForce4Ti4200DDR128MBと申し分ない雰囲気です

618 名前:611 :02/09/11 06:59 ID:???
デバッグ用ランタイムで走らせてみたら
「指定されたウィンドウはフォーカスを受け取れない」
・・・

えぇ、ウィンドウもラッパークラス作ってたんですが
メンバじゃなくて関数ローカルのHWNDでCreateしてました・・・

はずかしー

619 名前:名前は開発中のものです。 :02/09/11 12:16 ID:???
ヤレヤレだぜ。

620 名前:名前は開発中のものです。 :02/09/11 22:17 ID:RNHebZSv
DirextX8.1のIDirect3D8::CreateDeviceに渡す構造体の
D3DPRESENT_PARAMETERSのFullScreen_RefreshRateInHzに
D3DPRESENT_RATE_DEFAULTとか
D3DPRESENT_RATE_UNLIMITEDを設定してデバイスを作成した時
設定されたリフレッシュレートを知りたい場合はどうすればいいんですか?


621 名前:名前は開発中のものです。 :02/09/11 23:02 ID:???
>>620
http://www.microsoft.com/japan/developer/library/jpdx8_c/_dx_idirect3d8_getadapterdisplaymode_graphics.htm
これ使っちゃダメ?
でもデフォルトだと0が取得できちゃったりする罠。

622 名前:名前は開発中のものです。 :02/09/11 23:09 ID:???
>>650
http://www.microsoft.com/japan/developer/library/jpdx8_c/_dx_idirect3ddevice8_getdisplaymode_graphics.htm

あ、こういうメンバ関数もあるんだ…。
でもデフォルトの0はD3DDISPLAYMODE型の仕様で定められてるっぽいので
それを確実に回避してリフレッシュモードを調べようと思ったら、
単位時間内のフリップ回数を数えるのがベストかなぁ…。

623 名前:名前は開発中のものです。 :02/09/11 23:52 ID:???
Visual C#とDXVBLib(Direct X 7.0 for Visual Basic)で簡単なチャットをつくろうと思っています。
DirectPlayのReceiveでDirectPlay4のQueryInterfaceに失敗しました。
というエラーメッセージが出ます。
エラーメッセージの意味がわかりません。
解決方法とかってあるんでしょうか。

624 名前:名前は開発中のものです。 :02/09/12 00:03 ID:???
Visual C#とDXVBLib(Direct X 7.0 for Visual Basic)
~~~~~~~~~~                  ~~~~~~~~~~~~~
1行目の時点で何か失敗しそうな予感がするのは私だけなのでしょうか…?

625 名前:名前は開発中のものです。 :02/09/12 00:09 ID:???
レスありがとうございます。
Visual C#でDirect Xを使おうとすると
DXVBLib(Direct X7.0 for Visual Basic)ぐらいしか見当たらなかったので
今はDXVBLibを使っています。
DXVBLibはComコンポーネントなので、
どの言語でも利用可能かと、、、
それと今のところは上以外不具合はありません。
よろしくお願いします。

626 名前:名前は開発中のものです。 :02/09/12 00:22 ID:xMICRC4q
>>621-622
うーんやっぱりデフォルトのときに0が戻ってくるのが困りますね
マイ黒ソフトの考えることはよーわかりません
可変FPSはあきらめて60固定でするしかないのかな?

どうもありがとうございました

627 名前:名前は開発中のものです。 :02/09/12 00:24 ID:???
ハァ?
可変FPSについて誤解してないか?
普通はフレーム処理にかかった時間を記憶して調整するだろ

628 名前:名前は開発中のものです。 :02/09/12 00:45 ID:???
液晶のリフレッシュレートってどうなってるの?

629 名前:名前は開発中のものです。 :02/09/12 01:53 ID:???
液晶ベンダー次第

630 名前:名前は開発中のものです。 :02/09/14 10:16 ID:???
日本語マニュアルって8.1のはないの?

631 名前:名前は開発中のものです。 :02/09/14 12:34 ID:???
>>630 MSDN内にあるよ。

632 名前:名前は開発中のものです。 :02/09/14 14:53 ID:???
ないよ

633 名前:名前は開発中のものです。 :02/09/14 18:32 ID:???
フルスクリーン<->ウィンドウの切り替えって
IDirect3D8::CreateDeviceで対応したデバイスを作り直すって事でいいのかな・・・

634 名前:名前は開発中のものです。 :02/09/14 19:21 ID:???
>>633
renda- sute-to de risetto

635 名前:名前は開発中のものです。 :02/09/14 19:22 ID:???
まちがい
プレゼントパラメータ設定してリセット
あーはずかし・・

636 名前:633 :02/09/14 23:21 ID:???
リファレンス見ました
テクスチャとか全部破棄してIDirect3DDevice8::Resetするんですね
ありがとう

637 名前:名前は開発中のものです。 :02/09/15 00:27 ID:???
D3DPOOL_MANAGEDにしとけば破棄しなくても済む?

638 名前:名前は開発中のものです。 :02/09/15 01:30 ID:???
>>637
うん。
でもD3DXSPRITEとかあのへんのは破棄するしかないので諦めてやるしかない。

639 名前:名前は開発中のものです。 :02/09/15 10:12 ID:???
>D3DXSPRITE
使う必要性が見あたらないので、使わなければ良いだけでは?

640 名前:名前は開発中のものです。 :02/09/15 10:40 ID:???
ターゲットが WindowsXP なので
mciSendCommand , mciSendString の代わりにDIRECTSOUND で
音を出す必要が出てきました。
(NT4で動いたプログラムが動かんとは…)

そこで mciSendString("play hogehoge notify", NULL, 0, hWnd);
のように実行が終わったら特定のウィンドウにメッセージを
送るための仕組みはあるのでしょうか?

なかったら別スレッドを立ててそういうルーチンを組まないといけないのでしょうか?

641 名前:名前は開発中のものです。 :02/09/15 10:45 ID:???
>>640
DirectX7のヘルプだとチュートリアルの中に「再生の通知の処理」という項目があるけど。

642 名前:640 :02/09/15 18:00 ID:???
わかりました。もちっとDirectXのサンプルソースをなめまわしてみます。

643 名前:名前は開発中のものです。 :02/09/17 08:49 ID:???
>>640
うちでは、mciで普通に動いているけれど・・

644 名前:名前は開発中のものです。 :02/09/17 09:43 ID:???
時々TRIANGLESTRIPはパフォーマンスがいいからそっち使おうって話を聞きますけど、
実際のところTRIANGLELISTなんかよりもよかったりするんですか?

例えばハイトフィールドをDrawIndexedPrimitiveで描画するとして、
TRIANGLELISTなら一発で描画できるけど、
TRIANGLESTRIPでは帯を何度か描画しなきゃならないっすよね。

COM呼び出し回数を減らすのも十分な高速化だと思うんですが…

645 名前:名前は開発中のものです。 :02/09/17 12:08 ID:???
原則的にはそう。
ただしご指摘の通りDrwPrimitiveのオーバーヘッドが大きいのでDirectXでは効果が薄い
(OpenGLなんかは早いよ)

市販ゲーなら必須かもしれんが、趣味プロなら要らないかも
まぁそーいったチューンを楽しむのも趣味プロの一環だろうけど


646 名前:644 :02/09/17 16:13 ID:???
>>645
オーバーヘッド考慮しなければ高速なんですね。
Strip化とDrawPrimitiveの回数減らすのって全く逆になりそうだし、
実際どちらがいいのか不思議で仕方なかったんですがスッキリしました。
ありがとうございます〜

647 名前:名前は開発中のものです。 :02/09/17 16:23 ID:???
3角形を書くのには3頂点必要だけど、ストリップなら+1頂点で三角形が書けてしまう
100個の三角形書くのに listなら 300頂点、stripなら99+3頂点。役1/3

後オーバーヘッドだけじゃなくて、最近のビデオカードは頂点キャッシュがあるので、キャッシュヒットすれば
演算が省かれるので差がつきにくいつーのもありかと



648 名前:名前は開発中のものです。 :02/09/17 21:35 ID:???
皆さんはSetTextureStageStateとかSetRenderStateとかでステータスを変えて描画した後どうしてますか?
変える前のステータスはGetで保存しておいて、終わったら全部復元みたいな感じなんですかねぇ
書き換えたステータスが他のところで影響したりしてしまって結構面倒。。

Direct3Dにレンダーステートのスタック機構が整ってるとうれしいとか思う今日この頃

649 名前:名前は開発中のものです。 :02/09/17 21:48 ID:???
COM呼び出しってそんなにオーバーヘッド無いぞ、
コストは普通の仮想関数呼び出しと変わらない。
DCOMはプロセス超えるからオーバーヘッドあるけど。

650 名前:名前は開発中のものです。 :02/09/17 21:49 ID:???
んじゃ単に関数呼び出しが重いってだけ?

651 名前:名前は開発中のものです。 :02/09/17 21:50 ID:???
>>648
スタックだとOOPと相性が良くない罠。
ステートマシンだからD3D8の様な形に出来たと思う。

652 名前:640 :02/09/18 01:34 ID:???
>>643
うちではmp3の読み込みと再生を全部mciでやってたけど、
codecが腐ってたからどえりゃあ不安定で再生できたりできなかったりしたんですよ。

とりあえずwavに交換してその場はしのぎましたが、
ファイルサイズを小さくするのが至上命令なんで
mp3の再生をDIRECTSOUNDで行おうかと考えたんですよ。

653 名前:名前は開発中のものです。 :02/09/18 02:56 ID:???
ライトマップ使ってるんでほとんど
ストリップになりません・・・
って俺だけかな。工夫が足らない?

654 名前:名前は開発中のものです。 :02/09/18 03:58 ID:???
>>652
世の中にはOggVorbisという便利なものがありますよん。
圧縮率・音質ともに良好なので念のため考えてみるべし。


655 名前:名前は開発中のものです。 :02/09/18 06:12 ID:???
>652
意表をついてMODという手もある
ttp://www.mars.dti.ne.jp/~odaki/mod/index.html
CからMOD再生DLL↓
ttp://www.un4seen.com/music/

ちなみに
Unreal TournamentがMODで
UT2003がOggVorbis

656 名前:名前は開発中のものです。 :02/09/18 21:48 ID:???
>>647
インデックス使えばストリップ使う必要性が全くないと思うんだけど・・・

657 名前:名前は開発中のものです。 :02/09/18 23:41 ID:???
結局、キャッシュヒットするようにIndex並べるつーのはStripに近いきがするけどね

SD-RAMからRIMM1066なって転送スピード10倍とかになったので
リファレンスラスタライザーもちっとは動くかと思ったら、やぱし全然駄目ですた
ソフトレンダのVirtualONはどうかと思ったら MMXに対応していません とかエラー出やがります
ショボーン


658 名前: :02/09/19 01:18 ID:???
Direct3Dのテクスチャの張り方で困っています。
地面にテクスチャをタイルのように並べてマップを表現しています。
一気に書けるように、256*256pixelのテクスチャを64*64単位のパーツを分けて
地面にペタペタ張っているのですが、
継ぎ目に隣のテクスチャが微妙に見えてしまいます。

頂点がpixelの中央になるようにuvを、例えば
(0.0 , 0.0)-(0.25 , 0.25)から
(0.0+0.5/256 , 0.0+0.5/256)-(0.25-0.5/256 , 0.25-0.5/256)
のように変更してもダメでした。(遠ざかるにつれ継ぎ目が見える)
ミップマップが効いているため、遠くのポリゴンでは
+0.5/256 でなく +0.5/128 等に変更しないとダメのようです。

どのようにすればこの問題を解消できるのか
教えていただきたいです。よろしくお願いします。

659 名前:名前は開発中のものです。 :02/09/19 02:25 ID:???
超FAQ

660 名前:名前は開発中のものです。 :02/09/19 17:36 ID:???
IDirectMusicSegment8::SetLoopPointsのmtStartとmtEndって
どんな数値入れればいいのでしょうか?
ms単位だと変な位置でリピートするのですが、教えてくださいお願いします。


661 名前:名前は開発中のものです。 :02/09/19 19:45 ID:???
頂点キャッシュってDrawIndexedPrimitiveじゃないと意味ないよねえ・・・

662 名前:名前は開発中のものです。 :02/09/19 20:03 ID:???
>>660
DirectMusicってms単位じゃなくてMIDIみたいなTick単位じゃなかった?
使ったことないから自信ないけどそうだった気がする

663 名前:名前は開発中のものです。 :02/09/19 23:29 ID:???
Xファイルをオリジナルフォーマットにコンバートしたいのですが
IDirectXFileEnumObject::GetNextDataObject()が
DXFILEERR_PARSEERRORを返してwhileループから抜けてしまいます
↑はヘルプを見る限り返さないはずですが・・・
あとIDirectXFileData::GetType()でGUID拾ってくるのですが
これはCOMオブジェクトを作れと言ってるのですか?
ヘルプの
DirectXGraphics->高度なトピック->Xファイル->使い方->ロード
だけだと情報が少なすぎます
どうかご教授お願いします

プログラム版の方にも書いたんですが進行遅そうなので
こっちに書かせていただきましたごめんなさい


664 名前:名前は開発中のものです。 :02/09/20 00:04 ID:???
>>660
何かキーが押されたらIDirectMusicPerformance8::GetTime()で
その時点のMUSIC_TIME拾ってそれをメモっといて
IDirectMusicSegment8::SetLoopPoints()
に渡せばいいんじゃないかな
8始めたばっかでAudioはやってないけど7の時はそれでできますた
漏れはXFileの解析で苦しんでるんですよ誰か教えて

665 名前:664 :02/09/20 00:08 ID:???
そうそうMUSIC_TIMEはロードした時点から更新されるので
曲の位置=nowtime-starttimeだったっけ7は

666 名前:名前は開発中のものです。 :02/09/20 00:08 ID:???
Xファイルの変換って、MSのルーチンを使うと大変だよな。
直接読んだ方がイイよ。

667 名前:663 :02/09/20 00:10 ID:???
>>666
Xファイルのフォーマットはどこで調べられますか?

668 名前:名前は開発中のものです。 :02/09/20 00:17 ID:???
>>667
ヘルプ読めよ・・・

669 名前:663 :02/09/20 00:22 ID:???
>>668
ヘルプに書いてあるのは知ってましたが
たくさんあるテンプレートやトークン全て考慮して自力でやる方が
MSのルーチン使うよりも簡単なんですか?


670 名前:ヴァニラあいす ◆Af963Yl. :02/09/20 00:27 ID:???
>>663
.Xファイルは実は自前のルーチンも持っているんだけど、
今回はあえてD3DXライブラリを使って試してるとこ。

漏れも今いろいろ試してるので、何か分かったら書きます。
期待せずにまってて頂戴。
途中で投げ出しちゃったらごめんなさい。w


671 名前:名前は開発中のものです。 :02/09/20 00:28 ID:???
>>669
不要な情報は読み捨てる。

672 名前:名前は開発中のものです。 :02/09/20 00:28 ID:???
なんか言いがかりに近くなってきたな。
ここはゲ製だから、666はゲームが内部に持つローダーと仮定しているのだとおもう。
それならば対応すべきテンプレートなどたかが知れてる。それともツールでも作るのかね?

673 名前:663 :02/09/20 00:34 ID:???
>>672
ローダーだったらD3DXCreateMesh()が簡単だからそれ使ってるけど

674 名前:671 :02/09/20 00:36 ID:???
独自形式で必要な情報だけを、Xファイルから取ればいいのなら、
テンプレートなんてほとんど無視できると思うんだけど。
どーですかね?

675 名前:名前は開発中のものです。 :02/09/20 00:38 ID:???
はぁ??

676 名前:663 :02/09/20 00:39 ID:???
D3DXCreateMesh()->D3DXLoadMeshFromX()の間違い
>>674
テンプレートとかよく分かってないんで勉強が必要です

677 名前:675 :02/09/20 00:39 ID:???
>>673

678 名前:名前は開発中のものです。 :02/09/20 00:41 ID:???
もしやおまいら
スキンメッシュの分割自前でやっとるん?

679 名前:672 :02/09/20 00:41 ID:???
俺がここで言ったローダーは解析部(パーサー)のことを指してるのですよ  >>676

680 名前:663 :02/09/20 00:43 ID:???
>>674
最低限必要なデータは頂点、インデックス、マテリアルですが・・・

681 名前:名前は開発中のものです。 :02/09/20 00:46 ID:???
>>663
んで、何を質問してたんだっけ?

682 名前:663 :02/09/20 00:50 ID:???
>>681
Xファイルから独自フォーマットのコンバート
欲しいサブセットデータは頂点、法線、テクスチャuv、
ストリップインデックス、マテリアル、テクスチャファイル名
と多分こんなもんです

683 名前:名前は開発中のものです。 :02/09/20 00:53 ID:???
>>682
それならばSDKの例のサンプルで読めるな。
読み込んだら好きなように吐き出せばOK。

684 名前:663 :02/09/20 00:55 ID:???
>>683
8.0SDKですがXファイルのサンプルなんてありましたか・・・
うかつですた


685 名前:663 :02/09/20 00:56 ID:???
皆さんレスありがとうございます

686 名前:名前は開発中のものです。 :02/09/20 01:01 ID:???
===完===

687 名前:名前は開発中のものです。 :02/09/20 02:52 ID:???
VS2.0 PS2.0
の資料なんてまだないよねえ・・・

688 名前:名前は開発中のものです。 :02/09/20 17:41 ID:4/XpyZrj
また質問しますが許してください

Xファイルからコンバート中なのですが
ID3DXMeshの個々のサブセットのストリップインデックススタート値と
個々のサブセットの面の数はどうやって調べればよいのでしょうか?
コンバートした後にIDirect3DDevice8::DrawIndexedPrimitiveを
呼び出すときに使うので・・・
あとD3DPRIMITIVETYPEを調べるのは不可能ですか?
よろしくお願いします

689 名前:688 :02/09/20 17:45 ID:???
つけたし
サンプルのPick Polyを参考にしながらやってます

690 名前:688 :02/09/20 18:33 ID:???
ヘルプを見ていたらID3DXBaseMesh::GetAttributeTable()が
使えそうな気がしてきますた
これでやってみます

これで合っていたらお騒がせして申し訳ありませんでした

691 名前:名前は開発中のものです。 :02/09/20 19:31 ID:???
ある場所でD3DXCreateTextureFromFileExAを呼び出すと、
別の場所でkernel32.dllのエラーが起きるとかいう不可解な状況なのですが…
(それもプログラム始まって数行目の凄い簡単なコードの場所で)
まさかこんな状況になった人ってほかにはいませんよねぇ(汗

ちなみに環境はWin2k/VS.NET/DX8.1/MultiThread/Unicodeでコンパイル、
実行環境は他人のマシンでWin98上書きMe/DX8.1らしいです(かなり古いらしい)
当然ながら自分のマシン上では問題なく動きます。それだけにデバッグしにくい…

692 名前:名前は開発中のものです。 :02/09/20 19:39 ID:???
ちなみにD3DX〜関数をコメントアウトするだけでちゃんと動くという…
リンカとかコンパイラとかのバグかと疑いたいです(w

693 名前:688 :02/09/20 20:01 ID:???
>>691
漏れにはお手上げです
動作環境のテストは個人では難しいのでは?


ID3DXBaseMesh::GetAttributeTable()はID3DXMesh::Optimize()しないと
駄目らしい・・・んでOptimize()の呼び方が間違ってるのか失敗しる

それで最初の質問
ID3DXMeshの個々のサブセットのストリップインデックススタート値と
個々のサブセットの面の数はどうやって調べればよいのでしょうか?
あとD3DPRIMITIVETYPEを調べるのは不可能ですか?
どうかこのウツケな漏れにお教えください

スレ汚しごめんなさい

694 名前:691 :02/09/20 20:11 ID:???
>>693
D3DXMeshって三角形リストのみじゃなかった?

695 名前:名前は開発中のものです。 :02/09/20 20:37 ID:???
>>691
> /Unicode

Unicodeにする必要性はサテオキ
win98でunicodeプログラムって正常に動くんだっけ?

あと、unicodeなのに D3DXCreateTextureFromFileEx"A"
とはいかに。Wな気がするが。

696 名前:691 :02/09/20 20:59 ID:???
>>691
MSLUを使えばWin98上でUnicodeも動くし、
マルチバイトでW版が使えるのと一緒でUnicodeでもA版は動くよ

LPDIRECT3DDEVICE8 CreateDevice();
LPDIRECT3DTEXTURE8 CreateTexture();

int WINAPI WinMain(...)
{
HINSTANCE hDll = LoadLibraryA( "unicows.dll" );
someclass* instance = new someclass;
LPDIRECT3DDEVICE8 device = CreateDevice();
LPDIRECT3DTEXTURE8 texture = CreateTexture();
texture->Release();
device->Release();
delete instance;
FreeLibrary(hDll);
return 0;
}

の、new someclsssのところで死ぬんですよ。
んでCreateTextureをコメントアウトすると動く… 不可解すぎ(汗

697 名前:名前は開発中のものです。 :02/09/20 21:04 ID:???
UNICODE使うのやめれば?

698 名前:691 :02/09/20 21:14 ID:???
Unicodeは関係ないと思うんだけどなぁ…
とりあえずUnicodeチェックはやめてみようと思います。
しかしテストしてくれる人に会えるのが3日に一度でテストすらできず…

699 名前:名前は開発中のものです。 :02/09/20 21:20 ID:???
極当たり前に考えて、Win98上のUnicodeなんて信用できないだろ。

700 名前:691 :02/09/21 00:30 ID:???
すまんす、結局Unicodeが原因ですた… ただ、結局Unicodeで動いてます。

今までunicows.libをリンクしてただけだったんですが、
MS公式サイトの説明通りに/nodでkernel32とかを無視させるようにしたらいけました。
D3DXCreateTextureFromFileで死んでたのは多分、
関数内でUnicows.dll内のファイル系関数を呼ぶのに失敗してたんじゃないかな?
という感じです。どうもお騒がせしました…。

701 名前:名前は開発中のものです。 :02/09/21 08:56 ID:???
わざわざトラブルを抱え込んで自爆というオチか。アフォ丸出しだな

702 名前:名前は開発中のものです。 :02/09/21 10:03 ID:viCl1ubd
VC5.0+DX8.1bSDKでコンパイルすると
'UINT_PTR' : 定義されていない識別子です。
とか出てエラーになるのですが適当にtypedef int* UINT_PTR;と入れても
'&' : 不正な左オペランドです。
とか出るのですがVC5.0+DX8.1bSDKの組み合わせは駄目ですか?

FAQかもしれませんが検索してもヒットしなかったのでよろしくお願いします

703 名前:名前は開発中のものです。 :02/09/21 10:21 ID:???
とりあえずUINTはunsigned int ニダ

704 名前:702 :02/09/21 10:38 ID:???
たぶんVC6.0以降のの〜\VC\include\*.hで定義されていると思うのですが
UINT_PTRとはどういった型なのかを教えて下さい

d3dx8math.hのstruct _D3DXMATRIXA16の中のnewオーバーロードで
エラーが出てしまいます

705 名前:名前は開発中のものです。 :02/09/21 10:51 ID:???
grepしたらこんな感じ <basetsd.h>
#ifdef _WIN64
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
#else
typedef unsigned long UINT_PTR, *PUINT_PTR;
#endif


706 名前:702 :02/09/21 10:58 ID:???
>>705
d3dx8math.hにぶち込んだらとおるようになりますた
たいへんたいへんありがとうございますた

707 名前:702 :02/09/21 11:05 ID:???
なんか衝突する場合もあるみたいなので代わりに
d3dx8math.hに#include <basetsd.h>
としたら大丈夫みたいです

708 名前:名前は開発中のものです。 :02/09/21 20:33 ID:???
2D的に扱いたいのでWorld-View-Projectionは変更しないという前提で、

スプライトを描画する場合VertexBufferは4頂点分の大きさが必要だけど、
何種類ものスプライトを表示する場合、やはりVertexBufferは1スプライト
に1つ作成するものなのでしょうか?

考えてるのは、グローバルに1つスプライト用のVertexBufferを作っておいて
描画するときに、VertexBuffer更新する方法なのですが
みなさんどうしてますか?

もしかしてスプライトの場合でもVertexBufferを固定で、一つ一つ
WorldTransformかけてるのかな?

709 名前:名前は開発中のものです。 :02/09/21 21:14 ID:???
>>708
深く考えずにTLVertexとDrawPrimitiveUPでいいと思う

710 名前:708 :02/09/21 21:49 ID:???
>709
確かにそうなのですが。(以前はTLVertexとDrawPrimitiveUPを使ってました)
しかし、今回はShaderを使うこともあり、どうしてもVertexBufferを
使うしかないんです。

例をスプライトからパーティクルに変えますが、
class ParticleList
{
Particle par[1000];
VertexBuffer* vb
}



class ParticleList
{
Particle par[1000];
VertexBuffer* vb
}


711 名前:708 :02/09/21 21:53 ID:???
ゴメン送信してもうた。
----
class ParticleList
{
 Particle par[1000];
 static VertexBuffer* vb
}

では、どっちがいいかな?
毎フレームパーティクルの座標は書き換えるので、大きいVertexBufferを
作って全てのパーティクルで共有した方がいいと思うんだけど。

712 名前:名前は開発中のものです。 :02/09/21 22:03 ID:???
俺だったら、MAX_PARTICLEサイズのバッファー一回つくって、
あとは毎フレームそれにつっこんで1回のDrawで描くよ

713 名前:709 :02/09/21 22:55 ID:???
一度にスプライト描画するんだったら、
MAX_SPRITE分の四角形を描画できる三角形リストのIndexBufferを用意
IndexBufferは何度描画しても変わらないから最初に初期化だけしとく
後はスプライトの四点をVertexBufferに書き込んでいってDrawIndexedPrimitive

ただこれは一歩間違うとUP系より遅くなる可能性があるんで注意
メインループのスケジューリングが結構大切です
(Presentの"直後に"DrawIndexedPrimitiveを呼べないなら、
DrawPrimitiveUPで早い段階からスプライトを1つずつ描画したほうが早い場合も)

714 名前:709 :02/09/21 23:01 ID:???
UPで逐一描画するのとIndexedで溜め込んだ場合の差異はここにテストがあった
ttp://isweb42.infoseek.co.jp/computer/t_tail/program/vsdx8/d3d/020/index.htm
上の表のDrawPrimitiveUPのレンダリング時間とDrawIndexedPrimitiveの差に注目
それとRender.cppも参照しる

715 名前:名前は開発中のものです。 :02/09/22 00:12 ID:???
俺はいろいろやってみたことあるよ。UPは結構優秀。
nvidiaのサイトで拾ったDynamicVertexBuffer/DynamicIndexBufferの
テンプレート使ってUPと対等。
事前にIndexBufferを用意してやっとDrawIndexedPrimitiveUPに勝てた。

716 名前:名前は開発中のものです。 :02/09/22 04:32 ID:fagAZlUu

LPDIRECT3DTEXTURE Image;
void load(LPDIRECT3DDEVICE8* pDevice,char* filename){
D3DXCreateTextureFromFile( *pDevice, filename, &Image)
}
がD3DXERR_INVALIDDATAを返して失敗します。
これを呼び出す前にメッシュのロードに成功しているのでpDeviceにはしっかりとした値が入っていますし、filenameも"a.bmp"でフォルダにa.bmpも存在しています。
いったいなにが悪いのかわかりません。


717 名前:名前は開発中のものです。 :02/09/22 05:08 ID:???
>>716
カレントディレクトリがどこか確認しる。

718 名前:名前は開発中のものです。 :02/09/22 05:15 ID:fagAZlUu
>>717
Debugから直接アプリを起動しているので間違いないとおもいマス。
エラーのチェックはこうやってます。
switch(D3DXCreateTextureFromFile( *pDevice, filename, &Image))
{
case D3DERR_NOTAVAILABLE : MessageBox (NULL,"NOTAVA","e",MB_OK);break;
case D3DERR_OUTOFVIDEOMEMORY : MessageBox (NULL,"OUTOF","e",MB_OK);break;
case D3DERR_INVALIDCALL : MessageBox (NULL,"INVAOLODCA","e",MB_OK);break;
case D3DXERR_INVALIDDATA : MessageBox (NULL,"INVAILDDATA","e",MB_OK);break;
case E_OUTOFMEMORY: MessageBox (NULL,"E_OUTOOFMEMA","e",MB_OK);break;
}


719 名前:名前は開発中のものです。 :02/09/22 05:50 ID:???
うちのGeForce3では期待した動作をしてくれるんですが、
知り合いのMatroxのVGAで動かしたら駄目らしいんです。
ここまではよくある話なんですが、ちょっと不可解なので…

ALPHAOP と COLOROP にそれぞれ
STAGE0 に D3DTOP_MODULATE, D3DTA_TEXTURE, D3DTA_DIFFUSE
STAGE1 に D3DTOP_MODULATE, D3DTA_TFACTOR, D3DTA_CURRENT
と指定するのと、
STAGE0 に D3DTOP_MODULATE, D3DTA_TEXTURE, D3DTA_TFACTOR
と指定するので表示結果が変わってしまいました。
具体的には、最初のほうのTFACTORが影響されてない感じでした。
(頂点ディフューズ色は0xFFFFFFFFでデフォルトと一緒にしてます)

テクスチャステージも3まで対応してるとD3DDEVCAPS8には出てるし、
他に考えられる原因が分かりません…。

720 名前:名前は開発中のものです。 :02/09/22 06:07 ID:???
>>718
話題はずれるが、今後のためにD3DXGetErrorStringを見といた方がいいぞ

721 名前:名前は開発中のものです。 :02/09/22 06:26 ID:???
VCのデフォルトっぽい構成で、カレントディレクトリはmyprojと仮定。
myproj\data\mesh.x
myproj\data\a.bmp
myproj\debug\prog.exe

D3DXLoadMeshFromX("data\mesh.x"...);で読んだら
"a.bmp"のパスは"data\a.bmp"

722 名前:名前は開発中のものです。 :02/09/22 07:53 ID:fagAZlUu
なんか、成功しました。カレントディレクトリの問題だったようですぅ。

723 名前:名前は開発中のものです。 :02/09/22 10:19 ID:???
>>719
リファレンスラスタライザではどうなる?
リファレンスと異なるならMatroxに報告してあげるとか・・・

724 名前:名前は開発中のものです。 :02/09/22 12:47 ID:???
>>722
よくある間違いだ。過去ログ見るひとのために一応書いておくと
./debugのアプリは ./ に移動させてから実行しないといけないんだよな。

725 名前:719 :02/09/22 13:55 ID:???
>>723
うちの環境のREFで実験したら、期待通りの動作でした。

Matroxの最新ドライバで試すのをすっかり忘れてたので、
それで駄目だったらMatroxに通報してみます

726 名前:名前は開発中のものです。 :02/09/22 17:05 ID:???
この間やっとDX8.1bSDK入れたんだけどDX7でやってた
IDirectMusicLoader::GetObject()が全角ファイル指定すると
失敗するようになったんですが前のプロジェクトは全部捨てろと
MSは言ってーるのですか?・・・半角カタカナは前からだったけど

727 名前:名前は開発中のものです。 :02/09/22 18:53 ID:???
>>719
D3DTA_DIFFUSEとD3DTA_TFACTORは同時に使えない環境がある。
SDKの説明にもそんなことが書いてある。
NVIDIAでも同時に使えるようになったのはGeForce3から。

728 名前:719 :02/09/22 19:56 ID:???
>>727
へぇぇ、そうだったのかー
ってことは、結構ハードウェア的には厳しい実装だったのね・・
情報ありがトン

729 名前:名前は開発中のものです。 :02/09/22 21:21 ID:???
起伏のある地形をxファイルで読み込んで
その地形の上をカメラが移動する、という風にしたいのですが
地形が盛り上がっているところや凹んでいるところで
カメラの高さをどのように上げ下げするのかわかりません。

検索したところBSPというものが引っ掛かったのですが
これを用いる方法しかないのでしょうか?

730 名前:名前は開発中のものです。 :02/09/22 21:23 ID:???
初歩的な質問ですいません。
キーワードだけでも教えていただけると助かります。

731 名前:名前は開発中のものです。 :02/09/22 21:27 ID:???
起伏の形状を取り出してx, y座標からz座標を求めればいいんじゃなかろーか

732 名前:名前は開発中のものです。 :02/09/22 21:36 ID:???
起伏のある地形ということならHeightFieldがいいんじゃないか?
これならx座標とz座標に応じてフィールドのy座標が決まるから、
それにカメラの高さを加えてやればいいだけだな

733 名前:名前は開発中のものです。 :02/09/22 21:41 ID:???
ちなみにこう。
float field[FIELD_SIZE][FIELD_SIZE];
initialize(field);
int camera_x = hoge();
int camera_z = hage();
float camera_y = field[camera_x][camera_z] + camera_height;
このままだとカメラの移動に応じて高さが一気に変わるから適当に補完とかしる

734 名前:名前は開発中のものです。 :02/09/22 22:05 ID:???
ただ、HightFieldだと広めのマップが表現できない

735 名前:名前は開発中のものです。 :02/09/22 22:19 ID:jVKC+C+L
>>734
そこは頭の使いようだろ?
HightFieldというアルゴリズム自体にはなんの問題も無い。

736 名前:名前は開発中のものです。 :02/09/22 22:29 ID:???
>>729
BSP(Binary Space Partition)と

>地形が盛り上がっているところや凹んでいるところで
>カメラの高さをどのように上げ下げするのか

はあまり関係ないよ。
BSPは空間分割のデータ構造とか探索のアルゴリズムの手法で、
君が求めてるのは多分ポリゴンメッシュとカメラオブジェクトの
当たり判定の話だしょ。

737 名前:名前は開発中のものです。 :02/09/22 22:45 ID:jVKC+C+L
729は平面の式について調べれ。

738 名前:名前は開発中のものです。 :02/09/22 23:03 ID:UA7t4cRe
DirectShowの話題はまだー?

739 名前:名前は開発中のものです。 :02/09/22 23:35 ID:???
>>729
正解などない。
どのようにと聞かれても、地面の起伏に応じてカメラ動かせ
としか答えようがない。君にビジョンがないと話が進まないな。
BPSは今のところ本質的には関係ない。

740 名前:名前は開発中のものです。 :02/09/23 02:48 ID:???
DirectDrawの話題はまだー?

741 名前:名前は開発中のものです。 :02/09/23 03:46 ID:???
>>740
聞いてやるよ、質問は何だ?

742 名前:名前は開発中のものです。 :02/09/23 07:06 ID:???
>>729
皆、小出しだね。そりゃ調べる力も必要だろうが…
漏れのやり方で良いなら、
先ず、ポリゴンは三角形として話を進める。地形は3ポリの集合。
ココで使うのは、平面の方程式、ax+by+cz+d=0って奴。
之を変形して、d=-(ax+by+cz)と考える。
んでカメラが居るポリゴンの位置(XZ平面での)を調べる。カメラで解らないのはY情報なんだから解るでしょ?
ココで其のポリゴンの三頂点のどれでも良いから、一つチョイスする。
その頂点と、他の二つの頂点でベクトルを定義して、外積か何かで法線ベクトルを出す。
そいつを単位化して、各要素をa,b,cとする。次は選んだポリゴンのX,Y,Zをx,y,zとして
d=-(ax+by+cz)の計算をしてdを求める。
こいつの値は変数にでもぶっこんで、値は知らなくても良い。
そして最後に、また変形、y=-(ax+cz+d)/bで考える。
ココでx,y,zはカメラの位置ベクトルの各要素、つまりyが求まる。x,zは解っているので
a,b,cは先程の法線ベクトルを単位化した各要素、dも先程求めた物。
つまりy以外は全て値が出てるよね。
お終い。

743 名前:742 :02/09/23 07:09 ID:???
>次は選んだポリゴンのX,Y,Zをx,y,zとして
間違い。スマソ
次は選んだ頂点のX,Y,Zをx,y,zとして


744 名前:名前は開発中のものです。 :02/09/23 08:20 ID:???
カメラの乗っかってるポリゴンの
3頂点の重み付き平均でいいんじゃないの?


745 名前:名前は開発中のものです。 :02/09/23 08:25 ID:???
>>742
要約してみた。

D3DXIntersect

以上(ワラ

746 名前:名前は開発中のものです。 :02/09/23 09:01 ID:???
D3DXCreateMesh()使って作ったメッシュに頂点情報とか
入れるにはどうすればいいんですか?
またはそれが載っているサンプルを教えて下さい

747 名前:名前は開発中のものです。 :02/09/23 09:56 ID:???
>>746
んなんロックして流し込めばいいだけだ。
つか、教えて君モロ出し系で質問するなら
「物凄い勢いスレ」とか「初心者歓迎スレ」のほうがいい。
ここだといきなり噛み付かれても文句いえねーよ。

748 名前:名前は開発中のものです。 :02/09/23 09:58 ID:???
http://game.2ch.net/test/read.cgi/gamedev/1032098770/
http://game.2ch.net/test/read.cgi/gamedev/1013645518/


749 名前:742 :02/09/24 03:03 ID:???
>>745
そうきましたか…
ココはDirectX板だから関数があれば、それを教えれば良いのかも知れませんが…
処理的に何をやってるのか解らないで、使うってどうなんでしょう?

始めたばかりの時、行列で回転かけるのをRotation関数使わないで
ロックして全頂点をループで自前の行列計算したりってやりませんでした?
用意された関数オンリーな人って、バーテクス、ピクセルシェーダーとか
出来るようには、為ら無いんじゃ…

750 名前: :02/09/24 04:10 ID:???
でも742の方法はイマイチな気がするのはオレだけか?
イチイチ平面の方程式にしないほうがイイんでないか?

xファイルを読み込む。カメラ位置はp0とする(x,zは特定されている)
頂点/インデックスバッファをロックして頂点データp1,p2,p3がまずわかる。
p1+a*(p2-p1)+b*(p3-p1) = p0 をp0のy座標,a,bについて解く
a >= 0 , b >= 0, a+b <= 1 ならそのポリゴン上にあるので求まったp0を採用
ポリゴン上になかったらほかのポリゴンを探す

でいいんでないか?知らんけど

んで、この方法だと毎フレームごとにポリゴンごとに判定しなくちゃイケナイから重い
初歩的な最適化の方法としては、画面をxzのグリッドで分けて、
グリッドごとに衝突する可能性のあるポリゴンのテーブルを作っておく
そーすっと、カメラの属するグリッドのポリゴンでのみ判定すればよくなる。
グリッド間隔は小さいほど効率が上がるがそれだけメモリを消費するんでテキトーに。

あとはアレだ。イチイチ頂点バッファのロックアンロックを繰り返すと重くなりそーなんで
頂点データは必要な部分をコピーしといたほうがいいな。

オレのラベルではこんくらいしか方法は思いつかん。もっとイイ方法があったら教えれ。



■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.