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

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

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

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

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

【C++】 DirectX初心者質問スレ Part21 【C】
http://pc11.2ch.net/test/read.cgi/tech/1229078397/
2デフォルトの名無しさん:2009/02/28(土) 01:42:24
ttp://www1.axfc.net/uploader/File/so/18984.zip

ポリゴンを表示したのですが、
実際に画像を読み込んだサイズで表示できません。
(画像が256x256なら表示も256x256)
どこの設定が悪いのでしょうか?

それと上下左右のキーで1ピクセル単位で動かそうと
しているのですが、こちらも上手くいきません。
どういう風にすれば良いのでしょうか?
3デフォルトの名無しさん:2009/02/28(土) 02:31:15
頂点フォーマットはD3DFVF_XYZRHWってことでいいのかい?
4デフォルトの名無しさん:2009/02/28(土) 07:51:47
ttp://www1.axfc.net/uploader/File/so/18996.zip

>>3
頂点フォーマットはD3DFVF_XYZではダメなのでしょうか?

z の指定がおかしい事に気づき、1ピクセル単位で動かすのは可能になりました。
ただ未だに実際のサイズでの表示が上手くいきません。
現状では256x256の場合は231x231で表示されてしまっています。
5デフォルトの名無しさん:2009/02/28(土) 11:44:28
directx9.0bがインストールされているPCって何年前くらいのですか?
学校のパソコンが全部9.0bなのでD3DX関数を使ったアプリを起動すると
d3dx_xx.dllがありませんと出ます
6デフォルトの名無しさん:2009/02/28(土) 11:50:05
>>4
ポリゴンの位置座標をワールド空間で扱うなら、サイズもワールド空間に変換しないとだめね。
(スクリーン上での幅が、ワールドではいくつになるか計算。)
元々のポリゴンの幅が2.0(-1.0〜1.0)だから、(ワールド幅 / 2.0)倍ね。
D3DXMATRIXA16 matMod;
D3DXVECTOR3 p1, p2;
CalcScreenToWorld(&p1, 0, 0, 0, 640, 480, &matView, &matProj);
CalcScreenToWorld(&p2, 256, 256, 0, 640, 480, &matView, &matProj);
float worldWidth = p2.x - p1.x;
float worldHeight = -(p2.y - p1.y);
D3DXMatrixScaling(&matMod, worldWidth / 2.0f, worldHeight / 2.0f, 1.0f);
matScale = matMod * matScale;
単に等倍表示しただけなら、正射影にすれば、CalcScreenToWorld とかいらなくなるわよ。
D3DXMatrixOrthoOffCenterLH( &matProj, 0, vp.Width, vp.Height, 0, 5.0f, 100.0f );
D3DFVF_XYZRHW でもできるけど、SetTransform とか使えないモードだから注意ね。
7デフォルトの名無しさん:2009/02/28(土) 11:54:19
d3dx9_37.dll
に入っている代表的な関数は何がありますか?
8デフォルトの名無しさん:2009/02/28(土) 12:23:38
関係ない
D3DX関数を使っていると
November2007でコンパイルしている場合d3dx9_37.dllが必要
August2007でコンパイルしている場合
それより後にでているd3dx9_37.dllがあったとしてもダメでd3dx9_35.dllが必要

9デフォルトの名無しさん:2009/02/28(土) 12:43:31
D3DXがスタティックライブラリだった最後のバージョンってOctober2004くらいだっけ?
どうしても気になるならそっち使えばいいんじゃね
10デフォルトの名無しさん:2009/02/28(土) 13:16:10
>>6
拡大率の方にも必要だったのですね、この方法で出来ました。
ありがとうございます。
拡大回転もやりたいので正射影ではダメなんです。

それでもう一点気づいたのですが、
CalcScreenToWorld使ってるとX軸やY軸の回転で、
見えない所が出てしまうんですね…。
スクリーン座標や拡大率を保ったまま回転させて、
画像の全範囲を表示する方法はあるのでしょうか?
11デフォルトの名無しさん:2009/02/28(土) 13:16:59
>>9
December2004もスタティックでいけました。
12デフォルトの名無しさん:2009/02/28(土) 13:55:21
>>10
ポリゴンが欠けるのは、回転した部分がニア平面より手前に来るからね。
CalcScreenToWorld の引数 fZ を それぞれ 0.5f にすればとりあえず直るわよ。
13デフォルトの名無しさん:2009/02/28(土) 14:25:00
>>12
なるほど、0か1かでしか考えてなかったのがダメだったのですね。
本当に何から何まで本当にありがとうございます。
おかげさまで思い通りの挙動をさせる事が出来ました。
14デフォルトの名無しさん:2009/02/28(土) 16:17:58
Y軸回転のみするモデルに穴があり、そこだけヒットを無くし
穴から落ちるような処理を作りたいのですが
当然、穴も回転するのですが
回転後の穴の座標を取得するにはどうすれば良いのでしょうか?
15デフォルトの名無しさん:2009/02/28(土) 16:20:15
すみません、Hitの方法は
16デフォルトの名無しさん:2009/02/28(土) 16:22:56
また間違えて書きこんでしまった……。すいません。

Hitの方法は、Y軸回転のみするモデルはAABBであたり判定を行い
穴の部分は球でのあたり判定を行うつもりです。
2重の当たり判定を行い、穴から落ちるような処理を作ろうとしています。
17デフォルトの名無しさん:2009/02/28(土) 17:37:10
球の中心座標をモデルのローカル座標に直して
モデルと同じ回転行列を掛けるだけじゃ?
1813:2009/02/28(土) 22:20:37
度々すみません。
回転や拡大の中心座標を変えたいのですが、
ポリゴンの場合どの部分がそれに当たるのでしょうか?
19デフォルトの名無しさん:2009/02/28(土) 22:29:32
>>16は解決したわけ?
2013:2009/02/28(土) 22:40:39
>>19
一応念の為、>>16は私ではないです。
21デフォルトの名無しさん:2009/02/28(土) 23:30:05
0が中心位置
22デフォルトの名無しさん:2009/03/01(日) 09:52:34
>>19
返事が遅れました。申し訳ありません。

>モデルのローカル座標に直して
という意味がわかりません……。
しかし回転、移動の変換行列をかけてみたら解決できました。
ありがとうございます!


もうひとつ質問なのですが、
この場合って、モデルのローカル座標の実際の数値を調べて、
中心位置を出さなければなりませんが、
他にスマートな方法はあるのでしょうか?
あたり判定用のモデルを読み込むとかですかね?
23デフォルトの名無しさん:2009/03/01(日) 10:10:35
データの中身をみないで結果が割り出せるとは、どんな魔法のことだ?
24デフォルトの名無しさん:2009/03/01(日) 11:53:16
モデルを作った人間ならどこが中心かなんか分かるだろう
もしくは、この位置に穴を開けてくれとプログラマーがデザイナーに頼むもの
25デフォルトの名無しさん:2009/03/01(日) 14:53:06
二つあるマトリクスから、その二つの回転角度を得るのってどういう計算すれば取る事出来ますか?
スケールはないものと考えます。
宜しくお願い致します。
26デフォルトの名無しさん:2009/03/01(日) 14:57:16
二つのベクトルが成す角度の求め方なら昔高校でやったような気がするけど思い出せない……
27デフォルトの名無しさん:2009/03/01(日) 15:56:10
>>25
// 行列が2つあるとしたら
D3DXMATRIX m, n;
D3DXMatrixRotationY(&m, D3DXToRadian(20));
D3DXMatrixRotationY(&n, D3DXToRadian(50));
// m から n への回転行列 ( inv(m)*n ) を作って、
D3DXMATRIX im, imn;
D3DXMatrixInverse(&im, NULL, &m);
imn = im * n;
// それをクォータニオンに変換して
D3DXQUATERNION q;
D3DXQuaternionRotationMatrix(&q, &imn);
// 回転角を求めれば終わり。
D3DXVECTOR3 axis;
float angle;
D3DXQuaternionToAxisAngle(&q, &axis, &angle);

angle = D3DXToDegree(angle); // ほぼ30ね。
2827:2009/03/01(日) 17:27:43
というか、m,nをそれぞれクォータニオンにした方が速いわね。
D3DXMATRIX m, n;
D3DXMatrixRotationY(&m, D3DXToRadian(20));
D3DXMatrixRotationY(&n, D3DXToRadian(50));

D3DXQUATERNION qm, qim, qn;
D3DXQuaternionRotationMatrix(&qm, &m);
D3DXQuaternionRotationMatrix(&qn, &n);
D3DXQuaternionInverse(&qim, &qm);
D3DXQuaternionMultiply(&q, &qim, &qn);

D3DXVECTOR3 axis;
float angle;
D3DXQuaternionToAxisAngle(&q, &axis, &angle);
angle = D3DXToDegree(angle);
2925:2009/03/01(日) 21:24:13
>>27
有難う御座います。
30デフォルトの名無しさん:2009/03/01(日) 22:56:49
DirectMusicでBGMを流すと同時に効果音を鳴らすってできますか?
今やっているのですがどうも片方しかできなくて。。。
31デフォルトの名無しさん:2009/03/01(日) 23:03:18
HRESULT CDXMusic::PlayMusic(DWORD index)
{
// 演奏中であれば戻る
if(m_performance->IsPlaying(m_segment[index], NULL) == S_OK) {
return E_FAIL;
}

m_performance->PlaySegmentEx(m_segment[index], NULL, NULL, 0, 0, NULL, NULL, NULL);

return S_OK;
}

楽曲を3つ読み込ませて再生させているのですが
1を再生中に2を再生すると1が消えてしまいます

原因エスパーしてもらえませんか;;
32デフォルトの名無しさん:2009/03/01(日) 23:16:13
何故まずヘルプを読まない?
使い方を確認しない?
33デフォルトの名無しさん:2009/03/01(日) 23:42:15
すみませんヘルプ読みました

要するにDirectMusicは

プライマリ セグメントは、一度に 1 つだけ演奏できる。再生のためにプライマリ セグメントを挿入するときは、演奏中のセグメントが終わった後でそのセグメントを演奏するように指定したり、現在のプライマリ セグメントを置き換えたりすることができる。

一方、セカンダリ セグメントは現在のプライマリ セグメント上で演奏され、任意の数のセカンダリ セグメントを同時に演奏できる。

DirectSoundはDirectMusicみたいにしなくても普通に同時に再生できるってことでしょうか?
(入力フォーカスが移動する際に、アプリケーションはバッファの再生と停止を繰り返す必要はない。)
34デフォルトの名無しさん:2009/03/02(月) 06:50:45
>>33
DirectSoundは波形を直截保持しているからDierectMusicのように面倒なことをしなくても
同時に再生できるよ。
35デフォルトの名無しさん:2009/03/02(月) 11:17:18
HLSLでシェーダを書いているのですが、このポリゴンを「加算合成」するのか「半透明描画するのか」はシェーダ側では決められないのでしょうか?

ついで
>>9>>11
スタティックな頃には、Xファイル周りで致命的なバグがあるのでやめたほうがいいです
でかいXファイルを読むとメモリー破壊されます(DirectX付属のサンプルソースですら)
36デフォルトの名無しさん:2009/03/02(月) 12:04:45
>>35
頂点単位で?それともテクニック単位で?
37デフォルトの名無しさん:2009/03/02(月) 13:26:09
>>36
お返事ありがとうございます。
どちらでも構いません。
できれば双方教えていただいてよいでしょうか?
38デフォルトの名無しさん:2009/03/03(火) 08:50:33
s
39デフォルトの名無しさん:2009/03/03(火) 09:03:47
DirectMusicでoggファイルを複数同時再生する所まで成功しました
テストでDirectMusicクラス(oggをwaveに変換してDirectMusicで再生)を
統括しているクラスをコンストラクタ・デストラクタを繰り返していたのですが、
20回に1度くらいの割合でデストラクタ時に落ちてしまいます
デバックしたのですが
http://appleloader.bbsnow.net/pic_loader/nomal/html/1_12.html
のような結果が出て調べたのですがお手上げです・・・

ソース上げたのでよろしければ見ていただけませんか
http://www7.uploader.jp/dl/inoguma/inoguma_uljp00003.zip.html
GameLib.h
_Lib_DXMusic.cpp
GameTitle.cpp
に書いてあると思います

よろしくお願いします
4035:2009/03/03(火) 11:57:44
昨日から>>35の件について探し回っているのですが、それっぽいものが一向に見つかりません。
どなたかわかる方いらっしゃいましたら、アドバイスお願いいたします
41デフォルトの名無しさん:2009/03/03(火) 12:52:25
テクニック内でレンダリングステートを変更して
半透明用テクニック、加算合成用テクニックを作るとかじゃだめなの?
42デフォルトの名無しさん:2009/03/03(火) 13:20:39
>>41
お返事ありがとうございます。

HLSLのテクニック定義の部分でレンダリングステートが変更できるのですか?
その方法が、まさに知りたかったものだと思われます。

technique Test
{
pass P0
{
VertexShader = (vsTexture);
PixelShader = (psTexture);
}
pass P1
{
VertexShader = (vsNoTexture);
PixelShader = (psNoTexture);
}
}

現状こんな書き方なのですが、レンダリングステートを書き換える記述法(が書いてあるMSDNのページとかでもいいです)を教えていただけないでしょうか。
よろしくお願いします
43デフォルトの名無しさん:2009/03/03(火) 13:23:26
失礼しました。>>42です。

テクニック内でやればいいんじゃないか?というのをヒントにしてMSDNを
探し回ったところ、即座に
http://msdn.microsoft.com/ja-jp/library/cc373171.aspx#
こういうページを発見することができました。

ありがとうございました。
44デフォルトの名無しさん:2009/03/03(火) 14:06:19
http://msdn.microsoft.com/ja-jp/library/cc372280.aspx

自分もその辺やろうとしてたんで探してみたけど、これとか?
45デフォルトの名無しさん:2009/03/03(火) 15:41:42
>>44
素晴らしい、それでそれです。
一覧表がないなーと思いながら、C#版とかで「どうやらC#版の設定プロパティと名前が一緒らしいな」とか推測しながらいじってましたw

これで、描画周りが完全にプログラムから切り離せました。
嬉しい。
46デフォルトの名無しさん:2009/03/03(火) 16:24:45
(MDXとXNAは過疎化が酷いのでこちらで質問させてください。)

MDXを勉強中のプログラマ(C++/C#)です。今は土日の趣味でやってます。
MDXは情報が少ないため、UnmanagedかXNAに移行を考えていまが以下の点で悩んでいます。

Unmanage C++がめんどい
XNA フレームワーク導入めんどい

出来ればMDX2.0リリースか、XNAがOS標準搭載にならないかと・・・
Xbox用途以外ではUnmanagedに進むのが妥当なのでしょうか?
同じような経験された方、最終的にどうされましたか?
47デフォルトの名無しさん:2009/03/03(火) 16:28:09
いや、Unmanagedの話ばっかりしてるここで聞かれてもw
別によっぽどカリカリにチューンしたゲームを作りたいってことでもなきゃ、XNAでいいんじゃない?

ただ、それを不特定多数に売ったり、配ったりするつもりなら、XNAの実行環境のインスコを促すのは敷居がかなり高いとだけ。
4846:2009/03/03(火) 16:37:06
>>47
早々のレスどうもです。
やっぱりXNAは敷居高いですよね。OSというかDirectXに標準搭載されれば敷居が低いのですが・・・

どうもありがとうございます。自分もUnmanaged方針に変えます。
49デフォルトの名無しさん:2009/03/03(火) 20:56:10
両方やればいいんだよ
楽しいぞ
5046:2009/03/03(火) 21:39:14
>>49
いや〜個人的にはそうなんですよね。C++/CLIでUnmanaged。

ただ、将来的に業務用ツール用にDirectX検討しているんですが、
フレームワーク導入は敷居が・・・(.net or vistaですら厳しい!DirectXって何って感じです。)
元Javaな人にはC#しか・・・

なんでもないです。愚痴ってすいません。

51デフォルトの名無しさん:2009/03/03(火) 23:19:32
俺もツール作っててインタフェースはDirectXだけど、C#+MDXでやってる。
MDX自体は情報少ないけど、DirectX/C++からの脳内翻訳が効くし、
メモリリーク云々を考えるとマネージは外せないという結論に至った。

どうしても情報が無くて困った時はグーグルのコードサーチを使うといいよ。
web検索で2件とかしかでてこないような情報でもそれを使用したソースが
ズバリでてくる。ただライセンスには注意な。
5246:2009/03/03(火) 23:30:31
>>51
レスサンクスです。
私も苦労の末(?)Unmaged脳内変換が出来るようになりました。
たいていは同じような書き方なのでなんとか。ほんと無駄な技術。
メモリリーク面倒ですよね。やっぱりC#楽ですよね・・・
ありがとうございます。けど10&11を見据えてUnmanagedがんがります。
53デフォルトの名無しさん:2009/03/04(水) 00:52:59
そういえば.NETのコードは逆コンパイルできるから気を付けないといけない
ネットで見つけてきたコードは高確率で訴訟用に公開してる。このへんは誰でも気づくんだけど
注意しなきゃいけないのは元コードを自演転用で無料公開してる場合があるということ
54デフォルトの名無しさん:2009/03/04(水) 07:56:15
>>52
メモリリークなんて起きるときは大抵どっかがおかしい
おかしいのに無理に進むと余計におかしくなる
別にメモリリークを解決してくれてるわけじゃなくて
単に落ちないだけだろ
55デフォルトの名無しさん:2009/03/04(水) 08:11:47
c#はusingで破棄してくれから便利。
56デフォルトの名無しさん:2009/03/04(水) 09:17:40
>>52
ちょっとDirectXと離れるかもしれんが
shared_ptr
CComPtr
を使った上でメモリーリークするのか?
この2つを使えば、メモリーリークなんて(循環参照くらいしか)ないだろう。

もし何かミスって出したとしても、DirectXまわりはデバッガがリーク量を丁寧に出してくれるし
通常のメモリーについても
http://marupeke296.com/TIPS_No7_SearchMemoryLeak.html
これで超簡単表示

C++はメモリー管理が〜とかいう人のほとんどは、shared_ptrとかそういうほぼ標準ともいわれているライブラリ群を知らないだけに思える
57デフォルトの名無しさん:2009/03/04(水) 09:28:19
>>56
ほぼ標準と標準の間には大きな隔たりがあるんだぜ。
まずboostのインストールをしなきゃならん。
58デフォルトの名無しさん:2009/03/04(水) 09:40:03
boostのインスコって、いまや公式いってEXEファイルDLしてきて、ダブルクリックすれば設定含めて全部終わるんだぜ
それが嫌だとしても、shared_ptrもCComPtrもテンプレートだから、単体ヘッダファイルを持ってきてincludeすればおしまい

もちろん標準とほぼ標準には雲泥の差があるが、リークが嫌なら5分くらいの手間はかけようよw
59デフォルトの名無しさん:2009/03/04(水) 10:06:08
リークする貧相なプログラム技術を放置したままのほうがよっぽど危ない。
shared_ptrも万能ではないしまずはリークの検出修正が出来るように腕の磨くべき。

主観的にはboostみたいな非標準のものは出来る人間が楽をするために使うべきだと思う。
60デフォルトの名無しさん:2009/03/04(水) 11:28:15
>> 39
oggをwaveに変換してセカンダリバッファにデータに渡したあと
一時的なデータを保持していた変数をSAFE_DELETE()してないからメモリがスタックしてるんじゃないか?
61デフォルトの名無しさん:2009/03/04(水) 11:48:56
>>59みたいな人間が、C++使いとして恥ずかしいです…。
そんな「C++を使いたいなら、まずは基礎力をもっとつけろやwwww」みたいな排他的な姿勢はアホくさい。

C++自体、メモリーリークするわ、GCないわ、スレッドが言語標準じゃないわと「今どきの言語」に比べたら貧弱。
継承されるクラスのデストラクタにはvirtualをつけるのがお約束!なんていうくだらない「お約束」も大量にある。
それを「使う人間の基礎力が〜」とかに転嫁してどーする
62デフォルトの名無しさん:2009/03/04(水) 11:52:15
ここ質スレなのにすぐスレ違いの自己主張を始めるやつが現れるよな
63デフォルトの名無しさん:2009/03/04(水) 11:58:48
初心者スレで、初心者に「お前のプログラム技術が貧弱だからだ」とか言っちゃうんだもんな
それともDirectXのみ初心者で、プログラム技術自体は高い人間しか質問しちゃいけないのかっていう
64デフォルトの名無しさん:2009/03/04(水) 12:10:35
だったらお前のスタンスで好きに回答しろ。
ただし別のスタンスで回答する奴もいる。
いちいち噛み付いて迷惑するのは質問者なんだよ。
65デフォルトの名無しさん:2009/03/04(水) 12:11:36
言語なんか個人の自由
技量が無いなら使い手側に何のメリット無い、より高水準な言語を使っていればいい
66デフォルトの名無しさん:2009/03/04(水) 12:27:34
Direct3Dにスプライトなど無い
67デフォルトの名無しさん:2009/03/04(水) 12:39:17
つまらん!
お前の話はつまらん!!
68デフォルトの名無しさん:2009/03/04(水) 12:54:51
カーソルの移動量を調べたいんだけど
APIの機能でカーソルの位置を調べて前のフレームとの差を取る方法だとカーソルが画面の端に来た時に移動しなくなって困るので
DirectInputを使おうと思ってるんですが、これAPIでは解決できませんか?
69デフォルトの名無しさん:2009/03/04(水) 14:13:01
カーソルの絶対座標はどうでもいいのか?
1フレームごとにSetCursorPosで画面の真ん中に移動させれば大体の用は果たすと思うが。
70デフォルトの名無しさん:2009/03/04(水) 14:27:34
>>69
ありがとうございます
その方法でやってみます
71デフォルトの名無しさん:2009/03/04(水) 14:37:06
http://toruweb.web.fc2.com/dm/2.html

このサイトにあるDirectMusicによるogg再生のプログラムで
oggからwaveに変換した後セカンダリバッファに書き込むのですが

MidiとWaveの再生 / 終了処理と同じ処理をし、確保したメモリを解放します。

/* #define SAFE_RELEASE(p) if(p){p->Release();p=NULL;} */
SAFE_DELETE( lpWaveData );

とあるのですが
waveに変換してセカンダリバッファに書き込んだ後SAFE_DELETE()ではいけないのですか?

実際になってみたら落ちました
72デフォルトの名無しさん:2009/03/04(水) 14:38:14
訂正:実際に書き込んだ後すぐにSAFE_DELETE()したら落ちました
73デフォルトの名無しさん:2009/03/04(水) 15:41:08
ぶっちゃけストリーミング再生実装しないと
容量多いファイル再生すると落ちるよ・・・

そんなんも知らないの?
74デフォルトの名無しさん:2009/03/04(水) 16:10:40
ソース
75デフォルトの名無しさん:2009/03/04(水) 16:20:42
GPUを使ってサウンドエンジンを作るってどうやるの?
76デフォルトの名無しさん:2009/03/04(水) 20:42:11
fxc.exeを使ってfxファイルをデバッグしてるんですが、コマンドプロンプトが使いにくいです。
このスレの方々はどうやってますか?
77デフォルトの名無しさん:2009/03/04(水) 21:03:05
ttp://msdn.microsoft.com/ja-jp/library/dd188551.aspx
このEffectEditに相当するツールが、最新のSDKには入っていない気がするのですが
別名になって存在するのでしょうか?
それとも古いSDKからもってこないとダメでしょうか?
7846:2009/03/04(水) 23:09:18
46です。

皆さん色々アドバイスありがとうございます。
Boostとか非標準は会社での導入は難しいですね・・・規約を含めた運用変えるのに年単位でかかります。
個人ならOKでも、チームや部門では色々大変なのです。
9x,NT->2000,XP->2003sとかですでにてんやわんやなんで。
(ある程度の規模の会社はどこも同じとおもいますがw)
もしかして純粋なソフトウェアハウスさんなら違うのかな?
CComPtrは知らなかったので調べてみます。

激しくスレチになるでこれで失礼します!
今日は雪がまた降って大変でした。
79デフォルトの名無しさん:2009/03/04(水) 23:35:08
DirectXを使ったゲームを作るのに初心者(BCBで簡単なアプリが作れる程度)にとって最適な開発環境って何ですか?
VCとかVBとかBCBとか。
80デフォルトの名無しさん:2009/03/04(水) 23:38:10
VC+イルリヒト
81デフォルトの名無しさん:2009/03/04(水) 23:55:52
VC++ですか?>>80

値段的にもランクがあると思うんだけど、なんでも大丈夫かな?
高いのは購入できないので。
82デフォルトの名無しさん:2009/03/05(木) 00:01:02
>>21
その 0 が頂点なのだと理解するのに時間がかかりました。
教えて下さりありがとうございます。

http://www1.axfc.net/uploader/File/so/19255.zip

それでまた質問なのですが、
分割した画像をポリゴンで並べたら境目が出来てしまいました。
これを綺麗に表示するにはどうしたら良いのでしょうか?
83デフォルトの名無しさん:2009/03/05(木) 00:23:30
>>81
Express editionでぐぐれ。 無料版がある。
つーかBCBは今となっては古いマイナー標準準拠度悪の三重苦なので、
DirectX抜きにしてもさっさとVCに乗り換えた方がいい。

ちなみに言語にこだわらないならたぶんC#とかの.NET系言語から呼び出す方が楽だと思う。
84デフォルトの名無しさん:2009/03/05(木) 00:29:49
>>83
.NETって作ったアプリをインストールする環境にもフレームワークのインストールが必要ですよね?
ランタイムは極力不要な状態にしたいんだけどC#も似たような感じかな?

BCBはダメなのか。扱いやすいから気に入ってたんだけど残念。
85デフォルトの名無しさん:2009/03/05(木) 00:34:21
>>82
テクスチャフィルタが掛けてあるから縁にアンチエイリアスがかかってる
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_POINT );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
としてフィルターを切るか
これだと拡大時に画像が荒くなるののでそれが嫌なら元画像にもよるけど
テクスチャアドレッシングモードを
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );
とすれば消えるかもしれない
プロジェクトが入ってないからコンパイルしてないので結果は自分で見てね
86デフォルトの名無しさん:2009/03/05(木) 00:47:34
>>85
こんな方法があったとは…、まさにビンゴです。
テクスチャの端を使わなかったり色々やってみたのですが、
上手くいかなかったので本当に助かりました。
87デフォルトの名無しさん:2009/03/05(木) 03:31:51
プロジェクトを入れないならソースの頭に

#pragma comment( lib, "dxerr.lib" )
#pragma comment( lib, "dxguid.lib" )
#pragma comment( lib, "d3d9.lib" )
#if defined(DEBUG) || defined(_DEBUG)
#pragma comment( lib, "d3dx9d.lib" )
#else
#pragma comment( lib, "d3dx9.lib" )
#endif
#pragma comment( lib, "winmm.lib" )

と入れとくと見てくれる率があがるかもしれない
88デフォルトの名無しさん:2009/03/06(金) 00:14:30
DirectX9.0SDKの最新を使ってPixelShader1.1などを使おうとすると、
ps_1_x is no longer supported
というエラーが出てしまいます。

DirectX9.0ではすでにps1.xがサポート外になっているのは知っているのですが、
作っているゲームは古いグラボでも動けるようにしたいものです。

この場合、
PixelShader = compile ps_2_0
と書いたHLSLファイルと
PixelShader = compile ps_1_1
と書いたHLSLファイルを両方用意しておかなければならないのでしょうか?
89デフォルトの名無しさん:2009/03/06(金) 00:46:44
古いので動かしたいならシェーダーを使わないのが正解だろう。
90デフォルトの名無しさん:2009/03/06(金) 01:10:12
ID3D10EffectPass::GetDesc(pDesc)
でE_FAILが返り、pDescに何も代入されずに返ってきます。
この場合どういう原因が考えられるでしょうか?
91デフォルトの名無しさん:2009/03/06(金) 01:17:48
>>88
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
9290:2009/03/06(金) 01:49:17
D3DX10CreateEffectFromFile()でFXファイルを読み込んで、ID3D10Effectを作りました。ここではS_OKが
返ってます。その後D3D10_EFFECT_DESCを取得して中身をみてみると全てのメンバーが0でした。FXファイルを
fxc.exeでコンパイルしてみると、mainエントリーがないといわれます。なので文法的には問題ないと
おもっているのですが、、
こういう場合どうすればよいでしょうか?
93デフォルトの名無しさん:2009/03/06(金) 01:52:12
なんか.xのアニメーションってやけにむずかしくね?
9490:2009/03/06(金) 02:36:10
一応解決したようです。
FXファイルのエンコーディングに原因があったようなのですが、よくわかりませんでした。
同じ内容のFXファイルを用意して、日本語のコメントを全部消してセーブして読み込ませたところ
問題なく動作しました。それまでは日本語のコメントが山ほど入っており、それをセーブする際には
ユニコードでセーブするか?と聞かれてYESを選択してました。
これからはFXファイルに日本語コメントを使わないようにしようと思いますが、いったんFXファイルを
ユニコードでセーブした後変更する方法が分からないのと、いまいちなにが問題なのか良く分からないので、
どなたか理由がわかる方いらっしゃったら教えてください。
ありがとうございました。
95デフォルトの名無しさん:2009/03/06(金) 10:01:27
日本語コメントなんて普通に使ってるが・・・
96デフォルトの名無しさん:2009/03/06(金) 11:57:28
全角空白じゃね?
97デフォルトの名無しさん:2009/03/06(金) 14:16:20
98デフォルトの名無しさん:2009/03/06(金) 14:18:41
97の誤爆失礼しました。

>>91
ありがとうございました。
情報があまりになく、英語MSDNまで調べにいくことになりました。日本語MSDNにすらのってないですね。

これを考えると、常に「なるべく最新のPS、VSとしてコンパイルしたい」という気がしますね。
同じコードでも、ps11としてコンパイルするのと、ps20としてコンパイルするのでは吐かれたコードの効率が違いましたし。
そういうオプションもないかな?と思い探してみましたが、無いようです。

みなさんはVS20, PS20の決め打ちでHLSLを書いているのでしょうか?
99デフォルトの名無しさん:2009/03/07(土) 02:22:42
DirectX10のコードを書いているのですが、ウィンドウのクライアント領域を全く
なくしてしまうと
Device->ClearDepthStencilView()
というコードが例外を出します。ID3D10DepthStencilViewをReleaseしようとしても
だめなようです。ID3D10DepthStencilViewをReleaseする前にチェックしないとだめなことって
どんなことがあるでしょうか?


100デフォルトの名無しさん:2009/03/07(土) 02:28:10
ものすごく簡単な事だったらすいません。
家のパソコンはネットにつながっていないのですが、
買ってきたゲームがDirectX9以上が必要と書いてありました。
漫画喫茶で落としてインストールしようと思ったんですができません。
何か方法ありますか?
101デフォルトの名無しさん:2009/03/07(土) 02:46:13
>>100
スレ違い
通常のインストーラはWebインストーラなので
DirectX End-User Runtimes (November 2008)を漫画喫茶で落として来い
もう二度と来るなよ
102デフォルトの名無しさん:2009/03/07(土) 02:46:36
方法あります
本体をおとしてください
103デフォルトの名無しさん:2009/03/07(土) 05:41:09
Xファイルのアニメーションについて詳しく書かれてるサイトある?
104デフォルトの名無しさん:2009/03/07(土) 09:53:28
MSDNのサイトに書かれています
105デフォルトの名無しさん:2009/03/07(土) 10:07:31
理論だけならまるぺけが詳しい
ただしソースは無い(あるけど記事に沿ったものはない)
そこを読みながら
結局SDKのサンプルのSkinnedMeshを1ステップずつデバックしながら
どこで何をやってるのか地道に理解するのが一番の早道
106デフォルトの名無しさん:2009/03/07(土) 11:15:44
お手軽に動くソースを欲しがるから難しく感じるんだよ
どの順番でどの変数に何が読み込まれているのかをじっくり追っていけば
そんなに難しいもんじゃない
107デフォルトの名無しさん:2009/03/07(土) 12:11:27
HLSLについてなんですが、固定シェーダ機能のアルファ設定を

AlphaBlendEnable = TRUE;
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;

このようにした場合、色成分はアルファ値に応じた混合がなされるのは分かるのですが、
混合結果後のアルファチャンネルの値はどのようになるのでしょうか?

現在のレンダリング結果に対し、過去のレンダリング結果の蓄積をアルファ合成し続ける
フィードバックエフェクト(残像っぽくなるやつで過去のアルファ値は0.5f〜0.9f)をしていると、
もともとがアルファ値1.0fのピクセル同士の混合後のアルファ値が1.0fではなく、少し低くなって
0.8fかそこらへんに下がってしまい、若干暗い絵になってしまいます。
108デフォルトの名無しさん:2009/03/07(土) 12:39:48
α値がどうなるかはSetTextureStageState()で設定したとおりになる。
109107:2009/03/07(土) 13:11:59
>>108
アプリ側で設定してやるんですね。
ありがとうございました。
110デフォルトの名無しさん:2009/03/08(日) 15:36:04
とあるゲーム作成の参考書どおりに設定を行ったところ

1>LINK : fatal error LNK1104: ファイル 'd3dx9.lib' を開くことができません。


といったエラーが表示されます
サブシステムのパスは通しています

・インクルードファイル
C:\Program Files\Microsoft DirectX SDK (April 2007)\Include
C:\Program Files\Microsoft Platform SDK\Include
・ライブラリファイル
C:\Program Files\Microsoft DirectX SDK (April 2007)\Lib
C:\Program Files\Microsoft Platform SDK\Lib

ちなみにApril 2007となっているのは雑誌と同様にしているからです
111デフォルトの名無しさん:2009/03/08(日) 15:40:21
>>110
実際にそのフォルダ見てみればいいじゃない。
環境によるかもしれないが、その下にx86って無いか?
112デフォルトの名無しさん:2009/03/08(日) 16:09:55
ちょっと質問です。

Microsoft DirectX SDK (November 2008)、DirectX9 を使って開発を行っています。
ところで、作ったアプリを動かすための必要環境を、「9.0c 以上」 ではなく 「9.0 以上」 まで下げたいのです。
どうすればこのアプリは、確実に 「必要環境: 9.0 以上」 と言えるようになるのでしょうか?

たとえば、ピクセルシェーダ 3.0 を使ってしまうと 9.0c が必須になりそうなので 2.0 を使ったり、などはしています。
ですが、他の機能となると、どこまで使っていいのかが分かりません…。
SDK のバージョンを落とせばいいのかな?とも思ったのですが、どこまで落とせばいいのかも分からないし、
古すぎる SDK は簡単には手に入らないので、これも何か違っている気がします。

よろしくお願いします。
113デフォルトの名無しさん:2009/03/08(日) 16:12:34
PS2.0でも9.0cが必須なんだが・・・。
114デフォルトの名無しさん:2009/03/08(日) 16:58:27
ぶっちゃけ、古いSDKで開発するしかない
探せば簡単に見つかる
115デフォルトの名無しさん:2009/03/08(日) 16:59:45
DirectX7お勧め。
116デフォルトの名無しさん:2009/03/08(日) 17:21:49
古い SDK しかないですか…それっぽいのが見つかったので試してみます。
ありがとうございました。
117デフォルトの名無しさん:2009/03/08(日) 17:33:12
みんな、Microsoft DirectX SDK (November 2008)のNovember 2008の部分が違うものを
3つも4つもインストールしてるんだぜ・・・
118デフォルトの名無しさん:2009/03/08(日) 17:34:55
それ以前にどのOSとSPが、DirectXの下限バージョンなのかきちんと調べたのか?
ターゲットOSを明確にした上での選択なのか甚だ疑問。
119デフォルトの名無しさん:2009/03/08(日) 17:44:06
つーかDirectX9世代なら気にせずwebインストーラー添付して「入れてね☆」とか出しとけばいい。
下のサポートを考慮するならDirectX7やDirectX8を考慮するべし。
120デフォルトの名無しさん:2009/03/08(日) 18:02:25
DirectX9cならインストーラなど付けなくても、
WindowsXPのSP2以降と明記しておけばいいだけ。
それ以前なら既にセキュリティパッチが打ち止めになっていて、
SPすら入れない奴をそもそもサポートする必要性もない。
121デフォルトの名無しさん:2009/03/08(日) 18:31:22
こんにちは、識者の方々、哀れな初心者をお助けください。
<聞きたいこと>
環境によって、表示される画像が1ドット多く表示される32ピクセル表示する命令なのに、33ピクセル表示される感じ。
なぜ、これがおこるのか?
この現象の回避方法は?

<詳細>
Vistaで2Dゲームを作成しています。
512×512のビットマップのうち、座標(0,0)から32×32のサイズの部分が画面の背景で、その32×32のサイズを画面に繰り返し描画しています。
開発マシン(Vista:解像度1280×800)では正常に表示されますがテストマシン(XP:解像度1024×768)で表示すると1ピクセル余計に画像が表示されていてしまいます。

開発はDiretX9で、表示はID3DXSprite::Drawでおこなっています。
下みたいな感じ
g_pSprite->Begin();
g_pSprite->Draw(pTexture,
&rect, //表示範囲
&D3DXVECTOR2(scale_x,scale_y), //拡大率
NULL,g_rotation, //回転
&D3DXVECTOR2(F(x),F(y)),
D3DCOLOR_XRGB(255,255,255)
);
g_pSprite->End();
変数とかは察してください(笑)
もし、なにかお分かりの方がいらっしゃれば、ぜひ、ご教授願います。よろしくお願います m(..)m
122デフォルトの名無しさん:2009/03/08(日) 18:43:42
まずそれ以前に、SDKのヘルプに乗っているチュートリアルはすべて終わらせたのか?
123112:2009/03/08(日) 18:53:21
いろいろとご指摘ありがとうございます。

諸事情で DirectX9 は是非使いたいのです。
Windows2000 以降対応にしたいのですが、2000 には初期状態で 7.0 しか入っていないので、DirectX のインストーラは同梱させる予定です。
ただ、2000 には 9.0c はインストールできないと聞いたことがあるので、9.0 で動くようにしたかったのです。
このあたりの情報は検索してもなかなか見つからなくて…正直自信ないです。
124121:2009/03/08(日) 19:02:06
>112
一応みました。
ぐぐったりもしましたが、原因が分からず
質問させていただきました
125デフォルトの名無しさん:2009/03/08(日) 19:16:47
>>123
9.0cは2000どころかD3DXのバージョンによっては98SEとかでも動くんだが。
126デフォルトの名無しさん:2009/03/08(日) 20:52:46
2000でインストールできないってそれ割れOSなんじゃないの?
2kのは大分出回ったみたいだし
127デフォルトの名無しさん:2009/03/08(日) 20:56:59
>>124
見るんじゃなく、一つ一つ動かして動作を確認しろ。
話はそれからだ。
128121:2009/03/08(日) 22:07:38
>127
ひとつだけ、教えてください。
わたしが、示したコードはおかしなところがありますか?

わたしはおかしくないつもりだったのですが、
わたしのコードがおかしいから、動作を確認しろと
アドバイスをいただいているのかどうか、気になっています。
129デフォルトの名無しさん:2009/03/08(日) 22:44:49
1部じゃなくて全ソース晒して方がはやそう
たぶん描画部分以外の問題の希ガス
あとID3DXSpriteは内部でレンダリングステートや
テクスチャーステージを勝手に変更してたりするから実際に見ないとたぶん分からん
130デフォルトの名無しさん:2009/03/09(月) 00:50:29
>>111
ありがとう
131デフォルトの名無しさん:2009/03/09(月) 01:21:33
>>128
スクリーンショットとって大きさ計ってみた?
132121:2009/03/09(月) 10:12:40
みなさんアドレスありがとうございます。

>129
勝手にサイズを変えるんですか、なるほどです。
今出先でソース晒せないので家に帰ったら晒します

>131
いいえ、計っていません。こちらも家に帰ってから計ってみます!
133121:2009/03/09(月) 11:33:40
>>132
一言もサイズとは書いてないですね
勘違いしました
すみません。
134デフォルトの名無しさん:2009/03/09(月) 11:42:40
なんつーか、FILTERをLINEARにしてましたとかいうオチじゃなかろうな・・・?
135デフォルトの名無しさん:2009/03/09(月) 11:51:02
ブレンドステートってどういうときに使いますか?
いまいち用途がわかりません。
136デフォルトの名無しさん:2009/03/09(月) 11:52:59
αブレンドするときに使います。
137デフォルトの名無しさん:2009/03/09(月) 11:54:55
ありがとうございます。
αブレンドと言われても全然わからない自分は、まだまた勉強不足ということですね。
138デフォルトの名無しさん:2009/03/09(月) 12:01:01
まだまだというより、これから勉強始めるところじゃないの?
139デフォルトの名無しさん:2009/03/09(月) 17:23:53
2Dのゲームプログラムを組んでます。

画面全体を揺らすプログラムを組みたいんですが、そういうサンプル無いでしょうか。
このAPI使えるよとかでも構いません。

表示してるテクスチャをすべて同時に動かすぐらいしか思い付かなかったんですが、
皆さんどんな感じで実装してるんでしょうか。
ドラクエでダメージを受けると画面が揺れますが、あんなかんじの演出を考えてます。

よろしくお願いしますm(__)mペコ
140デフォルトの名無しさん:2009/03/09(月) 17:29:39
>>139
ウィンドー全体を揺らしちゃえよ
フルスクリーンでは無理だが
141デフォルトの名無しさん:2009/03/09(月) 18:30:36
>>140

回答ありがとうございます。なるほど!参考になります。
フルスクリーンは、、、そうっすね。
142デフォルトの名無しさん:2009/03/09(月) 21:10:29
>>140
バックバッファの内容全体を揺らせばいいんじゃないの?フルスクリーンとかも関係ないじゃん。
143デフォルトの名無しさん:2009/03/09(月) 21:16:24
2D系でしょ
表示してるテクスチャをすべて同時に動かすでいいんじゃね?
144デフォルトの名無しさん:2009/03/09(月) 22:23:06
いちばん簡単なのはテクスチャに描画してテクスチャを動かす方法だろ
他のエフェクトと兼用できるし
145デフォルトの名無しさん:2009/03/09(月) 22:27:24
テクスチャーに描画するとき、サンプリングが利かなくなるからしょぼくなる
146デフォルトの名無しさん:2009/03/09(月) 23:55:19
いや普通に利くだろ・・・
147デフォルトの名無しさん:2009/03/09(月) 23:59:28
ドラクエでダメージ受けて画面揺れるのってステータスや文字表示部分だけだろ
そういう処理やりたいなら全体をまとめて揺らすよりも、個別で表示位置変える方が融通効くんじゃないの?
逆に文字だけは揺らしたくないとかってケースもあると思うけど
148121:2009/03/10(火) 00:12:18
とりあえず、先にスクリーンショットの報告です。

スクリーンショット撮ってサイズを測ってみました。
結果、サイズ自体はただしかったです。

つまり、正しく32ピクセル表示しているのに
画像のサイズが少し小さくなって、33ピクセル分
表示されている感じでした。

テクスチャをロードした時に、すこし小さくなっているのでしょうか・・??
149デフォルトの名無しさん:2009/03/10(火) 00:15:53
フィルタリングの設定見直せ
150デフォルトの名無しさん:2009/03/10(火) 00:16:54
>>148
>>82,85
151139:2009/03/10(火) 00:40:06
みんあーありがと!いろいろ参考になったよ。
揺らしたことないからテクスチャに描画して動かす方法で感じ掴んでみるー。
152デフォルトの名無しさん:2009/03/10(火) 01:20:40
>>148
ID3DXSpriteはBigenで現在設定してるレンダリングステートを保存して
スプライト用に書き換えてから描画し
Endで保存したステートを復元している
たしか自動でフィルターもONになってたはず
スプライト->Beginのパラメーターで変更しないように出来たはずだが
ID3DXSpriteはあんまり使ったこと無いので嘘かも
ソース上げてくれたらチェックするが
153121:2009/03/10(火) 01:47:31
みなさま、アドバイスありがとうございます。

やはり、フィルターの設定だったようです。
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_POINT );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
を付け加えることで、正しく表示ができました。

正直、まだ、半分くらいしか理解できていないので
これから、もっと精進して勉強していきます!

ちなみにみなさんは、どうやって知識を蓄えて行かれたのですか?

やっぱり地道にMSDNとかでしょうか?

ずばっと答えて下さるみなさんにあこがれちゃいます
154デフォルトの名無しさん:2009/03/10(火) 05:14:53
ぶっちゃけ、こればっかりは長く続けて経験値を上げていくしかない
これだけ見ればOKみたいなサイトや書籍は存在しないので
基本は色んな場所から良いと取りすることになるんだけど
なにが「良い」のかを判断できるようになるにはやっぱり経験が必要
結局はいろいろ失敗しつつも自分であれこれいじっていくしない
155デフォルトの名無しさん:2009/03/10(火) 11:09:52
156デフォルトの名無しさん:2009/03/10(火) 20:22:35
サンプルフレームワークで質問があります
ウインドウモードで起動し、ウインドウサイズを拡大していくと、フォントやGUI部分は同じ大きさなのに
モデルやスプライト等のサイズのみ大きくなっていくのですが、これはフレームバッファのサイズ自体が変化していくということでしょうか?
157デフォルトの名無しさん:2009/03/10(火) 22:15:44
座標変換済み頂点を使ってるものは画面サイズに関わらず変化しない
頂点変換掛けてるものは射影行列が同じな限り
画面に対しての比率は常に一定、つまり画面が大きくなれば大きくなる
158デフォルトの名無しさん:2009/03/10(火) 22:39:56
スキンメッシュアニメーションの読み込みと表示のサンプルきぼん
159デフォルトの名無しさん:2009/03/10(火) 22:48:07
あのサンプルは解像度も変わってるよ
160デフォルトの名無しさん:2009/03/10(火) 22:55:48
いま現在の自分のDirectX技術のレポートと
想定しているシステムのスケルトンプログラムを提出してくれたら
それにあった奴を書いてやるよ
使用目的も分からないとSDKのサンプルみたいな煩雑なコードになるから
161デフォルトの名無しさん:2009/03/10(火) 23:01:15
>158
いいサンプルがSDKにはいってんべ
162デフォルトの名無しさん:2009/03/10(火) 23:07:43
struct CUSTOMVERTEX
{
D3DXVECTOR3 position; // 頂点の 3D 位置。
D3DXVECTOR3 normal; // 頂点のサーフェイス法線。
};
の頂点のサーフェイス法線の意味がわかりません。
お願いします
163デフォルトの名無しさん:2009/03/11(水) 00:17:44
複数ウィンドウ(親ウィンドウと子ウインドウ)のとき、
描画ループの順番はどうしたらよいでしょうか?
while(true) {
pParent->Clear(ARGB);
pParent->Begin();
...
pParent->End();
pParent->Present();

pChild->Clear(ARGB);
pChild->Begin();
...
pChild->End();
pChild->Present();
}
上記のようにするべきなのか、それとも
pParent->Clear();
pChild->Clear();
pParent->Begin();
pChild->Begin();
このようにするべきでしょうか?
164デフォルトの名無しさん:2009/03/11(水) 00:45:40
ぶっちゃけどっちでもいいと思う
165デフォルトの名無しさん:2009/03/11(水) 00:47:34
>>157
>>159
フレームバッファサイズが変わってそれに合わせて頂点変換されてるものの表示サイズも変わるってことでしょうか?

フレームバッファサイズを固定したままウィンドウサイズを変えることってできないでしょうか?
例えば、DXUTCreateDevice()で640x480のフレームバッファ、ウィンドウサイズを持つアプリを作り
それをマウス操作でウィンドウサイズを拡大、このときにフレームバッファサイズを固定したまま引き伸ばして
ウィンドウの形状の拡大させたいのです
166デフォルトの名無しさん:2009/03/11(水) 00:58:22
伸ばした部分は黒枠でいいの?
167デフォルトの名無しさん:2009/03/11(水) 01:46:03
サンプルフレームワークのBasicHLSLを使ったのですが、

640x480で起動直後はこのようになります
http://nagamochi.info/src/up30411.jpg

これのウィンドウサイズを拡大すると、こんな感じに
http://nagamochi.info/src/up30412.jpg

これをこのような形で拡大させたいのです
http://nagamochi.info/src/up30413.jpg

拙い説明ですみません。
168デフォルトの名無しさん:2009/03/11(水) 02:02:38
それはたぶん無理
DXUTの中身をいじれば出来るけどそれが出来たらこんな質問でないよね
荒業としてはUI部分だけ別のレンダリングターゲットに描画して後から合成とか
169デフォルトの名無しさん:2009/03/11(水) 02:16:44
DXUT.cpp 3643行周辺でバックバッファ領域をクライアントサイズに変更してその後にデバイスをリセット
BassicHLSLからコールバックで登録したOnResetDeviceが呼ばれて
そこでGUI部分の表示位置、サイズを修正してる感じかでしょうか?

ここのバックバッファサイズをクライアントサイズに変更する箇所を無くすと
画面自体はhttp://nagamochi.info/src/up30413.jpgになったのですが
GUIコントロールの位置が表示されてる場所からずれてしまいました(ずれたのは表示位置の方なのですが)
170デフォルトの名無しさん:2009/03/11(水) 02:36:39
ずれたのは
OnResetDevice内でバックサーフェイスのサイズにあわせて
SetLocationしなおしてるから
そこを消せばOKなんじゃない?
171デフォルトの名無しさん:2009/03/11(水) 02:54:36
DirectX9で
ID3DXFont::DrawText
すると、文字の下と右っかわに
変なわくみたいな線がとぎれとぎれに出ます?

なぜ〜〜〜????
172デフォルトの名無しさん:2009/03/11(水) 11:07:34
>>158
煽りでもなんでもなく、ほんとにサンプルに入ってるやつをぶっこぬくのが一番いい。
腐ってもマイクソといった感じの、すごいいいソースだった
173デフォルトの名無しさん:2009/03/11(水) 12:32:16
質問です

Direct3D9のボリュームテクスチャに、GPUで直接レンダリングする方法が分かりません

ボリュームから特定の軸で分割したサーフェイスが取得できると思っていたのですが
マニュアルを見てもサーフェイスを取得する方法が分かりません

Direct3D10でのやり方は分かるのですが、もしかしてDirect3D9では出来ないのでしょうか?
174デフォルトの名無しさん:2009/03/11(水) 12:42:41
ヘルプに書いてある通り。
175デフォルトの名無しさん:2009/03/11(水) 12:58:47
お前こっちまで来てんのかww
ワロタwww
176デフォルトの名無しさん:2009/03/11(水) 13:04:34
つまりヘルプを読めば解決
177デフォルトの名無しさん:2009/03/11(水) 13:09:22
困ってるんだ!頼む教えてくれ!
178デフォルトの名無しさん:2009/03/11(水) 13:10:16
それが人にものを教えてもらうときの態度かね
179デフォルトの名無しさん:2009/03/11(水) 13:11:25
猿!草履を用意せい!
180デフォルトの名無しさん:2009/03/11(水) 13:14:15
181デフォルトの名無しさん:2009/03/11(水) 13:30:40
お昼の部の人気に嫉妬
182デフォルトの名無しさん:2009/03/11(水) 13:57:06
>>173
ボリュームテクスチャをレンダーターゲットにしたいってこと?
183デフォルトの名無しさん:2009/03/11(水) 14:44:39
はい
184デフォルトの名無しさん:2009/03/11(水) 19:01:21
DirectXのチュートリアルでマウスの状態が I の状態になったり
砂時計になったりするとそのままだよね
これを矢印の状態にするにはどうすればいいでしょうか?
185デフォルトの名無しさん:2009/03/11(水) 19:30:30
DirectXと関係ない
186デフォルトの名無しさん:2009/03/11(水) 20:08:45
最近良く見る床で反射(?)してる風の見た目を実現しようと思っています。

今はID3DXSpriteを使ってPNGファイルを表示させているんですが
同時に同じ画像を反転させて元の画像の下に表示させてさらにグラデーションをかけたいです。

イメージとしてはこんな感じ。(サンプルは文字になってますけど)
http://www2.uploda.org/uporg2081830.png

スプライトを反転させて元スプライトの下に表示まではできたんですけど
グラデーションをかけることができません。

どうやったら実現できるか識者の方、知恵を貸してください。。。
187デフォルトの名無しさん:2009/03/11(水) 20:10:39
Direct3Dにスプライトなど存z
188デフォルトの名無しさん:2009/03/11(水) 20:17:11
DrawPrimitive使え
189186:2009/03/11(水) 20:20:45
あ、言葉間違ってましたか?すいません。
基本が全然わかってないです。。。

> 187
スプライトっていうかID3DXSpriteインターフェイスを使って画像を表示させてます。
この表示させてる画像にグラデーションがかけて表示することができるのかなって質問です。

> 188
ID3DXSprite使っちゃできないってことですか?
190デフォルトの名無しさん:2009/03/11(水) 20:27:18
できない
少しでも特殊なことしたいならID3DXSpriteはやめるべき
191デフォルトの名無しさん:2009/03/11(水) 20:32:13
>190
マジですか、ありがとうございます。
192デフォルトの名無しさん:2009/03/11(水) 21:35:44
>>170
SetLocationしなおさないとそれはそれで位置がずれてしまいました
DXUTgui.cpp内で参照されるマウスの位置にフレームバッファサイズとウィンドウサイズの比率分オフセット噛ますって方法で
強引な気はするのですが、対処できそうです、ありがとうございました。
193デフォルトの名無しさん:2009/03/11(水) 22:49:29
カメラが理解できないんですが、オブジェクトと同じようにカメラの位置と方向を決めて移動させるようには出来ないんですか?
オブジェクト全てにカメラの設定をしているように見えて理解できないんです
世界中の全てのものを見えてようが見えてなかろうが視点の設定をするのってものすごく無駄じゃないですか?
194デフォルトの名無しさん:2009/03/11(水) 22:51:33
DirectXにカメラなど無い
195デフォルトの名無しさん:2009/03/11(水) 22:51:52
それは自分で言ってる通り理解が間違ってる
196デフォルトの名無しさん:2009/03/11(水) 23:21:13
たぶんビデオカメラみたいに撮影したものが
画面に表示されているイメージなんだろうけど
3Dの世界では
ある位置にカメラがあると仮定したときに
全ての物体に対してそれがカメラに対してどの位置にあるかを計算して
さらにそれを2Dのスクリーンに投影したときにどうみえるかを計算して
初めて画面に描画することができる
ビデオみたいに光学で観測した結果を描画してるわけじゃない
197デフォルトの名無しさん:2009/03/11(水) 23:30:24
まじですか
オブジェクトをパッキングしてカメラを移動させるだけに作りかえるようなことは普通しないですか?
もしやめたほうがいいならやめます
オブジェクト毎に視界に入ってるかどうかをを判断させた後に入っているもののみビュー行列変換するであってますか?
198デフォルトの名無しさん:2009/03/11(水) 23:33:25
それとも処理落ちが始まるまで全オブジェクトビュー変換するほうがいいんですか?
いつ処理落ちがはじまるかわからないんですが、以外と早くきますか?
199デフォルトの名無しさん:2009/03/11(水) 23:37:53
プログラム云々以前に、日本語を何とかするのが先決だ。
200デフォルトの名無しさん:2009/03/11(水) 23:43:43
そもそもビュー変換が視界に入ってるかどうかの判定の第一歩なんだが
続く射影変換で視界の外にいるorその位置から見えないと判定されたピクセルは描画されない
この描画が一番重い部分なのでいかに描画するピクセルを減らすかの計算をしていると思えば良い
201デフォルトの名無しさん:2009/03/12(木) 00:01:51
・カメラの位置と向きを決める
・すべての物体を、カメラ基準の座標系に変換する
・カメラの範囲から飛び出ているものはごっそり描画を省く(←ここだけ手動)
・描画を行う
202デフォルトの名無しさん:2009/03/12(木) 00:08:20
>171
どゆこと?
203デフォルトの名無しさん:2009/03/12(木) 00:23:51
>171
どゆこと?
204デフォルトの名無しさん:2009/03/12(木) 00:40:10
ハードで計算できる部分を
わざわざCPUで判定するなんて
物体が増えたときに負荷になるだけじゃん
205デフォルトの名無しさん:2009/03/12(木) 01:15:12
そのハードに送るデータ量を減らすためにCPUで判定するんだろ
データ送信が一番重いんだから
206デフォルトの名無しさん:2009/03/12(木) 01:46:12
普通は全ての物体を変換するだろ
視界内かどうかの判定なんか考えるな
ロードするかしないかで分けろ
207デフォルトの名無しさん:2009/03/12(木) 06:29:06
そうなの?
208デフォルトの名無しさん:2009/03/12(木) 06:34:36
んにゃ
209デフォルトの名無しさん:2009/03/12(木) 07:09:57
地面のでこぼこにあわせて吸着するように物体を置くのはどうやるの?
物体のワールド座標Yに地面のワールド座標Yを影響させるのはわかるんだけど
どう計算すれば出てくるの?
210デフォルトの名無しさん:2009/03/12(木) 07:26:35
吸着とか意味わかんない
地面の高さを設定すれば単純にそこに出てくるだろ?
何が不満?
211デフォルトの名無しさん:2009/03/12(木) 07:34:06
そもそも地面のxzに対するy座標は取得できてんのかよ
212デフォルトの名無しさん:2009/03/12(木) 07:45:54
出来てない
Xファイルをワールド配置したあとのワールド座標xzのyって
ローカル座標をXファイルの原点をワールド座標に変換した値にプラスするの?
ワールド座標XZ上にある点を全て列挙する関数はないの?
213デフォルトの名無しさん:2009/03/12(木) 07:56:01
まずはモデルデータの読み込みを自前で作るところから始めた方がいい。
怠けて高レベル関数に頼っていたら何も出来ない。
214デフォルトの名無しさん:2009/03/12(木) 08:26:23
>出来てない
ざまぁwwww
215デフォルトの名無しさん:2009/03/12(木) 08:31:32
お前ら雪とか雨はどうしてる?
216デフォルトの名無しさん:2009/03/12(木) 09:36:20
傘を差します
217デフォルトの名無しさん:2009/03/12(木) 09:43:00
オレは家から出ない
218デフォルトの名無しさん:2009/03/12(木) 09:47:31
>>206
カメラが決して動かないならそれは正しい意見だ。
219デフォルトの名無しさん:2009/03/12(木) 10:03:28
雪とかは地面に近づいたら適当にアルファ値あげて消して、地面は雪シェーダで適当に白くして終わり
220デフォルトの名無しさん:2009/03/12(木) 12:15:27
D3DXでも任意の点の上空からレイを飛ばして
衝突までの距離を出せば地面の高さがわかるんでない?
使ったこと無いから速度は知らんけど
221デフォルトの名無しさん:2009/03/12(木) 12:49:31
完全に地面のメッシュが独立してるなら
D3DXIntersectでいけるかもね
ただ、その方法だとトンネルとかあったらアウトだけど
222デフォルトの名無しさん:2009/03/12(木) 14:53:40
本の目次に書いてあるんですが、高すぎて買えないので教えてください
GPUを使ったサウンドエンジンってどういうことですか?
223デフォルトの名無しさん:2009/03/12(木) 15:17:55
使いたい音源だけをデータに含ませて文字列だけでMIDIのように鳴らすのに使う
リアルタイムで音階など全てを単音から作り上げたり、効果音とかを複雑に変形させたりしてる。
これのおかげで大作でも音容量10MBいかなくなった
224デフォルトの名無しさん:2009/03/12(木) 15:19:32
だれか >>173 答えてやれよ・・・
225デフォルトの名無しさん:2009/03/12(木) 20:42:13
スキンメッシュの日本語訳を開始したぜ
226デフォルトの名無しさん:2009/03/12(木) 20:43:28
それはどういった向きの質問で?
227デフォルトの名無しさん:2009/03/12(木) 21:42:29
HLSLについて解説している書籍やサイトを見るとSetRenderStateで出来ていることをわざわざ書いていたりしますが、
これからはSetRenderStateを使わずに出来る限りHLSLで処理させる流れなのでしょうか?
228デフォルトの名無しさん:2009/03/12(木) 21:44:47
うん
229デフォルトの名無しさん:2009/03/12(木) 22:23:49
いまさらだけどボリュームテクスチャにレンダリングって何がしたいんだろうな。
230デフォルトの名無しさん:2009/03/12(木) 22:26:52
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
231デフォルトの名無しさん:2009/03/12(木) 22:30:28
まぁ、DirectX10から実装された機能を9で使えますか?
なんて聞いても煽りレスしかつかんだろ
こういうことをやりたいんだけど
9で実現するにはどうすればいいですか?と聞いてくれればいいんだが
232デフォルトの名無しさん:2009/03/12(木) 22:51:01
いやマルチだからそこらじゅうに書きこしてる
233デフォルトの名無しさん:2009/03/12(木) 23:24:46
スキンメッシュはDXUT.cppは外してもいいの?
234デフォルトの名無しさん:2009/03/13(金) 00:21:11
スキンメッシュに関わらずUT使ってないならいらない
235デフォルトの名無しさん:2009/03/13(金) 07:15:09
初心者ですが、DXUTって現場で使われるんですか?
9の勉強中で、DXUTの膨大さに圧倒されてます・・・
236デフォルトの名無しさん:2009/03/13(金) 07:56:43
仕事ならDXUTなんて豆粒にしか見えないような膨大なライブラリを作ります。
237デフォルトの名無しさん:2009/03/13(金) 09:03:37
うちの会社の規模ではWindowsなんてミジンコです。
238デフォルトの名無しさん:2009/03/13(金) 09:06:59
>>236-237
レスどうもです。豆粒、Winミジンコなんて凄いですね・・・
本場は1000万ステップ越えるのでしょうか・・・
参考になりました!
239デフォルトの名無しさん:2009/03/13(金) 15:38:54
DXUTって何? 本体のライブラリ? 
マイクロソフトの描写ライブラリの分量を超えるプログラム作ってるって事?
240デフォルトの名無しさん:2009/03/13(金) 15:53:44
241デフォルトの名無しさん:2009/03/14(土) 02:43:46
ttp://www1.axfc.net/uploader/He/so/204674

バックバッファーに描画した物をGetDCで取得し、
BitBltで描画しようとおもったのですが上手くいきません。
どこが悪いのでしょうか?
242デフォルトの名無しさん:2009/03/14(土) 03:11:09
それよりも
BitBltの遅さを何とかするために開発されたDirectXを使っておいて
なぜそこで先祖がえりを起こすのか問い詰めたい
243デフォルトの名無しさん:2009/03/14(土) 03:11:14
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
244デフォルトの名無しさん:2009/03/14(土) 03:49:22
>>243
そこのフラグを入れないとダメだったのですね。
ご教授頂きありがとうございました。

>>242
バックバッファーに描画したピクセルを編集したいと思ったのですが、
VRAM→MEMORY→VRAM という手順を踏んで描画すると物凄く遅くなってしまったのです。
なのでVRAM→MEMORYだけにして、編集後のピクセルをBITBLTでやれば少しはマシになるかなと。

それとも他にもっといい方法があるのですかね?
245デフォルトの名無しさん:2009/03/14(土) 04:01:49
バックバッファに描画しないでテクスチャに描いて最後にバックバッファに描くとか
246デフォルトの名無しさん:2009/03/14(土) 04:12:02
>>245
テクスチャに描画する為にはレンダーターゲットにしなくてならなくて、
レンダーターゲット指定の物はLockRect出来ないため、
D3DPOOL_SYSTEMMEMなサーフェスにGetRenderTargetDataする事で、
LockRectをして編集可能になる…という事であってますよね?
そこから更にUpdateSurfaceをして…となると遅くなってしまうのです。

もし何か間違いがありましたら指摘して貰えると助かります。
247デフォルトの名無しさん:2009/03/14(土) 04:16:05
ピクセルシェーダ使えばいいんじゃね?
248デフォルトの名無しさん:2009/03/14(土) 04:40:06
GDIで描くのにくらべたら何やっても速いって気もするけどね

ピクセルをどう編集したいかにもよるけど
俺もテクスチャに描いてシェーダーで加工してレンダリングに1票
249デフォルトの名無しさん:2009/03/14(土) 15:28:23
やりたい事に対して
自分の考えた方法の詳細を聞くよりも
やりたい事と条件を出して、どうすれば?っての方が断然早いw

…でも大体は提示された方法を理解出来ない、と
だから自分の考えた方法が頓珍漢なんだがね…
250デフォルトの名無しさん:2009/03/14(土) 15:54:22
WindowsXP DX9 2009/04
シェーダー(HLSL)の勉強をしています。
頂点シェーダーを普通のXファイルに使うのは問題ないのですが、(DXの)スキンメッシュでは上手く行きません。
DrawMeshContainer関数内で「g_SkinningMethod」が常に「D3DNONINDEXED」を通るのでそこにBeginPass等を書くと
ボーンかウェイトが正しく反映されず頂点(面)が分離して表示されてしまいます。
少し下を見ると「if (g_SkinningMethod == D3DINDEXEDHSLSVS)」があったのでここを通せばいいのかと思って
「g_SkinningMethod」の値を書き換えると実行中にエラーが出ました(SetSoftwareVertexProcessingにて)。
スキンメッシュそのものは「メタセコイア」から「rok de bone2」を経由して出力したアニメーション付きXファイルです。

そこで2点伺いたいことがあります。
・頂点シェーダーを使いたい場合はD3DINDEXEDHSLSVSの部分を通して使うのは正しい(意図した)方法なのか
・D3DINDEXEDHSLSVSを通すために何かすべき事があるのか(スキンメッシュのコンバートなど)

特異なことをやっていますが、もし分かる方がいればレスをお願いしますorz
251デフォルトの名無しさん:2009/03/14(土) 15:55:24
訂正 バージョンは2009/04ではなくて2008/04です
252デフォルトの名無しさん:2009/03/14(土) 16:15:11
シェーダ上でウエイトの計算をしていないからだろ
253デフォルトの名無しさん:2009/03/14(土) 17:25:12
というか値書き換えてもエラーなんてでないだろ
254デフォルトの名無しさん:2009/03/14(土) 20:33:33
>>247>>248
なるほど、そういうものがあるのですね。調べてみます。

ttp://www1.axfc.net/uploader/He/so/204937

もう1つ質問なのですがテクスチャを貼り付けたポリゴンを、
rhwを1.0fにして100%表示させているのですが、元の画像よりぼやけて見えます。
これを回避するにはどうしたら良いのでしょうか?
255デフォルトの名無しさん:2009/03/14(土) 20:41:12
ヘルプを読むことだな
256250:2009/03/14(土) 21:07:08
>>252
ありがとうございます。
若干前へ進めました。
pMesh->DrawSubsetの上でSetTransform(D3DTS_WORLDMATRIX(i), &matTemp )をやっており、
この値を正しく渡すことが出来れば問題は解決しそうです。
しかし、これを繰り返す回数である「pMeshContainer->NumInfl」に何が入っているのか(常に4?)、
どうやって頂点シェーダーでどの行列を使うのかを指定してやるのかが分かりません。
前者に関しては100とか200の数値が入るとHLSLに配列として保持させるのは現実的ではありませんよね。
後者は前者が4固定だとすれば、頂点情報にフラグがあればそれを取得することで解決しそうです。
そこら辺について詳しい片はいらっしゃらないでしょうか。
257デフォルトの名無しさん:2009/03/14(土) 21:14:48
>どうやって頂点シェーダーでどの行列を使うのかを指定してやるのかが分かりません。

なんでそんな基本事項が分からないのかが分からない。
258250:2009/03/14(土) 23:18:24
>>257
現在使っている頂点シェーダーは以下の通りです。
float4 TestVS(
float4 Pos : POSITION,
float3 Normal : NORMAL,
float2 TexCoord0 : TEXCOORD0 ) : POSITION
{
float4 a = mul( Pos, gMatrixWVP );
return a;
}

gMatrixWVPはpMesh->DrawSubsetの前にmatWorld * matView * matProjectの結果を入れています。
上記で期待している結果はシェーダーをかけてもかけなくても同じ形状。
matWorld(gMatrixWVP)の値を変えることで解決はするのでしょうが、
pMesh->DrawSubsetで複数の頂点が描画されるのでバラバラに設定できない。
そもそもどの頂点がどの行列を使うのかを知り得ないので躓いています。
頂点シェーダー内で各頂点通常描画と同じワールド座標が取得できればいいのですが無理ですよね・・。
259デフォルトの名無しさん:2009/03/14(土) 23:27:17
>そもそもどの頂点がどの行列を使うのかを知り得ないので躓いています。
頂点の情報の中に含まれてるだろ
全然分かっていないんだから、
D3DXを使わずに直接頂点を設定するところからやり直せ
260デフォルトの名無しさん:2009/03/14(土) 23:39:11
とりあえず「スキンメッシュ シェーダ」でぐぐるくらいのことはしたのか?
それっぽいのがゴロゴロ出てくるぞ?
261デフォルトの名無しさん:2009/03/15(日) 00:27:59
そもそもSDKのサンプルにシェーダーで動くサンプルがそのまま入ってますやん
262デフォルトの名無しさん:2009/03/16(月) 16:16:57
規制が解除されてたら
HLSL用スキンメッシュのサンプルをうpする
263デフォルトの名無しさん:2009/03/16(月) 16:30:30
おめでとう
264デフォルトの名無しさん:2009/03/16(月) 18:02:33
日本語ドキュメント来たな
265デフォルトの名無しさん:2009/03/16(月) 18:11:55
金曜に来てたのに誰も気づかなかったのか
ttp://msdn.microsoft.com/ja-jp/library/cc411364.aspx
266デフォルトの名無しさん:2009/03/16(月) 18:40:48
>>262
くそう、いつのまにか全規制からVIPのみ規制に切り替わってた
いまコピペの嵐でサンプル作った

・DirectX9
・基本ベースはSDKサンプルのチュートリアル(非DXUT)
・スキンメッシュ部分はSkinnedMeshからの部分コピペ
・HLSLはMultiAnimationからほぼそのまま
・アニメーション制御はまるぺけを参考

・デバイスのリセットに未対応
・キャラクタ(インスタンス)のコピーとか無理
・影響度が一つも設定されてない頂点のあるメッシュは表示しない
・テクスチャの設定されてないマテリアルは真っ黒
全部対応できるけどお手軽最小限ってことでこれらは自分でなんとかしてね


で良くて二人以上希望者がいたらうp
267デフォルトの名無しさん:2009/03/16(月) 18:45:12
キボンヌ
268デフォルトの名無しさん:2009/03/16(月) 18:45:58
あ、俺もおねがいします
269デフォルトの名無しさん:2009/03/16(月) 18:47:44
俺も俺も
270デフォルトの名無しさん:2009/03/16(月) 19:09:44
一応うp
あまりデバックしてないから動かなかったら簡便な
あまりに不評なら即削除

ttp://www5b.biglobe.ne.jp/~mya_a/DirectX/Vertices.zip
271デフォルトの名無しさん:2009/03/16(月) 19:54:59
これがどうすごいか解説ヨロ
272デフォルトの名無しさん:2009/03/16(月) 19:57:27
よくわからないけどいただきました。
よくわからないけどべんきょうにつかわせていただきます。
273デフォルトの名無しさん:2009/03/16(月) 20:02:22
別にどうすごくもないただのサンプルでしょ
動作原理を知らなくてもスキンメッシュを再生したい人には良いんでない?
すでにできてる人にはあまり意味ないかと
274デフォルトの名無しさん:2009/03/16(月) 20:20:12
>>270
素かワザとか判断に迷う所だが
簡便じゃなく勘弁な、ワザとだったら勘弁な
275デフォルトの名無しさん:2009/03/16(月) 20:22:14
さんくす
少ないファイル数でまとめてるとわかりやすいわ
276デフォルトの名無しさん:2009/03/16(月) 21:21:53
あんまり甘やかすなよw
ここがDirectXの一つの山場なんだから
277デフォルトの名無しさん:2009/03/16(月) 21:29:28
くやしいのうwwwくやしいのうwww
278デフォルトの名無しさん:2009/03/16(月) 21:49:17
CDXUTMeshってググってもあまり引っかからないのですが
一般的にはあまり使いませんか?
279デフォルトの名無しさん:2009/03/16(月) 22:05:05
最適化とか勝手にやってくれるし
UTベースでCXFileMesh使うならいろいろ手間が省けていいんでない?
280デフォルトの名無しさん:2009/03/16(月) 22:07:42
ごめ
×CXFileMesh
○LPD3DXMESH
281デフォルトの名無しさん:2009/03/17(火) 09:13:47
>>265
SUGEEEEEEEEEEEE!!!
やっと日本語版の最新がきたのかw
D3DXAnimationControllerが最新対応になっていて感動した!

でもバグも直せ
282デフォルトの名無しさん:2009/03/17(火) 13:39:48
>>265
久しぶりの翻訳は(日本法人)新社長の公約のおかげかな。
こういう時期なら翻訳をねじ込めるかもしれないので
翻訳して欲しい資料についてはフィードバックしておくと良いのかも。

ttp://ascii.jp/elem/000/000/165/165823/

>樋口氏は、「ITエンジニアの皆様に対するお約束」として、エンジニアからの
>要望が強かったという「技術資料の不足」「製品の品質」「分かりにくいライセンス」
>などの問題の解決に当たっていることを説明。
>過去6カ月間に、1万ページ強の技術資料を日本語翻訳した経過を報告し、
>「さらに今後10カ月間で1万ページの技術資料を追加翻訳する」と約束した。
283デフォルトの名無しさん:2009/03/17(火) 15:57:51
つまり、今後の質問は全てヘルプを見ろってことでおk?
284デフォルトの名無しさん:2009/03/17(火) 16:03:16
別に日本語サンプルできたからって全然変わらないだろ
285デフォルトの名無しさん:2009/03/18(水) 10:52:39
スキンアニメーションに使うXファイルを作っているのですが
歩行アニメーションを作る場合は3Dソフト上で場所を動かさず歩行モーションだけを作って
ゲームのほうでキー入力によって位置を移動しながらアニメーションを再生させるんでしょうか
286デフォルトの名無しさん:2009/03/18(水) 11:00:17
むしろxファイル上で位置を変えようと思ったお前の発想が凄い
そのうちどこかで使おうと思った
287デフォルトの名無しさん:2009/03/18(水) 11:09:47
>>285
そう作ってもいいし、
xファイル上で移動するように作っておいて、その移動量を毎フレゲーム内に加算、モーションの方でその移動をなかったことにする
前者だとすべるような動きになりがちだけど後者モーションと移動量をリンクできる
288デフォルトの名無しさん:2009/03/18(水) 11:49:55
ありがとうございます

とりあえずはゲームのほうで移動するようにしてみます
289デフォルトの名無しさん:2009/03/19(木) 17:03:32
スキンメッシュが1秒くらいの周期で動きが異常に速くなったり戻ったりを繰り返す
エスパーの方どこが問題かわかります?
290デフォルトの名無しさん:2009/03/19(木) 17:42:55
時間の進め方が

AdvanceTime ( 1/60) ;
とすべきところを

time += 1/60 ;
AdvanceTime ( time ) ;

そしてるとか
291デフォルトの名無しさん:2009/03/20(金) 03:24:49
>>290
かなり良い線行ってましたわ
直接数字入れたら直った
変数timeがあっちこっちでごっちゃになってたみたいだサンクス!
でもクラスに移植する前はマトモに動いてたのになー
292デフォルトの名無しさん:2009/03/20(金) 12:50:06
シェーダーを使ったメッシュって元々設定してたライトの影響を受けることはできますか?
シェーダーを使ったメッシュに新しく設定しなきゃ駄目ですか?
293デフォルトの名無しさん:2009/03/20(金) 13:47:27
で、新しく設定しないで実行した結果はどうなった?
294デフォルトの名無しさん:2009/03/20(金) 13:51:59
光が当たりませんでした。何か方法はありますか?
295デフォルトの名無しさん:2009/03/20(金) 14:01:30
描画速度の計測ってtimeGettimeなどで時間計測すればいいんでしょうか?
余りにも短い時間で終了してしまう場合は、その処理を何百回とか繰り返して
負荷をかけるだけで大丈夫ですか?それとも同じ処理だと二回目以降は高速になります?
296デフォルトの名無しさん:2009/03/20(金) 14:08:46
>>292
元々へったくれもなく、自分で計算内容を書くのは理解しているのか?

>>295
処理しないなら休ませろ
297デフォルトの名無しさん:2009/03/20(金) 14:48:16
物体を回転させるのはわかったんですが
物体の周りで同じ半径で物体を円運動させるにはどうすればいいんですか?
298デフォルトの名無しさん:2009/03/20(金) 17:02:56
まず数学から学んだほうが早いんじゃね?とか思うのは俺だけか。
行列計算とか色々関数があるから手軽になってるけど、根本的な内容を理解していないと>>297のような状態に。
299デフォルトの名無しさん:2009/03/20(金) 17:07:33
必要なのは三角関数だけだけどな
300デフォルトの名無しさん:2009/03/20(金) 17:12:43
月の裏側見えちゃうじゃん!
301デフォルトの名無しさん:2009/03/20(金) 17:31:58
>>296
>処理しないなら休ませろ
いや処理にかかる時間をはかりたいのです。

例えば、3つのテクスチャーで作られるモデルがあるとして、それを5箇所に描画する場合って
モデル1つづつ描画していくのと、1つめのテクスチャーをセットして、そのテクスチャが必要な部分だけ5箇所に描画、2つめのセットして描画
って繰り返すのとどっちが速いんでしょうか?
302デフォルトの名無しさん:2009/03/20(金) 17:42:04
切り替えなくてすむのなら切り替えない方が速い
303デフォルトの名無しさん:2009/03/21(土) 17:53:13
フレーム4個うちボーン2個のスキンメッシュがあって、
頂点バッファをダンプするとDWORDのBlendIndicesの値には
ボーンのインデックスの00か01しか現れないと思ったのですが
3f800000だったり3f7ffb37のような値になっています。
これはどういう計算でこうなるのでしょうか?

描画は正常に表示できています。シェーダ内ではD3DCOLORtoUBYTE4を使ってます。
304デフォルトの名無しさん:2009/03/21(土) 18:16:57
プログラム言語なんて所詮コンピュータに人間のやりたいこと伝える通訳でしかねぇんだよ。
通訳なんて自分自身は生涯主役になれない黒子だろ?脇役だろ?奴隷だろ?
伝わりさえすりゃそんなもんの優劣なんてどうでもいいんだよ。

何でも出来る?
そんなもんは「私はただの通訳じゃありません。ヒンタボ語も使えます!」と
自信満々に言ってるようなもんだ。

そんなもん使う側の人間にすりゃ
「はぁそうですか。便利そうですね。…ヒンタボに行く人にとっては。」レベルの
ゴミ自慢だっていい加減気づこうなw


まぁ、これに懲りたら挑発しにくんな。奴隷。
305デフォルトの名無しさん:2009/03/21(土) 18:19:26
ヒンタボ語に泣いたw
おまえはたけしかwww
306デフォルトの名無しさん:2009/03/22(日) 12:54:13
http://msdn.microsoft.com/ja-jp/library/bb174832(VS.85).aspx
を見るとsThumbLXだけ値の範囲が違うのですが、表記のミスなのでしょうか。
だとするとどちらが正しい値なのですか?
307デフォルトの名無しさん:2009/03/22(日) 14:06:59
コリジョンクラスを作ろうと思うのですが
モデル管理クラスはプレイヤーとその他で2つ別のを作るのと同じクラスで管理するのはどちらがいいですか?

アドバイスお願いします
308デフォルトの名無しさん:2009/03/22(日) 16:33:52
>>306
表記ミスだね、符号付16bit整数は -32768 〜 32767
309デフォルトの名無しさん:2009/03/22(日) 17:44:23
シェーダープログラミングで点光源ってどうやるの?
シェーダーにするとライトの設定異常に面倒じゃない?おれが間違った解釈してるのかな?
310デフォルトの名無しさん:2009/03/22(日) 17:57:08
MMORPG作ったけど
311デフォルトの名無しさん:2009/03/22(日) 18:13:44
ふむ?
312デフォルトの名無しさん:2009/03/22(日) 19:32:50
ゲームパッドのデバイス作成しようと思ったら、ウィンドウハンドル必要だけど、
コンソールアプリではDirectInput使えない?
313デフォルトの名無しさん:2009/03/22(日) 21:28:31
使える
314デフォルトの名無しさん:2009/03/22(日) 22:18:27
.xのアニメーション(スキンメッシュ)ってもしかしてシェーダー必須?
315デフォルトの名無しさん:2009/03/22(日) 22:28:53
いいえ
316デフォルトの名無しさん:2009/03/24(火) 15:12:35
317デフォルトの名無しさん:2009/03/24(火) 21:43:04
>>312
コンソールでもハンドルは取れるぞ
318デフォルトの名無しさん:2009/03/25(水) 00:40:04
ID3DSprite を使ったスプライト表示について教えて下さい。

テクスチャを準備して、ビットマップを表示しているのですが
縦横比をビットマップと同じように表示するにはどうすれば
良いでしょうか?

よろしくお願いします。
319318:2009/03/25(水) 00:53:42
すみません、環境は DirectX9 で、表示はWindowです。
Windowサイズを変えるとスプライトの縦横比が変わるのを
防ぎたいです。

宜しくお願いします。
320デフォルトの名無しさん:2009/03/25(水) 01:27:58
画面の大きさ変わったらそれに応じた行列作って与えればいいんじゃない?
321デフォルトの名無しさん:2009/03/25(水) 01:31:27
>>320
ウィンドウの縦横比とスプライトの縦横比の関係が
どうなっているのか分からないのですが、これを確認する
方法がありますでしょうか?
322デフォルトの名無しさん:2009/03/25(水) 07:11:28
そもそもID3DSpriteなど存在しない
323デフォルトの名無しさん:2009/03/25(水) 07:22:23
>>319
Windowサイズを変更できないようにしろ
324デフォルトの名無しさん:2009/03/25(水) 08:41:13
ウインドウサイズが変更さたら、D3Dデバイスも変更するといいと思う
325デフォルトの名無しさん:2009/03/25(水) 15:19:54
Xファイルの再生でアニメーションコントローラーを使って
指定したフレームから指定したフレームまでの再生ってできますか?

1つのXファイルに歩行・ジャンプ・座るなどのモーションを詰め込んでどうすればいいか悩んでます;;
326デフォルトの名無しさん:2009/03/25(水) 15:31:43
できるけど
切り替えやモーション移行時の合成のことを考えたら
アニメーションセットを複数持った方が楽
327デフォルトの名無しさん:2009/03/25(水) 15:45:36
>> 326
ありがとう
アニメーションセット 複数
でググったら色々出てきたので勉強してみます
328デフォルトの名無しさん:2009/03/25(水) 15:48:13
カメラでビュー変換した後のmatrixを、移動したり回転したりするには、どう計算したらいいんですか?
329デフォルトの名無しさん:2009/03/25(水) 15:55:21
板違い
330デフォルトの名無しさん:2009/03/25(水) 16:01:15
ビュー行列にあらかじめ移動行列やら回転行列やら掛けとけば?
331デフォルトの名無しさん:2009/03/25(水) 16:40:54
板違い
??
332デフォルトの名無しさん:2009/03/25(水) 16:53:07
>>330
カメラの動きを出力するツールがあり、その出力データを他のツールで読み込み再生したいんです。
しかしその出力データにはビュー変換後のmatrixしか入っておらず、変換前のデータにあらかじめどうこうというのは出来ないんです。
333デフォルトの名無しさん:2009/03/25(水) 16:59:43
カメラの位置と向きから逆計算すればよい
334デフォルトの名無しさん:2009/03/25(水) 17:11:33
後だし情報多すぎだな
もう回答はつくまい
335デフォルトの名無しさん:2009/03/25(水) 17:35:02
できたあああああああああ。
ひゃっっほおおお
カメラですが、みなさんありがとうございました。
上手く行かない原因がわかりました。
ツール側のxyzが逆になっていただけでした。
transrateだけで行けないわけがないのに、それすらできないなんてPG人生終わったな、ぐらい追い詰められてました。
幾何学の基本的な公式から読み直したり(ry
ありがとー!
336デフォルトの名無しさん:2009/03/25(水) 17:52:12
どういたしまして^^
337デフォルトの名無しさん:2009/03/25(水) 19:01:18
DirectX9に対応してないビデオカード使ってる奴がうざいんだけど
どうすればいいですか
338デフォルトの名無しさん:2009/03/25(水) 19:02:21
暗殺しろ
339デフォルトの名無しさん:2009/03/25(水) 19:04:05
何作ってるかによるな
340デフォルトの名無しさん:2009/03/25(水) 19:08:56
この手のクレームは無視一択じゃね
341デフォルトの名無しさん:2009/03/25(水) 19:10:22
必要環境にDirectX9と書いてあるなら対応する必要なし
342デフォルトの名無しさん:2009/03/25(水) 19:14:41
必須環境なのに対応しろって苦情が入るのでうぜーとか
下の方の環境も拾おうとしてる所為で全力で戦えなくてイライラしてるのか
両対応でできる限り遜色ない見栄え要求されて大変とか
343デフォルトの名無しさん:2009/03/26(木) 09:26:15
DirectSoundのクラスを作っているんですが
音楽を読み込ませる場合は最初に使う分ロードしておくのと必要な場面でロードするのはどちらがいいですか?
344デフォルトの名無しさん:2009/03/26(木) 09:27:24
DirectSoundクラスを実装しているのですが
音楽データは最初にすべてロードするのと必要な場面ごとにロードするのはどちらがいいですか?
345デフォルトの名無しさん:2009/03/26(木) 09:36:37
音楽データなら理想を言えばoggファイルとかからストリーミング再生がいい
DirectMusicならやり方分かるがDirectSoundでどうやったかな

SEじゃなくてBGMだろ?事前に全BGMを読み込むのはあり得ない^^;
346デフォルトの名無しさん:2009/03/26(木) 09:51:03
>>345
レスありがと

directMusicでoggファイル再生を実装してみます
ストリーミングはスレッドを使っているみたい?なのですが
スレッドの勉強はまだ不十分なので、必要な時にロード・必要なくなったら消去
という風な仕様で作ってみます。
347デフォルトの名無しさん:2009/03/26(木) 10:00:37
お前もしかして○×にも書いてなかったか?俺と全く同じペースで進めてるわけだが・・・
348デフォルトの名無しさん:2009/03/26(木) 10:15:28
○×?
どこよ
349デフォルトの名無しさん:2009/03/26(木) 13:55:25
つくろードットコムだったりして?

ファイル全読み込みで発生するラグはプレイヤーのストレス源になるからな
世の中には全部読んだあと更にデコードまでする人もいるらしいが
なるべくストリーミングしたほうが良いね
350デフォルトの名無しさん:2009/03/26(木) 17:47:36
D3DXを使わずにテクスチャを読み込むにはどうすればいいんでしょうか。
351デフォルトの名無しさん:2009/03/26(木) 17:52:15
テクスチャを作成し、バッファをロックして、ピクセルデータを書き込む。

画像ファイルからピクセルデータを取得するには、各フォーマットを調べるか、
WinAPIやその他ライブラリ関数を使ってビットマップを取得する。
352デフォルトの名無しさん:2009/03/26(木) 18:06:48 BE:1313330257-2BP(0)
c++とc#の基礎的な部分の勉強はしたことあるのですが、
3D表示に手を伸ばそうとしたときdirectXとXNAというものがあると聞きました
もちろん一長一短はあると思いますが、やはりメジャーなdirectXの方が解説サイトなどが豊富で
初心者向けなのでしょうか?
353デフォルトの名無しさん:2009/03/26(木) 18:09:39
>>351
ありがとうございます。
LockRectの第2引数がバッファを指すポインタを持っている事に今気がつきました。
書き込むデータは、IDirect3DDevice9::CreateTextureのD3DFORMAT に指定した引数に従って書き込めばいいのでしょうか。
354デフォルトの名無しさん:2009/03/26(木) 21:13:54
CreateDirect3D9やDirectInput8CreateはCOMを初期化するのにCoInitializeを使っているというわけではないのですか?
D3DやDIオブジェクト作成した後でCoInitalizeExにいろいろな値を渡しても、失敗することがないので気になるのですが。
355デフォルトの名無しさん:2009/03/26(木) 22:27:21
Visual Stduio 2008を使用していて、DXSDKをインストールしたんですが、
プロジェクトのビルド時に
include ファイルを開けません。'DSound.h': No such file or directory
というエラーがでます。
VSの設定でDXSDKのincludeディレクトリとlibディレクトリへのパスは通してあります
何が悪いんでしょうか?
356デフォルトの名無しさん:2009/03/26(木) 23:04:20
libは64とかはあってるのか?
優先度を一番上にしてるのか?
実際にファイルはあるのか?
357デフォルトの名無しさん:2009/03/26(木) 23:45:14
デスクトップ上に半透明化した画像を常に手前に表示したままの状態で、後ろに表示されている別のウインドウを操作できるようにしたいんですが、VC++で可能でしょうか?
何かよい方法があれば教えてください。
358デフォルトの名無しさん:2009/03/26(木) 23:59:16
directx関係ない気がするんだがな
可能。方法のヒント ハンドル
359デフォルトの名無しさん:2009/03/27(金) 00:10:25
>>355
現在のDirectXSDKのincludeフォルダに存在する?
PlatformSDKにはいってたりして・・・
360355:2009/03/27(金) 00:56:38
361デフォルトの名無しさん:2009/03/27(金) 01:42:54
大丈夫じゃない
362デフォルトの名無しさん:2009/03/27(金) 09:16:14
>>359
March 2008の段階ではまだ入ってるみたい。 Novemberでどうなってるかは知らんが。

>>360
この問題と直接関係ないけど、Win32用のライブラリパスにx64のを入れるのはやめれ。
Win32<=>x86
x64<=>x64
の『だけ』を含める。

まず>>359が言っているみたいに、本当にincludeフォルダ内にdsound.hがあるか確認すること。

もう一つだけ思い当たる節。
http://www.dotup.org/uploda/www.dotup.org11272.jpg.html
ここWin32になってるよな?
363デフォルトの名無しさん:2009/03/27(金) 17:06:15
あとはdebugとリリースそれぞれ違うから
両方設定して。
それでだめならlibとかをdirectxのみにする
364デフォルトの名無しさん:2009/03/28(土) 00:03:03
sas
365デフォルトの名無しさん:2009/03/28(土) 14:01:36
sdkのサンプルにdirectsoundのやつが入ってないんだけど昔のバージョンには入ってるの?
MSDNには\Samples\C++\DirectSound\みたいなこと書いてあるのに見当たらない
366デフォルトの名無しさん:2009/03/29(日) 13:05:09
質問です
複数のウィンドウハンドルに描画するにはどうすればいいのでしょうか?
また、モーダルなウィンドウを生成した時、生成側でそれを検知して描画を止めるような処理をしたいのですが方法はあるでしょうか?
367デフォルトの名無しさん:2009/03/29(日) 13:44:37
368デフォルトの名無しさん:2009/03/29(日) 23:43:37
>>366
生成側で検知できない方がどうかしてないか?
モーダルウィンドウを作る直前に描画を禁止するフラグでも立てて
戻ってきたら寝かせるだけだろ。
369デフォルトの名無しさん:2009/03/30(月) 13:16:52
>>365
Microsoft DirectX SDK (August 2007)には入ってるね
これ以降無くなったヘッダとかもあるからインストールしといたら便利だよ
370デフォルトの名無しさん:2009/03/30(月) 21:01:01
質問です。
MCIを使用してmp3を再生しようと思うんですが、
ffdshowが起動してしまいます。
つまり公開した場合、各自ffdshowをインストールして下さいという必要があるという事ですか?
ゲームBGMに使用したいのですが、
MediaPlayerを用いた方が標準的に入っているので、そちらの方が適当でしょうか。
371デフォルトの名無しさん:2009/03/30(月) 21:11:21
お前さんが自分でffdshow使うようにOSに設定してるだけだろ・・・
372デフォルトの名無しさん:2009/03/30(月) 21:17:40
>>371
マジですか。ありがとうございます。
373デフォルトの名無しさん:2009/03/31(火) 03:38:03
水面ってどういう作り方があるんですか?
半透明で下の土が見えてるだけしか思いつきません
クライシスの波だったりするのってアニメーションなんですか?それとも計算で動かしてるんですか?
374デフォルトの名無しさん:2009/03/31(火) 04:03:37
sinとか使って計算するんじゃなかったっけ?
375デフォルトの名無しさん:2009/03/31(火) 08:58:38
質問です。
ある画像を描画する際に、アルファ付きのスプライトなどでマスクを掛けて
円形の内側だけを描画するようにしたいのですが、思ったような結果が得られません。
まず円形の内側がアルファ値255、外側が0になるような画像を描画し、
その後マスクを掛ける画像を描画する前にD3DRS_SRCBLENDに
D3DBLEND_DESTALPHAを指定してみているのですが上手くいきません。
アルファブレンドを利用したマスク処理について知りたいので
詳しい方のご教授、もしくは参考になるサイトなど教えて頂けると助かります。
376デフォルトの名無しさん:2009/03/31(火) 10:14:29
ステンシルバッファ使えよ
377デフォルトの名無しさん:2009/03/31(火) 19:54:10
DirectSoundでストリーミング再生しながら
IDirectSound8::DuplicateSoundBuffer()使うとやばいですか?
下手したらロック可能な場所がなくなりますよね?つまりこれは短い効果音なんかに使う用と考えておkですか?
378デフォルトの名無しさん:2009/03/31(火) 21:04:42
おk
379デフォルトの名無しさん:2009/04/02(木) 20:59:06
Zバッファがどうたらと色々なページに書いてあったので、それを参考にして書き換えてみたのですが
相変わらず位置に関係なく、後に描いたものが前面に来てしまいます。
考えられる原因をお願いします。
380デフォルトの名無しさん:2009/04/02(木) 21:22:34
ダークマター
381デフォルトの名無しさん:2009/04/02(木) 21:23:33
Zバッファが登録されてない。
D3DRS_ZENABLEが有効になってない。
D3DRS_ZWRITEENABLEが有効になってない。
Zバッファがクリアされてない。
Z値の奥と手前が逆。
実は描画順が逆だった。
382デフォルトの名無しさん:2009/04/02(木) 21:47:59
回答ありがとうございます。

EnableAutoDepthStencil = TRUE;
AutoDepthStencilFormat = D3DFMT_D16;

SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
SetRenderState(D3DRS_ZWRITEENABLE,TRUE);

Clear(NULL, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, NULL);

追加・変更してはみたものの、やはりうまくいかないようです。
もっと細かく調べてみることにします。
383デフォルトの名無しさん:2009/04/02(木) 22:40:32
>>381
一番ありがちな「ニアクリップの距離が0」が抜けてるぜセニョリータ
384デフォルトの名無しさん:2009/04/03(金) 01:33:19
描画の前後に関係ねーだろボケ
何がセニョリータだタコ
385デフォルトの名無しさん:2009/04/03(金) 09:25:10
セニョリータとかボケとかタコとかやってるとこ悪いが
俺のありがちトラブルリストに追加させてもらったぜ

ありがと
386デフォルトの名無しさん:2009/04/03(金) 09:57:00
383=385
387デフォルトの名無しさん:2009/04/03(金) 10:24:33
384=386
388デフォルトの名無しさん:2009/04/03(金) 11:35:14
>>384
Znを0にするとZバッファが効果なくなるよ。
わりと常識のレベル。

手計算で座標変換してみれば、何が起こるのかすぐわかる。
389デフォルトの名無しさん:2009/04/03(金) 12:16:32
スキンアニメーションクラスを作っているのですが

ファイル読み込み・コリジョンに必要な値の取得・アニメーション制御

を1つのクラスでまとめているのですが分けたほうがいいですか?
390デフォルトの名無しさん:2009/04/03(金) 12:20:02
結局モデルデータ、アニメーション、物理データ(衝突検出等)のクラスに分けたところで、
それらの合成クラスを自分が作るだけになるという・・・
391デフォルトの名無しさん:2009/04/03(金) 21:16:45
DXUTって超便利じゃん
392デフォルトの名無しさん:2009/04/04(土) 13:15:49
あるサイトのサンプルなのですが

//アニメーショントラックを得る
for(DWORD i=0;i<pAnim->pAC->GetNumAnimationSets();i++)
{
pAnim->pAC->GetAnimationSet(i,&pAnim->pAnimSet[i]);
pAnim->pAnimSet[i]->Release();
}

アニメーションコントローラーを設定した後リリースしてるのはなぜですか?
393デフォルトの名無しさん:2009/04/04(土) 14:22:17
>pAnim->pAC->GetAnimationSet(i,&pAnim->pAnimSet[i]);
で使い終わってるから
394デフォルトの名無しさん:2009/04/04(土) 14:31:00
>>393
ありがとうございます
395デフォルトの名無しさん:2009/04/04(土) 22:31:31
DirectDrawの終了処理でつまづいてます
gDraw->Flip( hwnd ); にて画面を更新しているのですが
whie(1)
PeekMessage( ...

をぬけると
最後に描画した gDraw->Flip( hwnd ); の画面が最前面に表示され
最後の画面が描画されたまま終了してしまいます

どう対処すればいいでしょうか?
396デフォルトの名無しさん:2009/04/05(日) 12:59:31
かなり初心者なのですが、ちょっと質問させてください。
ゲームで半透明処理をしているオブジェクトで、ドットをディザリングさせて半透明を
実現しているものをたまに見かけます。DirectXではないですがMGS4も半透明処理がディザしてます。

しかし多くのゲームではきちんとうまく半透明処理(アルファブレンディング?)をしているように見えるのですが
前者と後者はどのような処理方法でやっているのでしょうか?
またなぜわざわざ汚く見えるディザリングをやっているゲームがあるのでしょうか?

397デフォルトの名無しさん:2009/04/05(日) 13:49:18
>>396
ディザリングしてるゲームなんて見たことないんで適当なこと言うけど
半透明は描画順に依存するからじゃないか?
正しく半透明を描画するには奥から手前の順に描く必要があるので、
描画するときにポリゴン単位でソートが必要になる。
398デフォルトの名無しさん:2009/04/05(日) 16:41:03
いったんレンダーターゲットに不透明でレンダリングしてから
2D画像処理を掛けながらビルボードとしてゲームに乗せる。
本当に半透明で描画すると、透過中にjs目玉とか歯茎が透けて見えてキモイことになる。
399デフォルトの名無しさん:2009/04/05(日) 18:42:49
やっとSkinnedMeshから#include "SDKmisc.h"を除去できたぜ
400デフォルトの名無しさん:2009/04/05(日) 20:27:55
DXUT外しってムズイ?
401デフォルトの名無しさん:2009/04/05(日) 20:34:05
DXUTって外さないと何か問題とかあります?
402デフォルトの名無しさん:2009/04/05(日) 20:51:32
スキンメッシュの部分だけを抽出させるとソースがボッコボコになる。
DXUT自体不要な機能が多々あるので外したほうが無難。
自前で実装するために学ぶのにも役立つから最小構成にする価値は十分ある。
403デフォルトの名無しさん:2009/04/05(日) 20:59:54
#include "DXUTcamera.h"も外したぜ
DXUT.h外すのは一苦労
404デフォルトの名無しさん:2009/04/05(日) 21:30:32
てか、UT外すなら削ってくんじゃなくて
必要な部分だけのせていったほうが速いんじゃ
405デフォルトの名無しさん:2009/04/05(日) 21:49:03
早い云々よりも必要な部分が何なのかが理解できなくなるので抽出してくほうが為にはなるはず。
406デフォルトの名無しさん:2009/04/05(日) 21:51:09
削るとかの前に自前で最小実装した方が理解度が高まるかと
もうできるって?サーセンwww
407デフォルトの名無しさん:2009/04/05(日) 21:55:33
必要な部分ってどこだよぅ
>>270はSDKサンプルそのままで縮めてほしかったな
自作クラスとか使ってたら余計理解できん
あとSDKサンプルでは読み込めて表示できるファイルが表示できなくなってるのはマイナス
408デフォルトの名無しさん:2009/04/05(日) 22:04:13
なに?なんで
いきなり>>207の話になってんの?
409デフォルトの名無しさん:2009/04/05(日) 22:08:09
>>406
自前で実装するためにDXUTを必要最小限にするのが正しいかな。
削らない状態で参考にするのは容易では無いし、逆に何も参考にする必要が無いほどの技術者ならスレ違い。
410デフォルトの名無しさん:2009/04/05(日) 22:12:53
>>270のサンプルはたしかに一部ファイルは表示できたが
SDKサンプルで表示できる物全てに対応してないから没

SDKサンプルからDXUT.h、DXUTcamera.h、SDKmisc.hを外して
d3dx9.hとSkinnedMesh.cppだけで動作するようにしてくんないと初心者は付いて行けないぞ
411デフォルトの名無しさん:2009/04/05(日) 22:37:14
>>266に書いてるじゃんか

>全てに対応してないから没
>初心者は付いて行けないぞ
www

どういうのがほしいんだい?

後でこうでないから〜とか
ならないよううに、よ〜〜く
考えて書いてねw
412デフォルトの名無しさん:2009/04/05(日) 23:24:38
自作クラスとかは使わないでね
413デフォルトの名無しさん:2009/04/06(月) 11:41:24
270で表示できないのがあるのって注意書きにも書いてあったけど
あるifに対応するelseの部分がまんま空白になってるからだ
そこを埋めるのはたいした作業じゃないんだけど、どうしても分からないなら頼んでみたら
まだここみてるかわからんけど
414デフォルトの名無しさん:2009/04/06(月) 19:31:10
自分でやってこそ、身に付くという物だ
したがって要らぬ世話はしなくて良い
415デフォルトの名無しさん:2009/04/06(月) 19:45:54
D3DXVec3TransformCoordって
vec.x = (vec.x * mat._11) + (vec.y * mat._21) + (vec.z * mat._31) + ( 1 * mat._41);
vec.y = (vec.x * mat._12) + (vec.y * mat._22) + (vec.z * mat._32) + ( 1 * mat._42);
vec.z = (vec.x * mat._13) + (vec.y * mat._23) + (vec.z * mat._33) + ( 1 * mat._43);
のあとに何をやれば再現できる?
vecはD3DXVECTOR3
matはD3DXMATRIX
416デフォルトの名無しさん:2009/04/06(月) 20:07:15
const double w = (vec.x * mat._14) + (vec.y * mat._24) + (vec.z * mat._34) + ( 1 * mat._44)
vec.x /= w;
vec.y /= w;
vec.z /= w;

で再現できるお
417デフォルトの名無しさん:2009/04/06(月) 20:36:31
>>399
うpしてください!
418デフォルトの名無しさん:2009/04/06(月) 20:59:15
DXUT外したベース集つくらない?
419デフォルトの名無しさん:2009/04/06(月) 21:02:27
DXUTはずしたところで、似たような別なコード書いただけじゃないの?
外す意味がわからないんだが
420デフォルトの名無しさん:2009/04/06(月) 21:09:49
DXUTのせいで初心者は理解できんのだ
外す事には大いに意味がある
421デフォルトの名無しさん:2009/04/06(月) 21:17:34
誰かサイト作ってくれよ
言いだしっぺの俺からうpしていくから
422デフォルトの名無しさん:2009/04/06(月) 21:18:19
>>1のテンプレに載るまとめサイトみたいなやつな
423デフォルトの名無しさん:2009/04/06(月) 21:50:43
424デフォルトの名無しさん:2009/04/06(月) 21:52:51
SDKのバージョンとかの互換の問題でgdgdになりそうな悪寒
425デフォルトの名無しさん:2009/04/06(月) 22:33:40
ConvertToIndexedBlendedMeshの自前版て欲しい?


426デフォルトの名無しさん:2009/04/06(月) 22:35:41
何でもいいからほしい
とにかくとりあえずデータベースで収集したい
427デフォルトの名無しさん:2009/04/06(月) 22:45:45
動画編集ソフトのようなものを作ろうとしていて
DirectShowのサンプルグラバから受け取ったデータを
DirectSoundを使って再生したいんですが
どうすればいいですか?
428415:2009/04/06(月) 23:33:17
>>416
ありがとうございます!
無事に出来ました
429デフォルトの名無しさん:2009/04/07(火) 16:49:30
Windows XP SP3、DirectX 9.0c(Mar 2008) という環境で
フルスクリーンモードで作っているのですが
640x360という解像度で実行しようとすると、エラーも出ずに
止まってしまって実行できません
どうすれば640x360という解像度をフルスクリーンで作れますか?

ちなみに、モンハンのベンチマークで640x360のモードで実行できるので
ビデオカードのドライバが対応してないという事も無いようです
430デフォルトの名無しさん:2009/04/07(火) 17:37:22
とりあえず、デバッグランタイムで動かしてみて、エラーメッセージ全部見る
431デフォルトの名無しさん:2009/04/07(火) 18:43:27
640x350なら聞いたことあるけど360なんてほんとにあるの?
432デフォルトの名無しさん:2009/04/07(火) 18:52:49
内部動作が不明な他人の作ったものをどうこう言う前に、
まずはディスプレイモードの一覧を列挙しろよ。
なんでその程度のことすらやろうとしないんだよ?
433デフォルトの名無しさん:2009/04/07(火) 20:25:28
エラーは出てると思うけどな。
そのエラーをチェックすらしてないだけだろう。
434デフォルトの名無しさん:2009/04/07(火) 20:55:03
DirectSoundFullDuplexCreate8って難しいな
プライマリバッファはいらないってこと?キャプチャしながらエフェクトとか難しすぎる
directsoundって舐めてたけどスキンメッシュ並に難しいな
435デフォルトの名無しさん:2009/04/08(水) 02:29:58
DXUT外すのは無理だった
諦めた
436デフォルトの名無しさん:2009/04/08(水) 12:38:02
スキンメッシュ自体はそれほど難しくは無い
問題はDXUTが邪魔な事
437デフォルトの名無しさん:2009/04/08(水) 12:46:11
邪魔なら最初から使うな
438デフォルトの名無しさん:2009/04/08(水) 14:55:56
>>423
使い方わからなくて頭に来た
439デフォルトの名無しさん:2009/04/08(水) 15:14:35
まずは触ってみましょう
440デフォルトの名無しさん:2009/04/08(水) 15:31:19
>>437
最初から絡まってるから邪魔なんだよ
441デフォルトの名無しさん:2009/04/08(水) 17:13:03
SetRenderTargetを使ってテクスチャに描きたいのですが
スプライトのときは無視されて画面に表示されるです。

どうすけばいいですか?
442デフォルトの名無しさん:2009/04/09(木) 07:42:11
ざまぁwwww
443デフォルトの名無しさん:2009/04/09(木) 07:58:24
DirectXにスプライトなど無い
444デフォルトの名無しさん:2009/04/09(木) 08:28:38
ID3DXRenderToSurface
445デフォルトの名無しさん:2009/04/09(木) 08:42:17
>>441
首から下パホイホイ溶岩に埋まって悶え苦しみながら死ねばいいと思うよ。
446デフォルトの名無しさん:2009/04/09(木) 09:07:28
パホイホイ萌えが俺以外にもいたとはな
447デフォルトの名無しさん:2009/04/09(木) 12:31:41
>>440
抜けばいいんだよ
448デフォルトの名無しさん:2009/04/09(木) 13:10:54
このスレ的にスプライトはタブーだから
449デフォルトの名無しさん:2009/04/09(木) 13:33:37
いんねんつけてくる奴がいるからなw
450デフォルトの名無しさん:2009/04/09(木) 20:34:44
VC++.NETでポリゴンのモデリングツールを作ろうと足掻いてます。
(メタセコなどの存在は知っていますが自分好みのを作りたいのです。)

しかしmeshというものがいまいち理解できません。
頂点バッファなどの内容をあえてmeshで管理する利点があるのでしょうか?
形状作成機能でティーポットなんて作っても仕方が無いし、
ネットで調べても外部ツールで作成したXファイルを読んでといった説明ばかりで、
meshデータに対して頂点追加や編集したりといったものを見付ける事が出来ませんでした。
451デフォルトの名無しさん:2009/04/09(木) 20:44:15
>>447
抜けれないから困ってんだよ
452デフォルトの名無しさん:2009/04/09(木) 20:57:46
>>450
D3DXMeshのことを言ってるんなら
俺みたいな馬鹿が簡単にポリゴンを描画できるようにしたもの
だから頂点を編集するような機能がほしければ自分で頂点バッファを管理するべき
453デフォルトの名無しさん:2009/04/09(木) 21:15:06
>meshで管理する利点
meshはmeshを含めれるので
頂点バッファとかの管理が楽になる
454デフォルトの名無しさん:2009/04/09(木) 22:31:54
>>450
それ以前の問題として、チュートリアルはきちんと終わらせたのか?
455デフォルトの名無しさん:2009/04/10(金) 00:56:41
D3DXは使うなと何度言わせれば気が済む
456デフォルトの名無しさん:2009/04/10(金) 01:00:26
メッシュの頂点バッファとかインデックスバッファ取得する関数あるだろ
それ使えばいいじゃん
457デフォルトの名無しさん:2009/04/10(金) 01:42:31
>>456
それって頂点の追加できたっけ
458デフォルトの名無しさん:2009/04/10(金) 05:20:42
DirectSoundでキャプチャしながらエフェクト再生するのはDirectSoundFullDuplexCreate8じゃないとできない?
DirectSoundFullDuplexCreate8がどうもうまくいかないからDirectSoundCaptureCreate8でキャプチャして他に作ったセカンダリバッファに渡してエフェクトかけて再生しようと思うんだけどできますか?
459450:2009/04/10(金) 06:18:12
ある程度概要を流し読みしてドロウイングツールをLine文で作ってたときのような感覚で
ぶっつけ本番いこうとしてます。

やっぱり頂点バッファやインデックスバッファでやればいいんですね。
そもそもモーフィング的なこともするつもりだから全頂点の移動などもやらないといけないし。
あえてメッシュが存在してるのはビデオカードのハード的な面で
大きな利点があるのかと思ってました。
ありがとうございました。
460デフォルトの名無しさん:2009/04/10(金) 07:52:06
頂点バッファやインデックスバッファを統合したものがメッシュなんだが、
いったい何を言ってるんだ?
461デフォルトの名無しさん:2009/04/10(金) 08:04:45
ただの思い込みだろ?突っ込んでやるなよ・・・・
462デフォルトの名無しさん:2009/04/10(金) 18:00:20
スキンメッシュからDXUT除去してくれ
463デフォルトの名無しさん:2009/04/10(金) 22:51:59
DXUT外す手間をかける時間があれば、自前のスキンメッシュ作れるんじゃね?
464デフォルトの名無しさん:2009/04/10(金) 22:55:50
ならスキンメッシュの仕組みと実装例が詳しく載ってる資料を下しあ
465デフォルトの名無しさん:2009/04/10(金) 22:57:29
カスはどこまでも他力本願だな
466デフォルトの名無しさん:2009/04/10(金) 23:13:37
スキンメッシュ部分を自作プログラムに組み込んだが上手く行かない
エラーで強制終了する
どの部分をどうやって使うのか
実装サンプルくれよーーーーーーーーーーーーーー
467デフォルトの名無しさん:2009/04/10(金) 23:45:40
LWS→自前形式変換ツールの95%がd-stormのdevkitをまんまぱくったやつでな。
468デフォルトの名無しさん:2009/04/10(金) 23:46:29
ソースコードの分量の話な。
469デフォルトの名無しさん:2009/04/11(土) 00:19:42
複数のアニメーションを含んだXファイルをDirectX Viewerで全て確認することは出来ないのでしょうか。
470デフォルトの名無しさん:2009/04/11(土) 00:30:42
出来る
471デフォルトの名無しさん:2009/04/11(土) 03:52:14
ソースを見る限りアニメーションを変更してる箇所はなさそう
てか、ツールも全部ソースついてるんだから書き換えてカスタマイズすればいいじゃない
472デフォルトの名無しさん:2009/04/11(土) 07:17:33
レスありがとうございます。
自前で再生は出来ているので、軽量化して代用しますわ。
473デフォルトの名無しさん:2009/04/11(土) 09:37:45
■警察が自殺と断定、または事件性が無いと判断したもの

├自動車事故で胸部大動脈損傷したあと5キロほど車を運転して、橋の欄干から5mほど飛行して投身自殺した自衛官

├400kgの重りを自分で身体に縛り付けて海に飛び込んだ高校生

├時速80キロで、ガードレールとガードレールのわずかな隙間を
│タイヤ痕ひとつ残さない絶妙な運転テクニックですり抜けて50m下へ転落したナース集団

├ロープを首に巻いて空中浮揚し門扉にひっかかったタクシー運転手

├証拠品の銃を奪い取って別の袋から再装填しわざわざ離して自分の
│胸に発射、ただちに飛び散った血をふき取って取調室を掃除、この間5秒。

├逆立ちしてマンションの窓際まで、指でひきずった跡をつけながら歩行、
│足から逆エルードして手すりにぶら下がり、空中で方向転換して50cmの隙間に向けて飛行した市議会議員

├わざわざ動脈と反対側の手や腕の甲を切って自殺しようとするも未遂、
│自分で自分の背中に針金でおもりを結びつけて川にうつぶせになり死亡

├火の気のない玄関で人体発火現象を起こして、燃え尽きるまで気管に煤が入らないようじっと息を止めて待ってた審査委員長

├手首の甲をリスカして全身をメッタ刺ししてから、血の跡ひとつつけずに非常ボタンを押した証券会社副社長 

├口の中に靴下を入れたままガムテープで口を塞ぎ、両手を後ろで手錠により
│拘束し左手には手錠の鍵を持ち玄関内で衣服の乱れもなく窒息死した記者

└玄関と窓、共に無施錠のまま首に電気コードを巻かれ、寝室に血痕を残した上で2階から落下したネイリスト
474デフォルトの名無しさん:2009/04/11(土) 09:38:32
いままでの警察に自殺と発表された例

* 大阪、タクシー運転手 - 首にロープを巻いて、家の門扉の前でジャンプしロープを門扉にひっかけて首吊り。門扉の高さは数mあった。
* 東京、アフガン航空常務 - 全財産をつぎ込んだFX取引きで失敗し、社内で自分の心臓を刺してから窓枠を乗り越えて離陸。
* 大阪、社長 - 全身をロープと粘着テープで縛って、ビル屋上の鉄柵を飛び越えた。
* 千葉、少年 - 全身をロープと手錠で縛って、柵に囲われた線路に飛び込み。
* 東村山市議 - 逆立ちしてマンションの窓際まで、指でひきずった跡をつけながら歩行、足から手すりにぶら下がり、空中で方向転換して50cmの隙間に向けて飛行。
* 沖縄、社長 - 全身をめった刺しにして自殺。背中や手の甲もきちっと刺してあった。血の跡ひとつつけずに非常ボタンを押した。
* 大阪、潜水ルポライター - 水深数十センチの川で全身を縛ってめった刺しにしてからうつぶせに水中に横たわった。ご丁寧に背中に重しまで乗っけた。
* 神戸、ヤクザ - 自分で自分の首をはねて自殺した。首はみつかっていない。
* 東京 - 火の気のない玄関で人体発火現象を起こして、燃え尽きるまで気管に煤が入らないようじっと息を止めて焼身自殺。
* 愛媛 - 風呂場で自分で自分の頭をハンマーで殴り自殺。
* 茨城、おばさん - 首吊りしたあと歩いて川に入り息を止めて自殺。気管には水なし。
* 熊本 - 某病院主要関係者を乗せ、峠道を時速80キロで、ガードレールのわずかな隙間をタイヤ痕ひとつ残さない絶妙な運転テクニックですり抜けて50m下へダイブ。
* 福岡、高校生 - 400kgの重しを抱いて海に飛び込む。
* 東京 - 頭に穴があく不思議な方法で首吊り。
* 千葉 - 首吊りをしてからわざわざ飛び降り自殺。死因は飛び降りではなく窒息。
* 名古屋 - 車で首吊りをしようとして首を切断。しかし、首がないまま駐車、車庫入れをこなす。
* 大阪 - 歩道橋から飛び降り自殺するも、なぜか歩道橋から45メートル離れた路上で発見される。
475デフォルトの名無しさん:2009/04/11(土) 19:47:59
スキンメッシュからOnFrameMoveを除去したぜ
476デフォルトの名無しさん:2009/04/11(土) 22:06:16
さらにOnCreateDeviceとOnResetDeviceも除去
477デフォルトの名無しさん:2009/04/11(土) 22:23:46
それは報告しなくていいです。
478デフォルトの名無しさん:2009/04/11(土) 22:30:19
スキンメッシュ部を抜き出し
そろそろ自作プログラムで実装できそうだ

いや〜ここまでが長かったなぁ
デバイスロスト処理しないと一々メッセージウインドウでるんだな
479デフォルトの名無しさん:2009/04/12(日) 11:52:30
フライトシミュレータで誘導ミサイルの軌跡を煙のビルボードで表示しているのですが、
一定時間で削除したり、遠いものは簡略化しても、
ミサイルの数によっては大量になりすぎてしまいます。
ビルボードを置く間隔を広くすると、煙の軌跡がつながって見えず、点線のようになってしまいます。
エースコンバットなどではどのような方法で表示しているのでしょうか?
480デフォルトの名無しさん:2009/04/12(日) 16:49:46
明らかにスレ違いだけど参考程度に。

ミサイルの煙は1本のテープのように長い帯で描かれている。
それだと横から見たら棒線に見え、場合によっては見えなくなるので帯を十字に配置。
ただ1枚の帯を2倍にしただけで処理が増えるので
今は帯をビルボードにして常にこちらを向いている帯(煙)を演出している。
481デフォルトの名無しさん:2009/04/12(日) 17:18:25
場合分け。
基本は帯。射影後の制御点が一定距離以下ならば帯を薄くしてビルボードを置いてゆく。
もちろんいきなり切り替わりのでなく透明度を変化させる。
482デフォルトの名無しさん:2009/04/12(日) 19:21:30
画面全体を覆う煙のテクスチャを用意して
ミサイルの軌跡を求めて、ピクセルシェーダー使って軌跡との距離によって透明度を上げていく
そうすれば1枚のテクスチャしか使わなくていいんじゃないか
483デフォルトの名無しさん:2009/04/12(日) 19:32:23
煙にテクスチャを何枚も使うことは少ないよ。
1枚のテクスチャに煙をアニメーションさせる絵を収めている感じかな。
バンプすら使わなかったりするし。
484デフォルトの名無しさん:2009/04/12(日) 20:30:49
なんでデバイスがロストしちゃうの?
485デフォルトの名無しさん:2009/04/12(日) 20:51:57
なんで人間は死んじゃうの?
486デフォルトの名無しさん:2009/04/12(日) 22:01:18
DirectX11に期待
487479:2009/04/12(日) 22:08:26
>>480-483
ありがとうございます。参考にさせていただきます。
488デフォルトの名無しさん:2009/04/12(日) 22:35:59
デバイスのロストって8から?
489デフォルトの名無しさん:2009/04/12(日) 23:07:46
デバイスのロストっていうか
DiectDraw時代はサーフェースのロストって言ってたな
490デフォルトの名無しさん:2009/04/12(日) 23:30:05
>>488
初期〜9まではロストする。
491デフォルトの名無しさん:2009/04/13(月) 07:00:45
10はロストしないの?何故?
492デフォルトの名無しさん:2009/04/13(月) 08:44:33
9Exもロスとしないよ
493デフォルトの名無しさん:2009/04/13(月) 08:54:17
>>491
ドライバモデルの大幅な変更があったからな。
494デフォルトの名無しさん:2009/04/13(月) 12:50:35
9EXって何?
495デフォルトの名無しさん:2009/04/13(月) 14:00:08
IDirect3DDevice9Exのことじゃね
俺使ったこと無いけど
496デフォルトの名無しさん:2009/04/13(月) 14:03:53
デバイスロストってのはVRAMの仕切り直しだからな
497デフォルトの名無しさん:2009/04/13(月) 14:22:24
昔の3Dゲームでよく一枚のポリゴンにテクスチャを張り付けて木や草などを表現していたと思うのですが、
あの手法ってなんていうんでしたっけ?
以前本で見た気がするのですが、今手元になく思い出せなくて困っています。
恐らく誰でも知ってるような名前だったと思うのですが、教えていただけますか?
498497:2009/04/13(月) 14:32:05
すみません、今思い出しました、ビルボードです。
お騒がせしてしまい、申し訳ありません。
499デフォルトの名無しさん:2009/04/13(月) 19:14:08
書いてから気づくことはよくある。
500デフォルトの名無しさん:2009/04/13(月) 19:27:15
書き込んでから10分ぐらいかけてれば尚更だな。
501デフォルトの名無しさん:2009/04/13(月) 21:35:35
9EXはロストはしないけどVista以降専用じゃないっけ?
なら最初から10使えよっていう。
502デフォルトの名無しさん:2009/04/14(火) 10:16:26
ハードの問題もあるし
503デフォルトの名無しさん:2009/04/14(火) 10:18:02
directsoundってチュートリアルとか解説本にプライマリバッファを作るところから始まってるけどネット上のサンプル見るとプライマリバッファに触れてないのが多いんだけど
内部でプライマリバッファが自動的に作成されてたりするのかな?
504デフォルトの名無しさん:2009/04/14(火) 18:22:40
効果音は普通、セカンダリバッファを使う
505デフォルトの名無しさん:2009/04/15(水) 00:20:37
>>441
Draw呼んだらキューに積むだけで
Endのとき処理されるから。
506デフォルトの名無しさん:2009/04/15(水) 14:13:57
ttp://www1.axfc.net/uploader/Ne/so/50100

上記ページにプロジェクトを載せております。
この自作ソースを生かして、
方向キーを押したらキャラクターがそちらを向きその直進方向に前進するようにしたいのですが、
カメラの向きに上下左右共動いてしまい、思うようにキャラクタが動いてくれません。
この原因は何でしょうか。
また、キャラクタが向いてる方に直進するようにするにはどうすればいいでしょうか。
昨日一日悩んだのですが、思うようにソースコードが書けず困っています。
どなたか教えてください。

現状ソースではRが右周り、Wが左回り、方向キーが上下左右の動きとなっております。

開発言語はC++ 開発環境はVisual C++ 2008 Express Edition OSはWindows XP です。
507デフォルトの名無しさん:2009/04/15(水) 15:08:13
あちこちいじってエラーを打開できたんだけどどうしてできたのかわからん
いじって戻していじって戻してって結局最初のソースのはずだけどなぜか正常に動いてる
こういう場合どうやってできたのか知る方法ない?
508デフォルトの名無しさん:2009/04/15(水) 15:10:16
同じようにいじって動かなくして見る
509デフォルトの名無しさん:2009/04/15(水) 15:12:40
ビルドする度にバックアップとる
510デフォルトの名無しさん:2009/04/15(水) 15:17:20
バックアップつーか、Subversionでも入れてビルドのたびにコミットしとけばいい。
VS使ってるならAnkhSVNいいぞ
511デフォルトの名無しさん:2009/04/15(水) 18:03:15
>>506
三角関数は知ってるよな?

http://www1.axfc.net/uploader/He/so/217096.txt
512デフォルトの名無しさん:2009/04/15(水) 18:10:22
>>511
解決しました。
一応数学は微分積分学、線形代数学まで学んでおりますが、
誰からもDirectX自体教わったことがないので手探りで勉強しております。

ありがとうございました。
513デフォルトの名無しさん:2009/04/15(水) 18:13:53
3D描画の各座標変換について学べばいいんではないだろうか。
514デフォルトの名無しさん:2009/04/15(水) 18:33:47
スプライトのゲームなんだけど一枚の画像に
何種類かの絵が描いてあって常に足踏みをしながら
上下左右に動いた宝庫煮を向くにはどうすればいいの?
515デフォルトの名無しさん:2009/04/15(水) 18:40:39
スレ違い
516デフォルトの名無しさん:2009/04/15(水) 18:42:32
Direct3Dなんですが?
517デフォルトの名無しさん:2009/04/15(水) 18:46:31
DirectX関係ない一般的な話なきがするが。
元絵の描画範囲指定すれば済む話だべ。
具体的なコードが出てくるのなら、DirectX関連として話してもいいのかもしれない。
518デフォルトの名無しさん:2009/04/15(水) 19:09:17
Direct3Dにスプライトなど存在しない
519デフォルトの名無しさん:2009/04/15(水) 20:00:05
ゲームのビルボードなんだけど一枚の画像に
何種類かの絵が描いてあって常に足踏みをしながら
上下左右に動いた宝庫煮を向くにはどうすればいいの?
520デフォルトの名無しさん:2009/04/15(水) 20:31:17
コピー元テクスチャの矩形範囲を適当に選ぶだけ。
521デフォルトの名無しさん:2009/04/16(木) 17:53:17
ものっ凄い初心者質問ですが教えて下さい。

メタセコイアなどだと「材質」はポリゴンの板単位で設定してます。
でもDirectxの頂点データはバーテックス一個単位でカラーやら反射光を持ってます。
これはメタセコイアの場合、例えば違う材質同士に所属するバーテックスが有る場合は、
描画する際にその都度該当頂点データを書き換えることで、グラデーションにならない二色にくっきり分かれたポリゴンを
描画しているんでしょうか?

もしそうだとするとポリゴン数がどんどん増えてきた場合に、毎回頂点データを上書き処理が走るという
えげつない事をやっていると思っていいのでしょうか?

実際にゲーム作成する場合もデータ削減のためにポリゴン単位で材質管理して描画の都度に頂点データ上書きなどを
しているのでしょうか?
頂点データの上書き無しに描画しようとすると、例えば
□■
と二面のポリゴンがあって■が通常、□がツヤツヤの場合、
くっきりとした区切りの無い徐々にツヤツヤになる描写になってしまうかと思います。
522デフォルトの名無しさん:2009/04/16(木) 18:42:03
材質が違う所は頂点をダブらせれば?
523デフォルトの名無しさん:2009/04/16(木) 19:36:19
HLSL使えばいいのに
524デフォルトの名無しさん:2009/04/16(木) 20:40:53
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

↑コンパイルできないのですがなぜでしょうか?
環境はVC2008++でdirectX9SDKです。
追加の依存ファイルにはdxerr.lib dxguid.lib d3dx9.lib d3d9.lib winmm.libを指定しています。
エラー内容は、
'g_pD3D' : 定義されていない識別子です。
'D3D_SDK_VERSION' : 定義されていない識別子です。
'Direct3DCreate9': 識別子が見つかりませんでした
525デフォルトの名無しさん:2009/04/16(木) 20:45:10
ヘッダがインクルードされてないだけじゃ?
526デフォルトの名無しさん:2009/04/16(木) 20:47:46
>>525
ヘッダはwindows.hをインクルードしていますが他に何か必要なものがあるのでしょうか?
527デフォルトの名無しさん:2009/04/16(木) 20:54:30
d3d9.hとd3dx9.hとdxerr9.h入れとけば大丈夫かと
528524:2009/04/16(木) 20:58:17
>>527
ありがとうございます。おかげで2個のエラーを解決できました!!

しかし1つだけエラーが残ってしまいました。↓
'g_pD3D' : 定義されていない識別子です。
よければこちらの解決法もご教授願います
529デフォルトの名無しさん:2009/04/16(木) 21:11:01
#include <dxerr9.h>
extern int g_pD3D;
530524:2009/04/16(木) 21:20:52
>>529
やってみたのですが78行目「if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )」をさしてエラーが発生しました。
内容⇒  '=' : 'IDirect3D9 *' から 'int' に変換できません。

まあ、自分でもう少し解決策を探してみます。
ご指導くださった皆さんありがとうございました。
531デフォルトの名無しさん:2009/04/16(木) 21:21:36
もはやDirectX以前の問題
そもそも宣言すらされてない予感
LPDIRECT3D9 g_pD3D;
ってどっかにあるか?
別ソースファイルにあったりしないか?
532デフォルトの名無しさん:2009/04/16(木) 21:23:15
g_pD3Dは個人が作った変数なんだからどこかで宣言しないとだめなのは読みとろうや。
変数の型はDirect3DCreate9の戻り値の変数と同じ。
エラーにも出ているのに解決策を探るとかそういう問題じゃないだろうに。
533デフォルトの名無しさん:2009/04/16(木) 21:54:14
コピペだけじゃなくて理解しようとしなきゃ知識にはならんぞ
534デフォルトの名無しさん:2009/04/17(金) 00:00:08
if( NULL == ( g_pD3D = (int)Direct3DCreate9( D3D_SDK_VERSION ) ) )
535デフォルトの名無しさん:2009/04/17(金) 13:01:59
テクスチャにライティングする時はどこで計算すればいいんですか?
ピクセルシェーダでテクスチャの値に法線を使ってかけ合わせるんですか?
536デフォルトの名無しさん:2009/04/17(金) 13:14:43
法線と光源方向の内積をテクスチャの値にかける
537デフォルトの名無しさん:2009/04/17(金) 13:25:49
ピクセルシェーダで内積の計算までさせるんですか?
どこかでピクシェルシェーダは遅いと書いてあったんですが、
マルチテクスチャで光テクスチャと絵テクスチャをブレンドしてピクセルシェーダに渡すとかもヘルプに書いてあったんですが
意味がわかりません、頂点シェーダで光テクスチャを法線から作りだすことができるってことなんでしょうか?
538デフォルトの名無しさん:2009/04/17(金) 13:58:39
頂点シェーダーでやるなら頂点のカラー出力に内積結果を放り込んで
ピクセルシェーダーでそのカラーとテクスチャカラーを掛け算するだけ

光テクスチャ?ライトマップの事かな
どっちにしても頂点シェーダでテクスチャは作れません
539デフォルトの名無しさん:2009/04/17(金) 16:48:51
だからその矩形を選ぶのにどう計算すれば
左向きの右足左足、右向きの右足左足…略
になるのかと聞いているのだが?
540デフォルトの名無しさん:2009/04/17(金) 16:50:06
しかもそれがキャラクターの数だけ存在するし
541デフォルトの名無しさん:2009/04/17(金) 18:00:54
>>538
thxわかってきました
光源が移動しないものに関しては初期化時に一度だけCPUで光テクスチャを作ってマルチで渡して、
変化があるが全体的な光は頂点シェーダで計算してプリミティブ単位の大雑把なライティングにして、
細かい物でしかも変化のあるものはグラデーションなどもできるようにピクシェルシェーダでピクセル単位で計算すればいいんですね
もう完璧ですありがとうございました
542デフォルトの名無しさん:2009/04/17(金) 23:14:29
すみません。レンダリング理論は完全に精通したのですが
プコリンパイルヘッダーが見つからないのですが
543デフォルトの名無しさん:2009/04/17(金) 23:18:16
ユウコリンパイルヘッダー

・・・次の方どうぞ
544デフォルトの名無しさん:2009/04/18(土) 19:13:27
頂点シェーダに1頂点送った後、戻り値をピクセルシェーダに送った時のピクセルシェーダの処理はどうなってるんですか?
補間されると書いてあるんですが、頂点シェーダから3頂点送られてくるまでピクセルシェーダは待ってくれるんですか?
1頂点で補間ってイメージできないんですが、どうなってるんでしょうか
545デフォルトの名無しさん:2009/04/18(土) 19:31:47
おちついて自分の文章読み直して推敲してみろ

エスパーするが、シェーダ云々以前にDirect3Dが描画する基本単位は
『頂点』ではなく『頂点三つからなる三角形』だ。
546デフォルトの名無しさん:2009/04/18(土) 19:49:10
わかりません、VertexShaderの引数にたとえば
float4 VertexShader(float4 Position : POSITION) : COLOR
とすると
VertexShader関数に送られるのは1頂点づつですよね、でreturnされたものが
float4 PixelShader(float4 Color : COLOR) : COLOR
の引数Colorに入れられるまでが1頂点じゃないんですか?
pass一回で指定した数のプリミティブを送ってるのはわかるんですが、データの流れが1頂点づつに見えるんです
547デフォルトの名無しさん:2009/04/18(土) 20:13:15
>>546
頂点を1つづつVertexShaderで処理し終わったら、
VertexShaderから3つの頂点を与えられた「ラスタライザ」というユニットが
それの中を補完し、ラスタデータ単位で、PixelShaderに与えるんだ。
だからPixelShaderの引数は頂点でもポリゴンでもない。
ラスタデータだ。(ラスタデータからピクセルデータを作るからPixelShaderっていうんだよ。)

ちなみにラスタデータってのはピクセルのように必ずしも色じゃないんだが、
色を作るための情報をピクセルと同じように、
平面を分割するという方法で持ってるデータだな。
たとえばテクスチャのUV値なんかも、ラスタデータは持てる。
これは色じゃないが、ピクセルシェーダによってテクスチャを引いてくりゃ色になるだろ。
548デフォルトの名無しさん:2009/04/18(土) 20:33:22
なるほどわかりました。1頂点づつVS、PSをループしてると思ってました。
すごくよくわかりました。ピクセルシェーダを使いこなせるのは当分先なこともわかりました。
ありがとうございました!
549デフォルトの名無しさん:2009/04/18(土) 23:40:29
基本的に一週間ごとにループするのですが
祠に入れたものは引き継ぐ方法はありますか?
550デフォルトの名無しさん:2009/04/18(土) 23:51:50
お前の適応係数高そうだなw
551デフォルトの名無しさん:2009/04/19(日) 08:33:17
>>549
意味は判るが意味が全く判らんw
552デフォルトの名無しさん:2009/04/19(日) 15:42:36
すみません。ラスタライザの動作原理については完全に精通したのですが
学校を中退することにしたので作る必要がなくなりました
553デフォルトの名無しさん:2009/04/19(日) 15:47:04
passでテクスチャを描画した後に、半透明ONにしてD3DBLEND_SRCCOLORでVSで作った
float4(1.0, 1.0, 1.0, 0.2) : COLOR
をそのままPSに贈ったんですが、テクスチャと合成されません。テクスチャ描画の前に半透明ONにすると下まで全部透けるので上乗せしたいCOLOR
のアルファ値でテクスチャの色合いを変化させたいんですが、アルファ値1.0より小さくしてもテクスチャが透けないんです。どうなってるんですか?
554デフォルトの名無しさん:2009/04/19(日) 15:55:06
質問がおおざっぱだから間違いの原因が推測できなくて返事が来ないパターン。
555デフォルトの名無しさん:2009/04/19(日) 16:11:52
テクスチャ描画まではうまくいくんですが、パスCOLORがブレンドされないんです

Draw(){
パステクスチャで描画; // テクスチャは描画される
SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
パスCOLORで描画; // 一色で埋まるがテクスチャとブレンドされない
SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
}

//.fx
テクニック{
パステクスチャ{
VS
PS
}
パスCOLOR{
float4 VS(posision) : COLOR{return float4(1.0, 1.0, 1.0, 0.2)}
PS(float4 in : COLOR) : COLOR{return in}
}
}
556デフォルトの名無しさん:2009/04/19(日) 16:19:32
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
557デフォルトの名無しさん:2009/04/19(日) 16:29:21
なるほど!第2引数はどの値を使うかってことだったんですね
アルファ値で掛け合わされるのかと思いました、ありがとうございました。
もう少しで波に乗れそうなんです、またお願いします!
558デフォルトの名無しさん:2009/04/19(日) 17:22:44
波乗り野郎
559デフォルトの名無しさん:2009/04/19(日) 18:44:27
ポリゴン描画速度について教えてください。

D3DPT_TRIANGLELISTに比べて、D3DPT_TRIANGLESTRIPやD3DPT_TRIANGLEFANは劇的に高速になるのでしょうか?
もしそうであれば、例えば1万程度の頂点数の物体描画する時に、
全てD3DPT_TRIANGLELISTで描画せずに、インデックス情報組み立て時に、
物凄い工夫して分析して、出来る限りD3DPT_TRIANGLESTRIPやD3DPT_TRIANGLEFANで描ける部分を抽出し、
それぞれ別個に描画するという物凄い手間をかける価値はあるのでしょうか?
560デフォルトの名無しさん:2009/04/19(日) 18:51:57
描画の高速化が求められるような巨大なモデルをSTRIPやFANにいつでもわける方法がないので、
ごく限られた形状に対して最適化するのは可能です。
561デフォルトの名無しさん:2009/04/19(日) 19:00:26
可能なのは当たり前だろ
質問は
>価値はあるのでしょうか?
ほとんど価値はない。
562559:2009/04/19(日) 19:01:08
レスありがとうございます。
自分が考えてる最も簡単なものはTRIANGLELIST用グループとFAN用グループに分けて、
頂点からの接続ラインが一定数以上のものを検索してFAN用グループに移動。
これの繰り返しで例えば人体モデルなら全身に斑点が出来るようにFAN用グループが削り取られて、
余った部分をTRIANGLELISTで描画。

効果が絶大であればトライする価値があるかなと思いました。
563デフォルトの名無しさん:2009/04/19(日) 19:11:35
GAME PROGRAMMING GEMS の2巻以降って買う価値1と同じぐらいありますか?いきなり内容薄くならないですよね?
1に感動したのに12までこの濃さで続くんですか?最新から買うといいとかどっかで見たんですが1を読んだ後は1からだとしか思えません
564デフォルトの名無しさん:2009/04/19(日) 19:15:39
目次などを参考にして、あなたが必要とするものを手に入れればいいでしょう。
565デフォルトの名無しさん:2009/04/19(日) 19:19:15
図書館や本屋で立ち読みしてくればいい
田舎だと厳しいが
566デフォルトの名無しさん:2009/04/19(日) 19:29:23
これか
http://www.borndigital.co.jp/book/detail.php?id=157
赤字で書いてあるね。
1の次は最新刊買えば?
567デフォルトの名無しさん:2009/04/19(日) 23:44:40
シェーダー使用プログラムからシェーダー無しプログラムにする方法を教えて下さい
568デフォルトの名無しさん:2009/04/20(月) 00:15:33
無理デブ
569デフォルトの名無しさん:2009/04/20(月) 01:24:43
高速になる可能性があるのは、STRIPの飛び島のような群を縮退ポリゴンで連結し、
一回のDrawPrimitveで済ませるときだけ。それ以外は全敗北。

と4〜5年前は思っていたけど、いまでもこんな感じ?
570デフォルトの名無しさん:2009/04/20(月) 01:28:54
だいたい合ってる
スキンメッシュなんかはシェーダではやらない
何回も塗る必要があるからやっぱり汎用性重視
571デフォルトの名無しさん:2009/04/20(月) 01:51:36
俺はやるけど
572デフォルトの名無しさん:2009/04/20(月) 01:55:56
>>571
スキンをシェーダでやると
バンプ+スキン
バンプ+ノーマル
スペキュラ+スキン
スペキュラ+ノーマル



みたいにエフェクトごとにスキン有無全部作らないといけなくて面倒だぞ
まあ、面倒なだけだけど
573デフォルトの名無しさん:2009/04/20(月) 02:03:03
頂点変換部分とかを#defineで有り無しで分けといて、
バッチファイル使ってfxcで必要な分吐くだけなのに何がめんどいんだ?
574デフォルトの名無しさん:2009/04/20(月) 02:09:58
>>573
別にスキンメッシュに限らないけど
頂点変換あるたびそれ入れんのー?w
やりづれー
575デフォルトの名無しさん:2009/04/20(月) 02:11:25
単体ならシェーダが早いけど、
シャドウマップ×3・本体・本体鏡像 の例では5回もスキニングの計算やるより
自前でメモリ上に変換したやつを使った方がいいのだろうな。
DX10ならそれもHWでできるし。
576デフォルトの名無しさん:2009/04/20(月) 02:13:43
スキニングの]計算つってるけど数千頂点程度なら
VertexShaderの負荷なんてPixelShaderとか
αブレンドなんかに比べるとゴミみたいなもんだぞ。
577デフォルトの名無しさん:2009/04/20(月) 02:50:59
>>574
俺は簡単なシェーダジェネレータ作ってある程度自動生成させてるからそれほどでもない
578デフォルトの名無しさん:2009/04/20(月) 08:03:12
スキニングありが必須で、
スキニングなしのモデルは、
スキニングのウエイト数0とするのが吉
579デフォルトの名無しさん:2009/04/20(月) 11:17:33
FX Composer使いだしたら手書きとかすることなくなる?
580デフォルトの名無しさん:2009/04/20(月) 11:20:14
FX Composerは手書き用だろ?
581デフォルトの名無しさん:2009/04/20(月) 21:23:16
手書きがいやなら既存のエンジン使えってはなしだな
582デフォルトの名無しさん:2009/04/20(月) 23:02:40
ボーンの入ってないプレーンなメッシュを表示できるようになったので
マルチトラックのスキンメッシュをアニメーション表示するサンプルを勉強してますた
で、スキンメッシュそのものをアニメーションさせることはできるようになったんですが
そのコードにプレーンなメッシュも描画するコードを加えたところ、
スキンメッシュをDrawSubSetした後にプレーンなメッシュをDrawSubSetすると

0x7c812afb で初回の例外が発生しました: Microsoft C++ の例外: long (メモリの場所 0x0012fb28)。

と出力ウインドウに表示されてプレーンなメッシュのほうが表示されません
しかし、エラーでとまるわけでもなくスキンメッシュのほうだけは正常に表示されます
スキンメッシュかプレーンなメッシュか片方だけをDrawSubSetすると正常に表示されます

ぐぐったところBeginScene()とEndScene()の間でDrawSubSetしていなかったというブログはみつかったものの
コードを確認したところそのミスはしておらず、どこを修正すればいいのかわからなくて困っています
同じような症状を解決されたかたはいませんでしょうか?
583デフォルトの名無しさん:2009/04/20(月) 23:21:44
それはいくらなんでもコード出してもらわないと何も言いようがない
584デフォルトの名無しさん:2009/04/20(月) 23:34:32
DrawIndexedPrimitive で、複数の頂点ストリームから
インデックス形式で描画できないのでしょうか?
たとえば、頂点座標ストリームは0、法線ストリームは1、UVはストリーム2と指定して、
それぞれのインデックスを1,2,2 のように3つずつ与えて描画したいのですが
585デフォルトの名無しさん:2009/04/20(月) 23:35:52
頂点ストリームは分割できるがインデックスは1つだ。
586デフォルトの名無しさん:2009/04/21(火) 00:03:45
ありがとうございました
やっぱりできないのですね
これができればモデル容量をかなり減らせると思ったのですが
587デフォルトの名無しさん:2009/04/21(火) 00:20:40
588デフォルトの名無しさん:2009/04/21(火) 01:02:15
>>586
別々に指定してもせいぜい法線がちょっと減らせる程度だと思うが・・・。
そもそも別途頂点ごとにインデックスが必要になるから煩雑になるし。
589デフォルトの名無しさん:2009/04/21(火) 02:42:21
洋ゲーは断面がもてはやされて羨ましいよね。
日本だと俺がどれだけやりたがっても通らない。
デザイナーもやりたがらないし。
590デフォルトの名無しさん:2009/04/21(火) 06:45:36
>>579
出力するファイルが微妙だし、無料版は機能制限あるが、そういうのはmental millだな
591デフォルトの名無しさん:2009/04/21(火) 07:30:23
>>582
デバッグモードでエラーログみろよ
592デフォルトの名無しさん:2009/04/21(火) 11:02:03
>>589だって悪趣味じゃん
593デフォルトの名無しさん:2009/04/21(火) 11:05:31
断面って何の断面?
594デフォルトの名無しさん:2009/04/21(火) 11:06:59
>>587みたいなのだろ
595デフォルトの名無しさん:2009/04/21(火) 15:19:39
DS_INCOMPLETEを使うと、定義されていないとコンパイルエラーが出ますが、どこで定義されてるんでしょう?
MSDN見る限り値自体は0x08780014のようなのですが、これを使えばいいんですかね。
596デフォルトの名無しさん:2009/04/21(火) 15:42:07
ttp://msdn.microsoft.com/ja-jp/library/bb219707(vs.85).aspx

これか。
たしかにdsound.hにほとんど入ってるのにそれだけないな。
まあやってみれば。
597デフォルトの名無しさん:2009/04/21(火) 16:41:55
http://www.koders.com/c/fid7C7D7FB2A2198688B5ECA561C93F0A5BF2D011EB.aspx
の1931行目にはあるな

// The call succeeded, but not all of the optional effects were obtained.
#define DS_INCOMPLETE MAKE_HRESULT(0, _FACDS, 20)
598595:2009/04/21(火) 16:48:58
ぼくのDirectX SDK March 2009のdsound.hにはありませんね。
とりあえず、dsound.hのインクルードの後、定義されてなければ定義する方向でやってみます。
ありがとうございました。
599デフォルトの名無しさん:2009/04/21(火) 16:52:37
#define DIRECTSOUND_VERSION 0x0800 /* Version 8.0 */
9で無くなったのか
600595:2009/04/21(火) 16:57:58
ちなみに2009MarchSDK付属ドキュメントの"DirectSound Return Values by Nunber"には載ってました。
601582:2009/04/21(火) 19:43:21
事故解決しますた
スキンメッシュをDrawしたあと、
プレーンなメッシュをDrawするまえに
pDevice->SetRenderState(D3DRS_VERTEXBLEND, 0);
をすることでエラーでなくなりまつた
602デフォルトの名無しさん:2009/04/22(水) 00:06:36
セルフシャドーはどうやって作ればいいんですか?
603デフォルトの名無しさん:2009/04/22(水) 00:07:28
DirectXに手を出すならまずはこれっていう定番参考書ってありますか?
604デフォルトの名無しさん:2009/04/22(水) 00:08:26
ヘルプのチュートリアル
605デフォルトの名無しさん:2009/04/22(水) 00:27:35
SDKのサンプル
606デフォルトの名無しさん:2009/04/22(水) 02:46:21
DirectX Developer Blog
ttp://blogs.msdn.com/DirectX/

今のところ大した情報なし
607デフォルトの名無しさん:2009/04/22(水) 20:43:04
DirectX逆引き500
608デフォルトの名無しさん:2009/04/22(水) 21:25:02
Xファイルから属性テーブルを抜き出して
モデルを描画したいのですが、

pMesh->GetAttributeTable(NULL, &sz);
D3DXATTRIBUTERANGE* g_pAttrTable = new D3DXATTRIBUTERANGE[sz];
pMesh->GetAttributeTable(g_pAttrTable, &sz);

これで属性テーブルを抜き出した後どうすれば良いでしょうか?
DrawIndexedPrimitiveで使おうとするとエラーがでてしまいます
609デフォルトの名無しさん:2009/04/23(木) 03:17:53
D3DXATTRIBUTERANGE::FaceStartとFaceCountはポリゴン単位の数値で、
DrawIndexedPrimitiveのインデックスに使うにはFaceStart * 3, FaceCount * 3にする必要があるとかじゃね
610デフォルトの名無しさん:2009/04/23(木) 08:12:53
>>609
Count * 3でできました
ありがとうございます!
611デフォルトの名無しさん:2009/04/23(木) 18:40:36
directsoundで音声キャプチャしながら再生しようと思っています

キャプチャバッファ->Lock( g_dwNextCaptureOffset, lLockSize,
&pbCaptureData, &dwCaptureLength,
&pbCaptureData2, &dwCaptureLength2, 0L );

再生バッファ->Lock( 0, size, &pbPlayData, &dwPlayLength, &pDate, &dwLength, 0 );

再生バッファ->Unlock( pbPlayData, dwPlayLength, pDate, dwLength );

キャプチャバッファ->Unlock( pbCaptureData, dwCaptureLength,
pbCaptureData2, dwCaptureLength2 );

再生バッファをロックしたあとキャプチャバッファからデータをコピーしたいのですが上手くいきません。どなたかご教授おねがいします。
612デフォルトの名無しさん:2009/04/23(木) 23:11:24
http://market-uploader.com/neo/src/1240458618980.jpg
wwwwwwwwwwwwwwww
613デフォルトの名無しさん:2009/04/24(金) 00:41:55
すいません質問です。

DirectXでGPUで計算して頂点変換を行っているゲームを作っています。(固定変換ではなくシェーダーで)
一台目:グラボありのデスクトップパソコン
二台目:グラボなしのミニノートパソコン
でチェックをしています。

しかし現在だとノートだとグラボがない為、
バーテックスシェーダー・ピクセルシェーダーがバージョンが低く動かせません。

CPUで変換するとノートPCでもPCでも動くんですけど、
CPUじゃもちろんGPU変換ほど速度でませんよね?

市販の3DゲームはノートPCでもグラボありのデクストップでも両方動作してますが
それはグラボの有無を認識してCPUかGPU計算か判断してるのでしょうか?
それともノートでもバージョンによってはGPUの計算が出来るのでしょうか?

もし前者であればグラボの有無を確認する方法を教えてくれたらありがたいです。
後者であれば何かヒントをくれるとありがたいです。
614デフォルトの名無しさん:2009/04/24(金) 00:55:40
D3DVS_VERSION
D3DPS_VERSION
でぐぐれば幸せになれるかもしれない
615デフォルトの名無しさん:2009/04/24(金) 01:20:52
D3DCAPS9のVertexShaderVersionの値を見てみて判断しろってことでしょうか?
616デフォルトの名無しさん:2009/04/24(金) 08:52:34
>>613
ノートPCつってもネットブックやミニノートでもなきゃ
普通にビデオカード積んでるし。

ノート云々関係なくシェーダーのバージョンチェックはちゃんとするべき。
617デフォルトの名無しさん:2009/04/24(金) 09:16:43
オンボードのはカードと言わずチップと言う

             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
618デフォルトの名無しさん:2009/04/24(金) 11:51:35
ノートだったらチップセットに内蔵のだろ
619デフォルトの名無しさん:2009/04/24(金) 12:41:16
最近の上位ノートはちゃんとグラフィックチップ乗っけてるのが多いよ
グラフィックカードを買い換える気分でノートを買い換えたくなるから困る
620611:2009/04/24(金) 19:59:47
どなたかお願いします
そもそも再生バッファをロックしたあとn
621デフォルトの名無しさん:2009/04/24(金) 20:29:12
DirectShow使えば
622デフォルトの名無しさん:2009/04/27(月) 02:42:13
固定機能ではテクスチャを張った物体にライティングは適用されないんですか?
623デフォルトの名無しさん:2009/04/27(月) 02:46:49
ライトつくよ
624デフォルトの名無しさん:2009/04/27(月) 03:10:12
SetTextureStageStateで色を動的に変えていたのが原因でした。
625デフォルトの名無しさん:2009/04/27(月) 19:34:02
どういうこと?ループの外でライトの設定してループ内でテクスチャを切り替えてたってこと?
626デフォルトの名無しさん:2009/04/27(月) 21:33:10
D3DTA_DIFFUSEをかけ忘れて、D3DTA_TEXTUREとD3DTA_TFACTORだけかけていました
627デフォルトの名無しさん:2009/04/27(月) 21:36:16
シェーダに比べたら固定機能の方が複雑怪奇なのに
なんで初心者はそっちを選ぶの?
628デフォルトの名無しさん:2009/04/27(月) 22:02:55
最初の実装までが面倒
シェーダー言語の解説がほとんど無い
そもそも凝ったことするつもりが無い

この辺かな?
629デフォルトの名無しさん:2009/04/27(月) 22:41:24
ハードウェアシェーダがない…とか
630デフォルトの名無しさん:2009/04/27(月) 23:07:17
シェーダーの解説がないとかDirectX8時代じゃねんだぞ・・・
捨てるほどネット上に転がってるじゃねぇか。
631デフォルトの名無しさん:2009/04/28(火) 00:38:31
あるベクトルを基準としてもう一つのベクトルがx軸、y軸、z軸に何度回転しているか調べるってどうやれば出来ますか?
632デフォルトの名無しさん:2009/04/28(火) 00:41:30
それぞれの平面に射影して内積すりゃいいんじゃね
633デフォルトの名無しさん:2009/04/28(火) 00:42:46
>>631
1軸固定ならそれなりに楽なんだけど?
ホントに全部回転してなきゃダメなの?
634デフォルトの名無しさん:2009/04/28(火) 01:40:16
2軸の回転までなら連立方程式でいけるけど
何軸で回転してるのかすら分からないんじゃハイコストすぎて計算する気が起きない

たぶんだけど、ベクトルの回転角度が必要なんじゃなくて
ある方向を指すための回転ベクトルが必要なんじゃないの?
本当にやりたいことを省略せずに書いてごらん
635デフォルトの名無しさん:2009/04/28(火) 02:06:11
文章読む分には、ベクトル→オイラー角の変換がやりたいんじゃね?
どうやるんだったっけw
636デフォルトの名無しさん:2009/04/28(火) 02:11:15
ん。今思いついたけど、
ローテーションオーダー順に軸の向きを向くように回転させていけばいいだけじゃね?
だめ?
637デフォルトの名無しさん:2009/04/28(火) 02:20:57
深度バッファシャドウってどういう仕組みになってるのか全然わかりません
全ての頂点に1−0の範囲で深度値を作った後、光に遮られてるかどうかはどうやって計算すればいいんですか?
光点と調査点の間に遮蔽物があるかどうかを調べるには1調査点につき全ての存在する点を調べないといけなく無いですか?
ありえないんですけど、どうなってるんですか?
638デフォルトの名無しさん:2009/04/28(火) 02:26:13
頂点を作る時にUV座標有りと無しを混在させてまとめて渡すにはどうすればいいんですか?
複数面がある物体を点で手動で描いたんですが一部だけテクスチャを張り付けたくないんですが頂点タイプの混在をしたいんです
639デフォルトの名無しさん:2009/04/28(火) 02:55:39
とりあえず固定機能でやってるのかシェーダーでやってるのかくらい書こうぜ
640デフォルトの名無しさん:2009/04/28(火) 08:35:47
>>637
>全ての頂点に1−0の範囲で深度値を作った後、
これは、シャドウマップを作るってことでいいんだよな。
そのシャドウマップを作る為に求めた深度値を
各参照点につき、もう一度同じ計算で求め、深度値と比較する。
これはピクセルシェーダの工程だから、ピクセル毎に行う。

sShadowDepth = tex2Dproj( spShadowMap, vVertPosInLight );
sDepth = vVertPosInLight.z / vVertPosInLight.w;
sAlpha = sDepth > sShadowDepth : 0.0f : 1.0f;
641631:2009/04/28(火) 08:41:17
>>632,633
1軸固定して射影してあげればいいんですかね。試してみます。

>>634
はい、ある方向を指すための回転行列が欲しいです。

>>635
今後の勉強のためにベクトル→オイラー角のやり方を質問しました。
そして、オイラー角から回転行列を求めようと思っていました。

642デフォルトの名無しさん:2009/04/28(火) 08:52:06
>>641
ここをみると幸せになれるかも
ttp://marupeke296.com/DXG_No47_CharacterDirectionMatrix.html
643デフォルトの名無しさん:2009/04/28(火) 10:58:31
行列から角度を逆算する方法を模索中です。

只今、メッシュに親子関係を持たせるクラスを設計しています。
概ね描画も出来てroot(一番上の親)を回転や移動をすると、子や兄弟も
一緒に動くまでは、実装できました。
そこまでは、単純に行列の積で出せるので、出来たんですが。

そこから、当たり判定などをつける際に躓きました。
OBB判定などを行う場合メッシュの絶対位置や絶対スケール、
絶対角度が必要になってしまいます。
しかし、行列から位置は(mat._41,mat._42,mat._43)を取り出し、
スケールは、rootまでをたどり単純に掛け算をして求められたんですが(コストかかりすぎですが。。。)
角度だけがどうにもならず苦戦しています。

位置はよしとして、スケール及び角度をスマートに行列から逆算する方法はないでしょうか?

よろしくお願いします。
644デフォルトの名無しさん:2009/04/28(火) 11:06:20
OBBは姿勢(各メッシュのワールド行列)と
各軸のサイズが分かっていれば計算できるのになんで角度が必要なの?
645デフォルトの名無しさん:2009/04/28(火) 11:39:31
>>644
すみません、大きな勘違いをしてました・・・
自己解決しました・・スレ汚しすいませんでした・・・
646デフォルトの名無しさん:2009/04/28(火) 13:51:35
野暮なこと言うが
こういうのって絶対自己じゃないよな
自尊心が過大すぎるんだろう
647デフォルトの名無しさん:2009/04/28(火) 13:53:57
そもそも成分を分離して持っておけばいいだけなのに、
なぜか行列一本でやろうとして無駄なコストをかけようとするのが不思議でならない。
648デフォルトの名無しさん:2009/04/28(火) 14:25:43
姿勢の掛け算は行列の方が早いけどな
649デフォルトの名無しさん:2009/04/28(火) 22:03:13
コストてか
すでに表示してる以上姿勢は既に分かってるんだから計算するまでもないだろ
650デフォルトの名無しさん:2009/04/28(火) 22:35:42
DirectInput使うとウイルスバスターから警告が出るんですけど、どうにかなりませんか?
このプログラムは自動的にDLLを読み込む設定にどうのこうのって警告されます
651デフォルトの名無しさん:2009/04/28(火) 23:51:15
ウイルスバスターをアンインストール
652デフォルトの名無しさん:2009/04/29(水) 00:43:43
それDirectInput8Create使わなくても出るんだっけ
653デフォルトの名無しさん:2009/04/29(水) 08:42:33
リリースならビルドしてから1日放置すると出なくなるよ
654デフォルトの名無しさん:2009/04/29(水) 17:15:02
質問です。Direct3D9 SDK (2004 August) を使っています。

ビューポートの MinZ、MaxZ をそれぞれ 0.0f、1.0f にしています。
ところが、とあるマシンで、z 座標がちょうど 1.0f の座標変換済み頂点(D3DFVF_XYZRHW)が描画されない現象が起きました。
(現象が起きたのはノートPCで、グラフィックカードは dxdiag で調べたところ Mobile Intel(R) 945GM Express Chipset Family とありました。)

これはデバイスの能力の問題なのでしょうか。つまり、D3DCAPS9 の何らかの値を調べることで、判定できる問題なのでしょうか?
それとも、仕様と割り切って、1.0f ちょうどの頂点は作らないようにするべきなのでしょうか。

よろしくお願いします。
655デフォルトの名無しさん:2009/04/29(水) 17:35:34
DirectXのチュートリアルでは座標変換済み頂点のZ座標は0.5fになってるし、たぶん仕様だと思う
っていうか俺の環境だと1.0fは描画されないから、むしろ描画されないものだと思っていた
ちなみにビデオカードはnVIDIAのGTX280
656デフォルトの名無しさん:2009/04/29(水) 17:44:46
なるほど…。
Radeon、Geforce 含む複数の環境で正常に描画されていたので安心してたのですが、
念のため 0.1f 〜 0.9f あたりにまるめるように組んでいこうと思います。
ありがとうございました!
657デフォルトの名無しさん:2009/04/29(水) 21:10:29
1.0は外界でしょう。
658デフォルトの名無しさん:2009/04/30(木) 21:07:58
>>265
これってローカルで見たい。
MSDNライブラリに入っていますか?
659デフォルトの名無しさん:2009/05/01(金) 23:23:16
 無 限 次 元 平 行 宇 宙(次元が無限であり、この宇宙ではないので比較不可)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                    

 10 次 元 バ ル ク 空 間(次元が異なるため比較不可能)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                  

               膜 宇 宙(太陽の∞倍)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            

                グ レ ー ト ウ ォ ー ル
 ̄ ̄ ――__(長さ:太陽の3500兆倍、幅:太陽の2100兆倍)__―- ̄ ̄
         ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                
                      _,,,,,,,,_
                    /`  `'i、
超銀河団(太陽の約680兆倍)  |      l
                    ゙l、    /
                    `'ー---'"

銀河系(太陽の6800万倍)       o  


IRS5(太陽の10000倍の恒星の種)  ・


太陽(直径13万km)      


地球 (直径1.27万km)
660デフォルトの名無しさん:2009/05/02(土) 15:14:35
質問です。環境は XP DirectX9 VC++2005 です。

頂点バッファなのですが、「CreateVertexBuffer」で
サイズを指定してメモリを確保していると思いますが、
これはデバイスタイプが「D3DDEVTYPE_HAL」の時は
ビデオメモリ上に確保されプリミティブ描画時にハードウェア処理される
ということで合ってますでしょうか?

迷っていることは、プリミティブが動的に変化する場合、
頂点が増える減るたびに頂点バッファを作り直さなければならない
のかと言う点です。

自分の結論としては作り直さなければならないという結論が出ました。
変更があるたびにリリース→作成としなければならないので
レスポンスが悪いなと感じているんですがしょうがないのでしょうか?

みなさんどうされていますか?
661デフォルトの名無しさん:2009/05/02(土) 15:19:43
>>660
違う。

バッファが作られる先は、CreateVertexBufferの第4引数
のPOOLで決まる。
662デフォルトの名無しさん:2009/05/02(土) 15:36:30
>>661
即レスありがとうございます。
ちょっと「Pool」について日本語ヘルプ見てみます。

自分のコードは「D3DPOOL_MANAGED」使ってました。
ヘルプ見る限りでは、
”D3DPOOL_MANAGED は、ほとんどのアプリケーションで
D3DPOOL_DEFAULT よりも適している場合が多い。”
と書いてあるので、「MANAGED」使えばいいのかなと思いますが、
これはビデオメモリを使っているということなんですかね?
663デフォルトの名無しさん:2009/05/02(土) 15:39:14
ハードとドライバ次第
664デフォルトの名無しさん:2009/05/02(土) 15:46:59
>>663
ハードウェア次第でビデオメモリが使われるわけですね。
自分がしたいと思っていることは動的な頂点バッファの使用方法ですが、
「Pool」からたどっていくと、
ヘルプにそれらしきことが書いてありました!!
ちょっとヘルプ読んでみます。
動的な頂点バッファって使ったことありますか?
どさくさにまぎれてまた質問してすいません。
665デフォルトの名無しさん:2009/05/02(土) 17:11:01
660です。
そもそも勘違いしていたようです。
動的な頂点バッファとは頂点の追加や挿入・削除が可能なものと
思っていましたが、動的な頂点バッファでも頂点数はやっぱり
固定みたいです。位置とか色とかを動的に変更できるものかと。
そうすると求めているものとは違うので、
(私は頂点を追加したり挿入したり削除したい)
自分で動的配列作って「DrawPrimitiveUP」を呼ぶようにするしか
無いと思っています。
自分で用意するとなるとビデオメモリは使えなくなるので、
パフォーマンスが低下すると思います。
みなさん「DrawPrimitiveUP」って使ったりしてますか?
666デフォルトの名無しさん:2009/05/02(土) 18:30:31
>>665
頂点バッファを使う場合に、最大の頂点数が事前に分かっていれば、
それに合わせて作ればいい。
あるいは足りなくなったときだけサイズを拡張する方法が良いかと。

もし毎フレーム頂点バッファの内容が変わるなら、Lockの仕方とかも
注意が必要なので、面倒ならUP系でドライバ任せが一番いい。
UP系は頂点バッファを適切に使うよりほんの少しだけ遅いが、十分速い。
頂点バッファの使い方が下手ならUP系の方が速い。
667デフォルトの名無しさん:2009/05/02(土) 18:53:20
>666 さん
回答ありがとうございます。
頂点の座標は毎フレームで変わりますし、入力パラメータ次第で、
頂点数も変わります。曲面の詳細度制御みたいなことをさせたいので。
このような場合は自分で頂点を管理した方が良いってことですよね?
668デフォルトの名無しさん:2009/05/02(土) 21:43:06
バッファが足りない場合だけ作り直すようにすれば?
そもそも実際に組んで問題が出ることを確認する前からゴチャゴチャ考えるのは時間の無駄。
669デフォルトの名無しさん:2009/05/02(土) 21:54:17
>>667
それ、DirectX9じゃないとダメ?

10以降だともうちょっといい解決方法あると思うんだが。
670デフォルトの名無しさん:2009/05/02(土) 22:12:58
>>668
バッファが足りない場合だけというはちょっとピンとこないです。
最初に100個とか確保しておくとか言うことでしょうか。
足りなくなれば頂点バッファを作成しなおして、少ない場合は
使い回すって事ですかね、複雑になりそうな気がするのですが。
実際に組んでないんで申し訳ないですが、組む前の展望が欲しいのです。

>>669
9でお願いします。持ってる本、動作環境、日本語ヘルプの関係からです。
671デフォルトの名無しさん:2009/05/02(土) 22:20:17
>>670
まったく組んでない訳ではないです(汗。
頂点バッファ使ってプリミティブ描画までは行ったのですが、
頂点バッファって固定長の配列じゃね?ってとこでつまづいてます。
672デフォルトの名無しさん:2009/05/02(土) 22:31:37
ダメだこいつ。
どんなアドバイスを受けても、ゴチャゴチャ言って何もしないタイプだ。
673デフォルトの名無しさん:2009/05/02(土) 22:38:51
UP系だってドライバ依存の何か特別な技術で動いてるわけじゃなく、
ユーティリティ関数の類。
要するに、サイズ自動伸張などを隠蔽した動的頂点バッファだよ。
674デフォルトの名無しさん:2009/05/03(日) 00:52:29
>>673
意味分からないですけど、勉強になります。
質問しながらいろいろと調べて勉強になりました。
とりえあず色々やってみようと思います。
みなさん、あざっす。
675デフォルトの名無しさん:2009/05/03(日) 06:18:53
気になったんだけどD3DPOOL_DEFAULTとD3DPOOL_MANAGEDって、D3DPOOL_DEFAULTのほうがシステムメモリ使わなくて高速ですよね?
それとも速度とか変わらなかったりします?
676デフォルトの名無しさん:2009/05/03(日) 06:51:06
DirectDrawのサーフェイス感覚かよ。
677デフォルトの名無しさん:2009/05/03(日) 07:32:12
>>675
8000ポリで切り替えて試してみましたが、速度変わらかったっす。
どっちもビデオメモリ使ってるみたいですね。
ヘルプで推奨されてるぐらいだからMANAGEDで良いのでは。
678デフォルトの名無しさん:2009/05/03(日) 07:40:31
固定機能パイプラインって何者?
679デフォルトの名無しさん:2009/05/03(日) 09:02:29
>>675
D3DPOOL_MANAGEDは、デバイスロストした際に中身を復元できるように
システムメモリにコピーを持っているだけで、テクスチャそのものはVRAMに
乗っているから、速度は変わらないよ。

D3DPOOL_MANAGEDの仕事は
・デバイスロストした再に自動で中身を復元する
・テクスチャがVRAMに収まりきらないときに自動的に必要性の低いテクスチャを解放する
主にこの2つ。

前者はともかく、後者のテクスチャ管理は自分で実装すると結構面倒。
680デフォルトの名無しさん:2009/05/04(月) 01:01:24
>>679
第三者だが、すごく勉強になった。
681デフォルトの名無しさん:2009/05/04(月) 15:00:39
D3DXCreateSphereで作成したメッシュにテクスチャを貼りたいのですが、何故かテクスチャの継ぎ目が変になってしまいます。
どこが間違っているのでしょうか。教えてください。

・ソース
Vertex3D *data; //FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1;
HRESULT hr = mesh->LockVertexBuffer(0, (void**)&data);
if FAILED(hr) return;
unsigned int num = mesh->GetNumVertices();
for (unsigned int i = 0; i < num; i++) {
//rは球の半径
float x = data[i].x / r;
float y = data[i].y / r;
float z = data[i].z / r;

float phi = acos(y);
data[i].tv = (float)(phi / D3DX_PI);
if (y == 1.0f || y == -1.0f) {
data[i].tu = 0.5f;
} else {
data[i].tu = (float)(acos(max(-1.0, min(1.0, z / sin(phi)))) / (2.0 * D3DX_PI));
}
if (x > 0) data[i].tu = 1.0f - data[i].tu;
}

・参考
http://msdn.microsoft.com/ja-jp/library/bb932345.aspx
682デフォルトの名無しさん:2009/05/04(月) 15:05:26
コード読まずに書くが、テクスチャのWRAPは正しく設定してる?
683デフォルトの名無しさん:2009/05/04(月) 15:19:31
オレも読まずに書くけどメッシュの球にテクスチャ貼ったら継ぎ目が変になったっけな。
684デフォルトの名無しさん:2009/05/04(月) 15:32:23
>>682
たぶん、正しく設定しています。
>>683
もう、自分で頂点設定してやろうかなぁ・・・
685デフォルトの名無しさん:2009/05/04(月) 17:21:05
だぶんとかいい加減な答えを書く前に、
何を設定しているのか具体的にかけよ。
686デフォルトの名無しさん:2009/05/04(月) 18:05:28
球で繋ぎ目っていえばWRAPだからな
687デフォルトの名無しさん:2009/05/04(月) 18:07:33
DirectShowに出来て、WindowsMediaPlayerコントロールに出来ない事教えて下さい。
688デフォルトの名無しさん:2009/05/04(月) 18:08:48
再生のときにもたついてユーザをイライラさせること
689デフォルトの名無しさん:2009/05/04(月) 19:33:52
>>681
テクスチャラッピング?
SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0)
690デフォルトの名無しさん:2009/05/04(月) 19:44:29
>>685
>>686
>>689
すみません設定してませんでした。実家に帰省していて環境がないので戻ってから試してみます。ありがとうございました。
691デフォルトの名無しさん:2009/05/04(月) 20:04:26
ラトルズの15歳から始めるC++ DirectX 9プログラミングで勉強してるんですが
my3dlib.cppに
#include "my3dlib.h"
//グローバル変数
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
float g_aspect = 1.0f;
と書いて
my3dlib.hに
struct Model{
LPD3DXMESH pmesh;
D3DMATERIAL9* pmaterials;
LPDIRECT3DTEXTURE9* ptextures;
DWORD nummaterials;
BOOL used;
}

extern LPDIRECT3D9 g_pD3D;
extern LPDIRECT3DDEVICE9 g_pd3dDevice;
extern float g_aspect;
と記述すると
型指定子がありませんってエラーがでるんですがどうすればいいんでしょうか?
structの部分がないとエラーは出ないんですが・・・
692デフォルトの名無しさん:2009/05/04(月) 20:12:04
つ セミコロン
693デフォルトの名無しさん:2009/05/04(月) 20:27:40
ま・・・まさかそんな問題で3日も悩んだというのか!!
すいません
694デフォルトの名無しさん:2009/05/04(月) 21:22:31
DirectXの勉強だけではなくC++の基礎も勉強しておかないと、これからも躓くと思うよ。
実行時のバグではなくコンパイル時のエラーはかなり分かりやすい問題だから、早く自力で解けるようになったほうがいい。
695デフォルトの名無しさん:2009/05/04(月) 22:20:39
よくある事だ、気にすんな
696デフォルトの名無しさん:2009/05/04(月) 23:24:59
tes
697デフォルトの名無しさん:2009/05/04(月) 23:25:47
ID3DXMESHのGetFVFで返された値が3435973836なのですが
どういうFVFの組み合わせかわかりますか?
698デフォルトの名無しさん:2009/05/04(月) 23:47:48
>>697
メモリ初期化周りのエラー
699デフォルトの名無しさん:2009/05/05(火) 09:55:47
3435973836って16進で0xcccccccc
700デフォルトの名無しさん:2009/05/05(火) 10:21:37
dmusici.hをインクルードしようとしたらファイルがないって出るんだけどオミットされたの?
701デフォルトの名無しさん:2009/05/05(火) 10:24:33
とっくに無くなってる。
2007年あたりのを入れてみては
702デフォルトの名無しさん:2009/05/05(火) 14:13:50
>>698
ありがとう
703デフォルトの名無しさん:2009/05/05(火) 17:07:05
頂点フォーマットの定数を調べたいのでGetFVF()メソッドで値を取得したら
0x00000152でした。
d3dtypes.hの宣言やヘルプを見ても何を指しているか分かりませんでした。
0x00000152はどの定数の組み合わせなのでしょうか、分析方法教えてください><
10進数に直すと338でした。
704デフォルトの名無しさん:2009/05/05(火) 17:23:27
10進にしてどうするよ。
2進数になおしたほうがわかりやすいだろう。

まあ0x0152は
0x0100、0x0040、0x0010、0x0002 にわけられるよね。
1,2,4,8でわけるのさ
705デフォルトの名無しさん:2009/05/05(火) 17:26:45
直すなら、2進数に直せよ
706デフォルトの名無しさん:2009/05/05(火) 17:46:36
>>704
>>705

ありがとうございます
16進数から勉強しなおしてきます
707デフォルトの名無しさん:2009/05/05(火) 18:52:24
SkinnedMesh(DXUT)はSleep(0)を使っている事がわかりました。
一般にゲームを作る場合はSleep(0)を使うのが良いのですか?
フレームレート解説サイトではSleep(1)を推奨していますが3D描画となると
Sleep(1)では遅すぎます。
皆さんはどうしてますか?
708デフォルトの名無しさん:2009/05/05(火) 18:59:23
Sleep(0)は強制コンテキストスイッチの為に用いられる。
そのサンプルもスレッドをスリープする為には使ってないんじゃないか。
709706:2009/05/05(火) 19:06:34
答えを導く方法を調べていたのですが
2進数に変換までできました
0x0152

0000 0001 0101 0010

そのあとの
>まあ0x0152は
0x0100、0x0040、0x0010、0x0002 にわけられるよね。
1,2,4,8でわけるのさ
が理解できないのですがもう少し詳しく教えていただけませんが
スレ違いですいません;;
710デフォルトの名無しさん:2009/05/05(火) 19:25:45
ゲームを作る場合は

while ( TRUE ) {
if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) ) {
if ( !GetMessage(&msg, NULL, 0, 0) ) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
//UpdateFrame();
Sleep(1);
}
}

ってするよりメインループを別スレッドにした方が良いの?
711デフォルトの名無しさん:2009/05/05(火) 19:46:04
XFileを読み込んでID3DXMESHオブジェクトにした後
頂点バッファー(座標やディフューズ等)を直接見たいんだけどどうすればいいのかな?

GetVertexBufferメソッドで頂点バッファを取得して
GetDescメソッドでブレークポイントを置いて自動変数見たけど目的の物が見えませんでした
712デフォルトの名無しさん:2009/05/05(火) 19:56:44
データを直接見るほど電脳視覚デバイスは発達していません。
盲人が視覚を得るということを目標に研究はされているらしいけど。
713711:2009/05/05(火) 20:00:59
すんません、言い方が悪かったですw
UV値がちゃんと渡されているか確認したかったんです
なにかやり方ありませんかね?
GetDescメソッドじゃリソースの記述しか見れなくて・・・
714デフォルトの名無しさん:2009/05/05(火) 21:52:42
>>711
>>681のようにVertexBufferをロックしてみる。

>>712
お前このスレに常駐して、クソにもならないレスを
返す方ですか?ウザいんでしんでくさい。
715デフォルトの名無しさん:2009/05/05(火) 21:57:30
最初にSYSTEMMEM付きでロードする。何かCPUで計算なり加工する。
そのあと、描画用のメッシュはCloneMeshでSYSTEMMEMを持たせないで複製したものを使う。
最初のがいらなくなったらそっちは開放する。

こういう手順を起動時に毎回やるのが煩雑だか非効率と思えるようになった人は、自作フォーマットの段階へ進む。
716デフォルトの名無しさん:2009/05/06(水) 10:37:56
>>710
00000001 → 0x01
00000010 → 0x02
00000100 → 0x04
00001000 → 0x08

わかる?
717デフォルトの名無しさん:2009/05/06(水) 10:39:09
>>709だった
718デフォルトの名無しさん:2009/05/06(水) 20:40:17
XAudio2とOggVorbisでストリーミング再生試してるんだけど、
あきらかにバッファリングが追いついてなくて音がブチブチするのは
どうすればいいんだぜ?
OnBufferEndコールバックのたびにov_readしちゃだめ?
719デフォルトの名無しさん:2009/05/06(水) 20:49:43
スレ違いだと思うよ
720デフォルトの名無しさん:2009/05/06(水) 20:53:45
xnaで聞いた方がいいのか?
あっちいってくる
721718:2009/05/06(水) 21:06:42
ttp://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
なんかスッドレ使えってことくさい
722デフォルトの名無しさん:2009/05/07(木) 01:29:20
テクスチャを指定した範囲でラッピングしたりできますか?
723デフォルトの名無しさん:2009/05/07(木) 02:09:57
なぜ719がXAudio2の話題をスレ違いだと思ったのか聞きたい。
724718:2009/05/07(木) 03:14:07
まだDirectX5とか触ってる人なんじゃないかな。
725デフォルトの名無しさん:2009/05/07(木) 04:25:07
xaudioというライブラリがあるからそっちと勘違いでもしたのかね
まずありえないがな
726デフォルトの名無しさん:2009/05/07(木) 15:59:13
メタセコイヤで出力したX形式のファイルを自分なりの形式に変換したいのですが
わからないところがあるので質問します。上部8ポリゴン・下部8ポリゴン・側面16ポリゴンの円柱を作りました。
Mesh {
34;
0.00000;3.04100;0.00000;,
    :
0.00000;-3.04100;-0.24500;;

32;
3;0,1,2;,
  :
3;16,31,14;;

MeshNormals {
18;
0.000000;1.000000;0.000000;,
      :
-0.603748;0.000000;-0.797175;;
32;
3;0,0,0;,
   :
3;5,17,16;;
}
MeshTextureCoords {
34;
0.062500;0.000000;,
    :
1.000000;1.000000;;
}
頂点と法線データについては最初の数値が各頂点のデータで
後の数値がその組み合わせ(三角形なので3個1セット)なのはわかるんですが
なんで32ポリゴンしかないのに34個の頂点データがあるんでしょうか?
727デフォルトの名無しさん:2009/05/07(木) 16:21:25
>>726
Triangle Fanだと中心に1個必要だからその分じゃないの
728デフォルトの名無しさん:2009/05/07(木) 16:24:34
UV座標の差異で34個になってると思われ
729デフォルトの名無しさん:2009/05/07(木) 17:17:27
>>726
側面部分は海苔巻きの海苔のようにポリゴンを張っていると思うが、
巻き始めと巻き終わりの部分は頂点位置は同じでもテクスチャ座標が違う。
開始位置のテクスチャ座標が0で、終了位置は1になっているかと。

テクスチャラッピングという機能を使えば、終了位置のテクスチャ座標を
0にできるが、普通はそんな設定は使わない。
730デフォルトの名無しさん:2009/05/07(木) 17:43:44
アニメーションとかする気が無いなら直接mqoを読んだほうが何かと便利かもしれない
731デフォルトの名無しさん:2009/05/07(木) 20:39:34
advancetimeが使い辛い件
settime化出来ないの?
732デフォルトの名無しさん:2009/05/07(木) 21:55:29
XAudio2ってもしかして音声入力キャプチャできない?
733デフォルトの名無しさん:2009/05/07(木) 21:57:04
Xファイルを読み込んだ後、解放するとメモリリークしてしまいますが、原因が分かりません。

D3DXLoadMeshFromX(
strXFile,
D3DXMESH_SYSTEMMEM,
pD3DDevice,
NULL,
&m_pMtrlBuff,
NULL,
&m_MtrlNumTotal,
&m_pMesh );

↓コンパイラのエラーメッセージ
D3DX: MEMORY LEAKS DETECTED: 2 allocations unfreed (3824 bytes)

上記読み込み関数だけをコメントアウトするとリークがなくなるので、これが原因なのは
間違いないと思います。
引数の&m_pMeshのところをNULLにしてもリークしなかったので、m_pMeshが解放しきれていない
ようですが、なぜなのかが分かりません・・・

読み込むXファイルはメタセコイアで出力したものです。
試しに書籍のCD-ROMに収録されているXファイルモデルも読み込んでみましたが同様でした。

怪しいとしたらどこでしょうか?
ご助言、よろしくお願いしますm(_ _)m
734デフォルトの名無しさん:2009/05/07(木) 22:01:36
SAFE_RELEASE( m_pMtrlBuff );
SAFE_RELEASE( m_pMesh );
の両方を常にやる
735デフォルトの名無しさん:2009/05/07(木) 22:07:19
Xファイルに自信が無いならSDKに入ってるトラとかでやってみれば?
とりあえず第2引数をD3DXMESH_MANAGEDにしたい
736733:2009/05/07(木) 22:09:01
>>734
あー!直りましたー!
助かりましたー!
ほんとうにありがとうございましたぁ! !。゜(゜´∀`゜)゜。

>>735
ありがとうございます!
MANAGEDにします!
737733:2009/05/07(木) 22:26:59
>>735
MANAGEDにしたらfpsが300から1300に跳ね上がりました (;゚д゚)

ご助言ありがとうございました!
(これからは引数のことをよく調べてから使うようにします・・・)
738726:2009/05/07(木) 23:34:57
どうやらUVによる差異のようでした。
32ポリゴン普通に描画してみたら不具合もなく大丈夫でした。
ありがとうございます。
739デフォルトの名無しさん:2009/05/08(金) 19:30:58
すいません質問です。
シェーダーを使って描画をしているんですが
.oファイルがいつのまにか生成されるんですが
こちらは.fxのコンパイル後のデータなんでしょうか?
こちらを使って描画する方法などありましたらご教授お願いします。
ググってみても.oファイルが見当たりません。
740デフォルトの名無しさん:2009/05/08(金) 20:55:34
nVIDIAシャドウことPCFの存在を知ったのですが、具体的にどうやって適用するんでしょうか?
そのようなHLSL命令があるのでしょうか??
741デフォルトの名無しさん:2009/05/08(金) 21:09:40
nVidiaのNVSDKの中にサンプルあるだろ。ダウンロードしてまずは読め。
742740:2009/05/08(金) 21:28:55
>>741
ありがとうございました!
743739:2009/05/09(土) 04:25:46
自己解決しましたありがとうございました。
744デフォルトの名無しさん:2009/05/09(土) 15:33:33
pDevice->CreateTexture( 256, 256, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8B8G8R8, D3DPOOL_DEFAULT, &pTexture, NULL );

こんな感じでテクスチャを生成すると失敗してしまい、戻り値を調べるとD3DERR_INVALIDCALLでした
試しにD3DXCreateTextureから生成するとうまくいったんですが、これはどこか間違っていますか?
745デフォルトの名無しさん:2009/05/09(土) 15:42:47
レンダーターゲットでD3DFMT_A8B8G8R8が使えるハードはあまりないと思うけど
D3DFMT_A8R8G8B8の間違いでは?
746デフォルトの名無しさん:2009/05/09(土) 15:49:15
>>745
ありがとうございます!動きました!!
フォーマットをMSDNのところからコピペしたので
間違って選んでしまってました
747デフォルトの名無しさん:2009/05/09(土) 19:52:30
>>746
ちゃんと使えるフォーマットを調べて初期化するようにしないと環境ごとに動いたり動かなかったり面倒だぞ。
748デフォルトの名無しさん:2009/05/10(日) 01:18:08
いわゆる残像エフェクトを実装しようと以下のようにしているのですがうまくいきません

カウント++
今回描画分シーン描画済みテクスチャA

if(カウント==奇数)
空きテクスチャBにAをコピー→空きテクスチャCをBにアルファ50%で描画→Bをバックバッファに描画
else
空きテクスチャCにAをコピー→空きテクスチャBをCにアルファ50%で描画→Cをバックバッファに描画

これで残像が残ると思ったのですがどうもAの内容がそのまま描画されてしまいます
残像エフェクト用空きテクスチャB,Cはクリアはしていません
どこが間違っているのでしょうか?
749デフォルトの名無しさん:2009/05/10(日) 01:57:32
レンダリングターゲットとしてテクスチャAとBを用意

(カウント奇数)
テクスチャAに今回の描画をする
テクスチャBには前回の描画が残ってる
テックスチャAにBをα50%で重ねて描画する←(Aが今回の最終描画で次回に流用する)
テクスチャAの内容をバックバッファに描画

(偶数)
テクスチャBに今回の描画をする
テクスチャAには前回の描画が残ってる
テックスチャBにAをα50%で重ねて描画する←(Bが今回の最終描画で次回に流用する)
テクスチャBの内容をバックバッファに描画

以下繰り返し
750デフォルトの名無しさん:2009/05/10(日) 03:42:37
デバイスロストの処理で質問です
なぜかResetが失敗して、デバッグしてみると戻り値が        -2005530516という意味不明の値になっています
Resetを呼ぶ前にリソースは解放していて、TestCooperativeLevelもD3DERR_DEVICENOTRESETを返しています
751デフォルトの名無しさん:2009/05/10(日) 04:18:24
>>750
まずやることは、DirectX Error LookupというツールでValueに-2005530516を入れて
Decimalを選択してから[Look Up]を押す。
話はそれからだ。
752デフォルトの名無しさん:2009/05/10(日) 04:54:15
>>751
D3DERR_INVALIDCALLでした
メソッドの呼び出しが無効っていうのはどういう意味ですか?
パラメータは初期化のときに使ったやつと同じものを使っています
753デフォルトの名無しさん:2009/05/10(日) 09:22:14
>>752
・リソースの類は、一切作らずReset()した場合
それでも失敗しますか?

・↓こうしても失敗しますか?
D3DPRESENT_PARAMETERS d3dpp;
IDirect3DSwapChain9Ptr pDefaultSwapChain;
pD3DDevice->GetSwapChain( 0, &pDefaultSwapChain );
pDefaultSwapChain->GetPresentParameters( &d3dpp );
pD3DDevice->Reset( &d3dpp );
754デフォルトの名無しさん:2009/05/10(日) 10:52:05
>>753
フォントやシェーダーのようなOnLostDeviceとか用意されてるやつとD3DPOOL_MANAGEDに設定したリソースだけなら大丈夫なんですが
D3DPOOL_DEFAULTに設定したテクスチャがあるときに失敗してしまいました
テクスチャの解放の辺りが原因みたいです
普通にRelease()で解放するのではだめなんでしょうか?

スワップチェーンのほうはよく分からないけど変わりませんでした
755デフォルトの名無しさん:2009/05/10(日) 11:17:38
>>754
IDirect3DDevice9::SetTexture()でセットされているままとか。
セットされていると参照カウント+1されているので、
Relese()しても解放されません。
756デフォルトの名無しさん:2009/05/10(日) 11:37:37
>>755
そうだったんですか!
やっと原因が分かりました!ありがとうございます!!!
757デフォルトの名無しさん:2009/05/10(日) 22:03:13
DirectX SDKのヘルプにある
インデックス付き頂点ブレンディングのサポートの判定の
コードを試してみたら、IndexedMatrixMaxSizeが0になっています・・。
RADEON HD 4350なので、ハードウェアで
インデックス付き頂点ブレンディングができると思ったんですが・・。
最近のビデオカードはみんなサポートしているんじゃないんでしょうか?

D3DCAPS9 d3dCaps;

m_pD3DDevice->GetDeviceCaps( &d3dCaps );
IndexedMatrixMaxSize = d3dCaps.MaxVertexBlendMatrixIndex;

頂点しぇーだーを使うにしても、どうやって大量の行列を渡すんでしょうか?
数十個近くも変数使えるんでしょうか・・
758デフォルトの名無しさん:2009/05/10(日) 22:10:35
それは過去の遺物。市場のゲームでは使われない機能だから退化した。
759デフォルトの名無しさん:2009/05/10(日) 23:00:10
VS1_1でも70〜80個は格納できるよ。
格納できなければ格納できる最小までメッシュの方を分割する。面倒くさそうでしょ。そう面倒なの。

760デフォルトの名無しさん:2009/05/11(月) 01:51:00
FP16バッファは非常に大きな範囲の値を表現できるとのことですが、
実際、レンダーターゲットとしてそれに書き込むときは0.0〜1.0に正規化しないといけないんですよね?
HLSLではフォーマットによらず0.0〜1.0で扱うけど、その0.0〜1.0の分解能が違う、という解釈でイイんでしょうか??
761デフォルトの名無しさん:2009/05/11(月) 05:18:51
いや、正規化しなくていいよ。 ふつーに2.0とか入れても通る。
実際に画面に表示するバッファでなければ何入れようと自由。
762760:2009/05/11(月) 07:27:28
>>761
なるほど。
そうすると、LDRで表現できるレンジと現実世界の光の強さの比が約1:40億なので、
最終のLDR出力を0.0〜1.0として、HDR時は0.0〜4.0×10^9で描画し、その範囲の中から
幅1.0分くらいが抽出されるようにトーンマッピングする方針ですね。

ありがとうございました。
763デフォルトの名無しさん:2009/05/11(月) 13:55:03
>>762
ストップ。 4.0×10^9は余裕でFP16の範囲外。
FP16は指数部に5ビットしか用いてないから、10^4がせいぜい。
FP32を使ってくれ。
764デフォルトの名無しさん:2009/05/11(月) 14:12:52
0.0〜1.0にスケーリングされるのは
レンダターゲットが整数バッファだった場合?
signed型なら、-1.0〜+1.0
unsigned型なら、0.0〜+1.0
real型なら、そのままなんだっけ?
ここら辺どうもよくわかってないんだよなぁ
765760:2009/05/11(月) 19:30:38
>>763
そうでしたか(汗)
失礼しました・・・

しかし、まじめに物理的なライティングをしようとしても、HDRテクスチャ素材自体が調達しにくいので、
手に入るものでそれらしく見せるように調整することになりそうです。
766デフォルトの名無しさん:2009/05/12(火) 10:02:19
http://www.dotup.org/uploda/www.dotup.org21559.jpg
HLSLでテクスチャに一度描画し、Z値の変化の大きい場所を黒く塗りつぶしたテクスチャと重ねて描画しなおす方法で輪郭線を描いているんですが、スキンメッシュ(tiny)を表示するとうまくいきません。
上の画像のように細い線が何本も出てしまいます(左だと背中から左腕にかけて、右の画像はおでこ付近)
どうしてこうなるんでしょう?
ソースはSDKのサンプルにそのまま.fx内でZ値も出力するように付け足しただけです。
767デフォルトの名無しさん:2009/05/12(火) 14:47:52
>>766
Z値を可視化すると、問題の部分はどうなってる?
768757:2009/05/12(火) 22:27:52
>>758-759
頂点シェーダー使わないといけないんですか・・。面倒そうです。

インデックス付頂点ブレンディングの
シェーダーのプログラムのサンプルってどこにあるんでしょう?
自分で書いてみましたがうまくいきません。
float4x4 matViewProjection;
float4x4 matWorld[256];

struct VS_INPUT
{
float4 Position : POSITION;
float3 Normal : NORMAL;
float3 BlendWeight : BLENDWEIGHT;
uint4 matrixIndex : BLENDINDICES;
};
struct VS_OUTPUT {...}
VS_OUTPUT Default_DirectX_Effect_Pass_0_Vertex_Shader_vs_main( VS_INPUT Input )
{
VS_OUTPUT Output;

float fLastBlendWeight = 1 - dot(Input.BlendWeight, 1);

Output.Position =
mul( Input.Position, matWorld[Input.matrixIndex.x]) * Input.BlendWeight.x +
mul( Input.Position, matWorld[Input.matrixIndex.y]) * Input.BlendWeight.y +
mul( Input.Position, matWorld[Input.matrixIndex.z]) * Input.BlendWeight.z +
mul( Input.Position, matWorld[Input.matrixIndex.w]) * fLastBlendWeight;

return( Output );
}
769デフォルトの名無しさん:2009/05/12(火) 23:01:48
>>768
float4x4 matWorld[256];

まずシェーダーの固定レジスタが256本しかないから余裕でオーバーしてる。
float4[256]がVS3.0の限界数。
770デフォルトの名無しさん:2009/05/12(火) 23:27:26
worldMatrixはfloat4x3にして
レジスタを節約しよう
771デフォルトの名無しさん:2009/05/13(水) 00:09:51
ちゃんとメッシュごと必要なボーンだけ渡せよ
なんで1メッシュまるごとぶち込むソース書くヤツ多いんだマジで
772デフォルトの名無しさん:2009/05/13(水) 00:25:35
>>771
言葉の意味はよくわからんが
とにかく凄い自信だ
773デフォルトの名無しさん:2009/05/13(水) 00:27:26
float4x3にしても1回の描画で使えるMAX値はだいたい[80]
でもこれだけで240/256を使っちゃうから現実的じゃない。

色々なエフェクトとかでレジスタ使うことを考えると
[60]くらいを上限にして180/256って所だろう。

当然1メッシュでこれ以上のボーンを使っている場合に描画できなくなるから
事前にボーンの本数の上限にあわせてメッシュを分割しておく必要がある、と。
774デフォルトの名無しさん:2009/05/13(水) 00:29:32
メッシュごと
1メッシュまるごと

同じじゃないのか
775デフォルトの名無しさん:2009/05/13(水) 00:39:52
>>774
ちがうだろ
256も使うなんてどう考えてもおかしいだろ
ぶち込んだメッシュが影響するボーンの本数が256ってことだろ?
本当にそんなモデル作ったならそのデザイナクビでいいと思う
ちゃんとプログラム組めば
1つのメッシュに影響するボーンの数なんて5か6でも多いぐらいだろ
776デフォルトの名無しさん:2009/05/13(水) 00:43:41
どうでもいいけどメッシュごとじゃなく分割したメッシュごとなら意味は通るな
なんで質問スレに書き込んだのかは謎だが
777デフォルトの名無しさん:2009/05/13(水) 00:47:24
某業務用御用達ライブラリもこんな感じになってて融通効かないから
「ホントにプロなの?」ってメールで暴言吐いたらちゃんと直してくれたなw
778デフォルトの名無しさん:2009/05/13(水) 00:56:18
>>775
1メッシュに6本とか人体モデルもだせねぇw
779デフォルトの名無しさん:2009/05/13(水) 00:58:58
今だったら頂点テクスチャでやるのがデフォ?
俺のPC古いから出来ない
テラうらやましす
780デフォルトの名無しさん:2009/05/13(水) 01:08:19
>>778
はぁ?
膝曲げてもフトモモとふくらはぎぐれーだろ影響あるの?
妙にリアルに仕上げるデザイナがいてもその周辺使うぐらいだろ?
だからお前、1メッシュで人体全部ぶち込むからそーゆー妙な制限生まれるんだろ?
関係あるところだけきっちりわけて渡せよw
781デフォルトの名無しさん:2009/05/13(水) 01:34:13
ブログでやれ
782デフォルトの名無しさん:2009/05/13(水) 01:51:09
>>780
そういうアプローチは、今まで有効じゃなかったが
今後はどうなるかねぇ
ララビーとか、メッシュブツ切りにしてもボトルネックに
ならなそう
なんとなく
783デフォルトの名無しさん:2009/05/13(水) 02:32:39
てか
ワンスキンで作らずにパーツごとにメッシュを分けて作れば
一つのモデルでも分割して描画することができるだろ
一つのXファイルの中にMeshは一つじゃないといけない理由なんてないぞ
784デフォルトの名無しさん:2009/05/13(水) 02:47:55
>>270がいつの間にか消えとる
誰か持ってない?
785デフォルトの名無しさん:2009/05/13(水) 09:21:55
>>780
お前勘違いしてるだろ・・・。
1頂点に対する影響ボーンの数の話じゃなくて
メッシュ全体に対するボーン数の話だぞ・・・。

いまどきの頂点シェーダーならアホみたいにデータの最適化して分割して
描画なんてするよりまとめて書いた方が圧倒的に早いのは常識だぞ。

>>782
ララビーつっても実用的になるまで3世代くらいかかるんじゃねぇ?
仕様見ててもあれでGTX285とかHD4870以上の速度が出るとはおもえねぇ。
そりゃコア数ふやせば早くなりますなんて説明されても消費電力は無視かよって感じ。

>>783
1つにするメリットはCPUの負荷を軽減できるから。
描画数がクリティカルにCPUの足を引っ張るからどこも躍起になって描画数を減らす工夫してるんだよ。
786766:2009/05/13(水) 09:52:22
>>767
http://www.dotup.org/uploda/www.dotup.org24171.jpg
特に異常は感じられない
787デフォルトの名無しさん:2009/05/13(水) 09:58:48
>>786
なら輪郭の抽出が間違ってんだろ
788766:2009/05/13(水) 11:20:34
よく見たら自分(1つのメッシュ内)に対しての輪郭が出てない。輪郭をつけるZ値差を小さくしても出ない。
なんでだろう?
789デフォルトの名無しさん:2009/05/13(水) 12:23:02
>>788
単純に精度が足りてないとか
Z値を書き込んでるテクスチャのフォーマットは何?
D3DFMT_R32F?

あと書き込んでるZ値ってZ値そのまま?
W成分で割ってる?
790デフォルトの名無しさん:2009/05/13(水) 13:09:25
>>786を見た感じだと精度が全然足りてないな
791766:2009/05/13(水) 13:42:44
>>789
D3DFMT_A8R8G8B8からD3DFMT_R32Fに変えたらいけたサンクス!
ちなみにZ値はWで割ってる
792718:2009/05/13(水) 13:49:07
DrawPrimitiveUpでビルボード描画すると右辺と下辺が消えちゃいます。
これ多分モデルを描画するときのポリゴンの重なりを考慮してだとおもうんだけど、
ビルボードをアルファブレンドしたいときはどうすればいいんですか?
793766:2009/05/13(水) 13:57:56
と思ったら今度は前よりひどくなってる。しかも255,255,255で塗りつぶしたら下半分に輪郭線が出ない・・・
ちなみにスキンじゃない普通のメッシュは大丈夫だった
http://www.dotup.org/uploda/www.dotup.org24447.jpg
794766:2009/05/13(水) 14:21:07
http://www.dotup.org/uploda/www.dotup.org24484.jpg
シーンを書き込んだテクスチャを描画せずに輪郭用のテクスチャのみ描画するとこうなる
795デフォルトの名無しさん:2009/05/13(水) 14:51:48
とりあえず、深度値は射影変換済みのじゃなく
View空間のにしたらどうかね?
深度は0〜1の範囲に収まらないので、適当に閾値を調整して
796デフォルトの名無しさん:2009/05/13(水) 15:56:34
VIEW空間?
とりあえずわかったことは
・tinyのテクスチャが一面に張り付いてるのはスキンメッシュクラスでデバイスからテクスチャをセットしていたため
・背景を白にすると輪郭線が現れない場所が出るのは、Z値テクスチャに淡すぎて書き込まれていて背景との境に大きなZ値差を検出できなかったため
797デフォルトの名無しさん:2009/05/13(水) 16:30:26
>>796
w(view空間のz)で割る射影空間だと、z方向が非線形にマップされるから
アンタの言う’Z値の変化の大きい場所’の検出が一様には出来ないと思われる。
そこが間違ってると想像。だから一様に検出が容易なView空間ベースで処理したら、
ということ。

>・背景を白にすると輪郭線が現れない場所が出るのは、Z値テクスチャに淡すぎて書き込まれていて背景との境に大きなZ値差を検出できなかったため
これがそう
798デフォルトの名無しさん:2009/05/13(水) 16:32:34
VisualStudio2005、DirectXを利用して
1.aviを再生途中からフェードアウト、フェードアウトし始めと同時にtgaがフェードイン、
2.しばらくしたらtgaがフェードアウト、フェードアウトし始めと同時に別aviがフェードイン、
この1と2の動作の繰り返しするソフトを作りたい
aviを再生、tgaファイルを表示する所まではできたのですが、
レイヤーの制御とフェード・キーチャンネルの制御の仕方が分かりません。
aviの終わり40フレーム手前からフェードアウト(tgaはフェードイン)し始めて、tgaに乗り替わりたいのですが
どうやったら出来るのでしょうか?
再生にはDirectX.AudioVideoPlaybackのVideoクラスを使っていますが、これでは出来ないのでしょうか?
799デフォルトの名無しさん:2009/05/13(水) 18:21:15
>>796
D3DFMT_R32Fテクスチャに
z/wを書き込んで変化量の多い所に線を描くって方法でこの程度はでるよ
書き込みか輪郭検出のアルゴリズムがどっかおかしいのでは?
特に輪郭線書いてるところのピクセルシェーダを検証しる

ttp://www5b.biglobe.ne.jp/~mya_a/DirectX/Line.wmv
800デフォルトの名無しさん:2009/05/13(水) 18:41:08
>>799
おー、これおもしろいな。
801デフォルトの名無しさん:2009/05/13(水) 18:55:51
>>785
はぁ?
それじゃバンプかけるところとバンプ+環境マップあるところと
適用できねーじゃん
マテリアルチェンジする必要がある時点でボコボコシェーダー代わるんだから
今更ワンスキンなんてこだわってんじゃねぇよ
髪の毛だってシェーダ別だぞ
服もパーツごとにシェーダ違うし(アップになったときは)

もう速度なんて完全に捨てたぜ
汎用性重視
モデリングソフトと連携してることのが大事
こんだけふんだんに使っても全然速度大丈夫だし
802デフォルトの名無しさん:2009/05/13(水) 18:58:28
確か以前にも質問関係なくいきなり語りだすやついたよな
803792:2009/05/13(水) 19:53:39
>>792
これ誰かタノム!
804デフォルトの名無しさん:2009/05/13(水) 20:01:26
ssうp
805792:2009/05/13(水) 20:19:40
ttp://uproda.2ch-library.com/127928Qmt/lib127928.png
左が元画像(40x40)で右がDrawPrimitiveUp後です死にたい

描画処理↓
int x2 = x + texWidth - 0;
int y2 = y + texHeight - 0;
SETVERTEX(v[0], x, y, 0.0f, 1.0f, 0xffffffff, 0.0f, 0.0f);
SETVERTEX(v[1], x2, y, 0.0f, 1.0f, 0xffffffff, 1.0f, 0.0f);
SETVERTEX(v[2], x, y2, 0.0f, 1.0f, 0xffffffff, 0.0f, 1.0f);
SETVERTEX(v[3], x2, y2, 0.0f, 1.0f, 0xffffffff, 1.0f, 1.0f);
device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
device->SetTexture(0, texture);
device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
hr = device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, v, sizeof(D3DVERTEX));
806デフォルトの名無しさん:2009/05/13(水) 20:23:47
>>805
またこれか
>>85をちぇき
807792:2009/05/13(水) 20:27:14
>>806
サンクス試してみる!
過去レス読まない俺を罵ってください
808デフォルトの名無しさん:2009/05/13(水) 20:32:00
>>807
このバカチンがっ!!

がんばれよ!
809792:2009/05/13(水) 21:20:32
>>808 愛してる

ttp://uproda.2ch-library.com/127951kK2/lib127951.png
若干よくなったけど後一歩なのか、うちのグラボ(PX8800GT)が悪いのか・・

device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT); // New
device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); // New
device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); // New
device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); // New
device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP); // New

device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
810デフォルトの名無しさん:2009/05/13(水) 21:36:42
テクセル不一致は考慮した?
811792:2009/05/13(水) 22:02:08
ttp://uproda.2ch-library.com/1279603VY/lib127960.png

ゴクリ・・・近づいている気がする!!!!!
・クライアント領域サイズをAdjustするの忘れてたので修正しました
・CreateTextureFromFileExのフィルターパラメータをNONEに修正しました

>>810
ぐぐってみます!!!!!
812792:2009/05/13(水) 22:42:44
ttp://uproda.2ch-library.com/127984Kos/lib127984.png

解決しました。助言してくれた方(達)ほんとサンクス。
参考になるかもしれんので、俺がひっかかったところ列挙しときます。

・サンプラーステートのフィルタ系パラメータをPOINTにする
  ⇒device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
  ⇒device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
  ⇒device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
  ⇒device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
  ⇒device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

・クライアントウィンドウとバックバッファのサイズが違った
  ⇒AdjustWindowRectでサイズ計算したらちゃんとなってるか確認する

・CreateTextureFromFileExのフィルタ系パラメータをDEFAULTにしてた
  ⇒Filter → D3DX_FILTER_POINTにする
  ⇒MipFilter → D3DX_FILTER_NONEにする

・2のべき乗じゃないテクスチャーは使わない(前回までは40x40のテクスチャでした。今回32x32)

以上連投失礼いたしました
813792:2009/05/13(水) 22:45:07
もう一個忘れてた

・プリミティブの4頂点はそれぞれ-0.5しておく
  ⇒テクセルの不一致対策

以上です
814デフォルトの名無しさん:2009/05/13(水) 23:33:32
表はいいけどひっくりがえすと0.5ずらしたヤツってさらにずれてね?
815デフォルトの名無しさん:2009/05/14(木) 00:05:55
問題文、選択肢、解答を順に表示させるプログラムを作りたいんですが、
どのように作ったらいいか悩んでます。
キーを押すごとに変わるようにしたいんですが・・・
いい案をください。
初心者で申しわけありません
816デフォルトの名無しさん:2009/05/14(木) 00:27:54
printf("問題");
getchar();
printf("選択肢");
getchar();
printf("解答");
getchar();

ん?DirectX と何の関係があるの?
817デフォルトの名無しさん:2009/05/14(木) 00:36:11
Direct3Dで表示したいってことじゃね?
818デフォルトの名無しさん:2009/05/14(木) 00:43:25
先は長いな
819792:2009/05/14(木) 01:12:12
>>814
まじかwwwww
これから反転や回転を組み込もうと思ってたのにどうしよう
回転ヤバス
820デフォルトの名無しさん:2009/05/14(木) 01:24:33
反転や回転してからずらせよ
821デフォルトの名無しさん:2009/05/14(木) 01:41:30
ためしてないけどDX9ではこうなんじゃないの
float u_offset = 0.5f / texWidth;
float v_offset = 0.5f / texHeight;
SETVERTEX(v[0], x, y, 0.0f, 1.0f, 0xffffffff, 0.0f + u_offset, 0.0f + v_offset);
SETVERTEX(v[1], x2, y, 0.0f, 1.0f, 0xffffffff, 1.0f + u_offset, 0.0f + v_offset);
SETVERTEX(v[2], x, y2, 0.0f, 1.0f, 0xffffffff, 0.0f + u_offset, 1.0f + v_offset);
SETVERTEX(v[3], x2, y2, 0.0f, 1.0f, 0xffffffff, 1.0f + u_offset, 1.0f + v_offset);
822デフォルトの名無しさん:2009/05/14(木) 11:02:15
DirectSoundCreate8 -> CreateSoundBuffer -> Lock -> Unlock -> Play でサウンドを再生するとき、
元々ステレオなサウンドをモノラルで再生したりステレオで再生したり、
切り替えるにはどうすればよいですか?
WAVEFORMATEX の nChannels は元のファイルがモノラルかステレオかに依存しますよね?
823デフォルトの名無しさん:2009/05/14(木) 11:44:11
>>822
WAVデータのほうをいじればいいんじゃないの
16ビットwavなら(L + R) / 2にしてLとRに同じデータ送る
824デフォルトの名無しさん:2009/05/14(木) 12:49:32
リニアPCMのデータ部って、8bit+8ibt ステレオなら
1Byte L
1Byte R
1Byte L
1Byte R
...
みたいに並んでますか?


825デフォルトの名無しさん:2009/05/14(木) 13:39:03
826デフォルトの名無しさん:2009/05/14(木) 14:08:29
おお、ありがとうございます!>>825
827デフォルトの名無しさん:2009/05/14(木) 23:23:34
Direct3Dで、テクスチャを生成するとき、
D3DXCreateTextureFromFileInMemoryEx系だとMipFilterを指定できるわけだが、
他のAPIでは同じフラグが見当たらないような気がする。

テクスチャが拡大・縮小される際の挙動をある程度こちらで指定したいんだけど、
いい方法はないだろうか。
SetRenderState()などで変えられるんだろうか?
828デフォルトの名無しさん:2009/05/14(木) 23:53:37
>>827
SetSamplerStateで
D3DSAMP_MIPFILTER
D3DSAMP_MINFILTER
D3DSAMP_MAGFILTER
あたり
829デフォルトの名無しさん:2009/05/15(金) 00:36:10
>>828
ありがとう。さっそくそれを試してみることにするよ。
830デフォルトの名無しさん:2009/05/15(金) 11:47:33
D3DXSpriteってシェーダーで出力できる?
831デフォルトの名無しさん:2009/05/15(金) 12:54:40
VC++2008EEとDXSDK(おそらく最新版?)とEasy Link Library(某サイトより頂きました)
を使用しているのですがビルドを実行した所、
>fatal error C1083: include ファイルを開けません。'dsound.h': No such file or directory
というエラーが出てきました。
過去レスを参考にしてIncludeファイル内にdsound.hを探してみたのですが見当たりませんでした。
DXSDKの古いバージョンをインストールし直せばいいのでしょうか?

C言語、プログラムの知識は授業の一貫でテンプレに沿ってシューティングゲームを作った程度ですので
特に環境面?(VCの初期設定等)はあまり詳しくありません。
832デフォルトの名無しさん:2009/05/15(金) 13:14:26
ちゃんんとVisualStudioの設定で
DirectXSDKのインクルードファイルとライブラリファイルへの
パスを設定したのかい?
833831:2009/05/15(金) 13:28:37
834デフォルトの名無しさん:2009/05/15(金) 13:42:16
>>833
なにその中途半端なパスは
それは$(WindowsSdkDir)じゃないのか
普通にインストールしたら
C:\Program Files\Microsoft DirectX SDK (November 2008)\Include
C:\Program Files\Microsoft DirectX SDK (November 2008)\Lib\x86
になるよ
835831:2009/05/15(金) 14:13:23
http://uproda.2ch-library.com/1286805H2/lib128680.png
http://uproda.2ch-library.com/128681Lo5/lib128681.png

>>834
早速、ご指摘の通り直してみたのですが同様に
>fatal error C1083: include ファイルを開けません。'dsound.h': No such file or directory
とエラーが吐かれます。
836766:2009/05/15(金) 14:15:14
打開した
作られてたバックバッファテクスチャ・Z値テクスチャがnの2乗だったから画面に合わせて縦横比を調節しなければならないというオチだった
837デフォルトの名無しさん:2009/05/15(金) 14:16:17
ご指摘の通り・・・?
838デフォルトの名無しさん:2009/05/15(金) 14:32:06
>>835
エクスプローラで本当にその場所にdsound.hがあるか確認してみて。
ちゃんと確認した?
839デフォルトの名無しさん:2009/05/15(金) 15:06:07
あるわけねーだろww
840831:2009/05/15(金) 15:24:14
Microsoft DirectX SDKを勘違いしていたみたいです、申し訳ありません。
>fatal error C1083: include ファイルを開けません。'dsound.h': No such file or directory
のエラーは無事解決しました。
dsound.hの存在も確認しました。

今度は
>error C2664: 'CreateMutexW' : 3 番目の引数を 'char [2048]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
のようなエラーが58個出てきました。
エラーログをクリックしたところel.hを参照したのですが、el.hが古い型なので対応してないという事なのでしょうか?
841デフォルトの名無しさん:2009/05/15(金) 15:30:31
プロジェクトのプロパティを開いて
全般の設定項目の中の文字セットを
「Unicode文字セットを使用する」を
「マルチバイト文字セットを使用する」に変更する

てゆうか、すでにDirectX以前の問題だらけじゃね?
842デフォルトの名無しさん:2009/05/15(金) 15:37:18
まあ実際初心者はdirectX以前につまずくからしょうがない
俺も最初そうだったし
843831:2009/05/15(金) 15:39:17
>>841
>error C2664: 'CreateMutexW' : 3 番目の引数を 'char [2048]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
のエラーは解決できました、ありがとうございます。

やはり私のような者には向いていないようですので諦めようと思いますレスありがとうございました。
844デフォルトの名無しさん:2009/05/15(金) 15:43:02
まぁ、elはDirectX6時代の産物だから
上記の変更以外にいろいろ追加したり
たりないlibファイルとか引っ張ってこないといけなかったりするから
初心者には逆に辛いかもね

素直に初心者サイトで勉強するか
現在もサポートされてる簡易ライブラリを探した方がよさそう
845デフォルトの名無しさん:2009/05/15(金) 15:52:45
つーか余計なことしようと思わなければミューテックスなんて使わないと思うんだが
846デフォルトの名無しさん:2009/05/15(金) 16:11:15
別にミューテックス使おうとしたから出たエラーじゃなくて
el.hをインクルードした時点で出るエラーだからしゃーないんじゃない?

すでに未公開だからうろ覚えだけどEasyLinkLibraryって
5万行近いel.hという一つのファイルににすべてが書き込まれた
ラッパー関数群だからこの中から必要なものだけを取り出すなんて初心者には無理でしょ
847デフォルトの名無しさん:2009/05/16(土) 03:31:41
しかし、この程度であきらめてしまうとは情けない
848デフォルトの名無しさん:2009/05/16(土) 03:32:20
流石にあの物量はやばいだろ
849デフォルトの名無しさん:2009/05/16(土) 19:42:22
どなたかDirectSoundに詳しい人いますか?
850757:2009/05/16(土) 22:30:02
いろいろあって書くの遅くなりました・・すいません

シェーダー以前の問題があるようなんです。シェーダー未適用の状態で
一切表示されなかったんですが、それが駄目なのかもしれません。

頂点位置の後にブレンドの重みと行列インデックスを置くというルール、無視できないんでしょうか?

何をしようかとしているというと、Irrlichtという3Dエンジンに
ハードウェアスキニングを実装しようとしています。それで新たに構造体S3DVertexWeightを作ろうとしました。
初めはIrrlichtに元からある構造体S3DVertexの派生クラスとして作ろうとしたんですが、
そうすると頂点位置の後にブレンドの重みと行列インデックスを置くことが出来ません。

かといって派生させないで作ろうとすると、基底クラスにキャストしたりしている部分があるため
落ちたりなどいろいろ問題がおきます・・。
851757:2009/05/16(土) 22:32:53
1つしかマテリアルが無いならボーンで
メッシュを分割するのは簡単そうですが
複数マテリアルがあると難しそうです・・。
852デフォルトの名無しさん:2009/05/16(土) 23:01:20
>>850
よくDirect3Dの基本も分かってない状態で、そんな面倒なことに手を出そうとするなぁ。

各成分の順番も自由だし、1つの構造体である必要すらない。
データ数さえ揃っていれば、成分ごとに別のバッファに分けてもいい。
853デフォルトの名無しさん:2009/05/16(土) 23:06:50
>>849
音出したいなら素直にXAudio2使っとけ
854757:2009/05/16(土) 23:50:28
>>852

もしかして
D3DVERTEXELEMENT9の方を使うんでしょうか?こっちは順番の制限が無い?
(今までFVFを使っていました。IrrlichtのコードがFVF使っているので・・)
移行するのが大変そうですがやってみます。
855デフォルトの名無しさん:2009/05/17(日) 12:33:54
MMORPGのような広大な地形をどのように扱ったらいいかが書かれている書籍やWebサイトを
ご存知でしょうか?
移動範囲すべてを一気にロードしたらポリゴン数がすごいことになると思いますし、
平地でポリゴン数は少なくできても、テクスチャの解像度が問題になると思います。
このあたりをどう処理するのかが知りたいです。
もちろん、いろいろなアプローチの仕方はあるでしょうけど、何か基本となる考え方、方針、
実現例を知ることができればうれしいです。

よろしくお願いします。 m(_ _)m
856デフォルトの名無しさん:2009/05/17(日) 12:41:54
手っ取り早い方法。

普通にマップをモデルデータとして作る。
ツールで特定の範囲単位に切断する。
切断したブロック単位でロードや表示をする。

テクスチャの解像度とかはまったく別の話。
1枚のテクスチャを真上から貼るわけじゃないし。
857デフォルトの名無しさん:2009/05/17(日) 13:57:10
HLSLを使うと
D3DXMatrixIdentity(&matWorld);
D3DXMatrixScaling(&matScale,Size,Size,Size);
D3DXMatrixMultiply(&matWorld,&matWorld,&matScale);
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
で拡大縮小できなくなりますが
どうすればいいのですか?
858デフォルトの名無しさん:2009/05/17(日) 14:23:26
DrawPrimitiveの手前で pd3dDevice->SetVertexShader(NULL); でok
859デフォルトの名無しさん:2009/05/17(日) 14:30:19
>>857
音出したいんじゃなくてキャプチャして再生したい
860デフォルトの名無しさん:2009/05/17(日) 14:31:46
861デフォルトの名無しさん:2009/05/17(日) 14:44:24
俺はXBOX360やゲイツ関係が大嫌いなんです
862デフォルトの名無しさん:2009/05/17(日) 14:46:55
なぜここでそんな話を?
863デフォルトの名無しさん:2009/05/17(日) 14:53:28
JAVAでOpenGL使えばいいよ
864857:2009/05/17(日) 16:30:27
シェーダー使いながら拡大縮小するにはどうすれば?
頂点シェーダーでやるの?
865デフォルトの名無しさん:2009/05/17(日) 17:10:39
>>864
もちろんその通り
866857:2009/05/17(日) 18:20:16
HLSL使う場合は移動とか回転も頂点シェーダー?
どこかに解説ないかな?
867855:2009/05/17(日) 18:33:05
>>856
ありがとうございます。
分割して、あとはワールド座標系の位置に応じて適宜マップモデルをロードする形式で
いこうと思います。

テクスチャについてもう少しお聞きしたいです。
>1枚のテクスチャを真上から貼るわけじゃないし。
そうだと思ってました(汗)
10km四方のマップなら10km四方分のテクスチャが要ると思ったのですが、違うのでしょうか?
土や草、岩肌をそれぞれ単独え表現したテクスチャを組み合わせて貼り付けるようなカタチで
テクスチャ容量を削減しながらもそれらしく見えるようにするのでしょうか??

ttp://image.blog.livedoor.jp/oreno/imgs/6/5/652b59d0.jpg
コンバット系のゲームを見ると、非常に広範囲を表現した大量のテクスチャを持っていそうに
見えるのですが・・・
868デフォルトの名無しさん:2009/05/17(日) 20:23:13
木とは明らかに別のテクスチャだろう。
そんな広大な範囲のマップをテクスチャ1枚で解像度が足りない。
ならテクスチャを増やすしかないのは当然だと思うが。
869デフォルトの名無しさん:2009/05/17(日) 21:31:16
MMORPGとフライトシューは地形における方法論が全然違うだろ
870855:2009/05/17(日) 21:50:42
失礼しました^^;
871デフォルトの名無しさん:2009/05/17(日) 23:10:47
High Dynamic Range レンダリングについて、物理的な観点で解説した書籍をご存知ないでしょうか?
有名なGame Programming GemsやGPU Gems、あるいはShaderX等お持ちの方、それらには
掲載されていないでしょうか?
872デフォルトの名無しさん:2009/05/17(日) 23:12:10
フライトシミュレーターなんて遠くからきれいに見えればいいから
テクスチャをそこまで細かく作る必要はないな。

エスコン4の地形は4096のテクスチャ張ってるだけだったっけ?
まぁあれはPS2時代だからああいう方法だったんだろうけど。
873デフォルトの名無しさん:2009/05/18(月) 23:53:46
ポリゴンが描画されなくて困っています
頂点バッファとインデックスバッファを持ち、初期化、描画、解放を行うクラスがあって
そのクラスを派生させて平面の生成と描画を行うクラスを作り、それを使って描画させてみたんですが、何も表示されません

http://monoganac2.sakura.ne.jp/src/milktea25467.txt
クラスの部分のソースです

Plane plane;って感じで定義して、初期化の部分でplane.Create( 1, 1, pd3dDevice );こんな感じで生成して
plane.Draw( pd3dDevice );これで描画させたいんです
874デフォルトの名無しさん:2009/05/19(火) 00:28:50
>>873
sizeof(vertices)、sizeof(&index)で返ってくる値がおそらく想定されたものではない
と流し読みをしてレスしてみる
875デフォルトの名無しさん:2009/05/19(火) 00:35:58
>>874
解決しました!ありがとうございます!!
876855:2009/05/19(火) 00:56:15
>>872
ありがとうございます!
参考になります!
877デフォルトの名無しさん:2009/05/19(火) 01:14:19
球へのテクスチャマッピングで
d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);
でテクスチャラッピングに成功したのですが、テクスチャの大きさが2の累乗でない時に端の方がおかしくなります。
また、テクスチャの一部を球に貼り付けることも出来ません。どうにかならないでしょうか?
878デフォルトの名無しさん:2009/05/19(火) 03:52:20
質問です。
DirectSoundで音を再生するクラスを作りました。
この時点で音がなったので満足したので次に音量を調整できるようにしたいのですが
音量の調節ができません。
bool CSound::Load(char *name, long vol){
//音楽読み込み
LPDIRECTSOUNDBUFFER8 p;
//音読み込み自作関数
p = CreateSoundObj(name,DSBCAPS_CTRLVOLUME,GUID_NULL);
if(p == NULL){
return false;
}
else{
//コレクションに追加
p->SetVolume(vol);
this->SoundCollect.push_back(p);
}
return true;
}
CreateSoundObj内ではFlagにきちんとセットしてるはずですが
音の大きさが変化しません、なんででしょうか?
879デフォルトの名無しさん:2009/05/19(火) 03:57:32
HRESULT ret = p->SetVolume(vol);
とやって、retの値がどんなエラー値になっているか調べろ
880878:2009/05/19(火) 04:25:48
今確認しました所retの返り値はS_OKでした。
881878:2009/05/19(火) 04:32:32
すいません改めて全てのサウンドをチェックしたら
ボリュームに0以外をセットするとE_INVALIDARGが返ってきました。

調べてみたところ構造体のdwSizeを初期化しないとそうなる可能性が多いとの事ですが
どうやら初期化はしてあったみたいです

DSBUFFERDESC dsbdesc;
ZeroMemory(&dsbdesc,sizeof(DSBUFFERDESC)); //0クリア
dsbdesc.dwSize = sizeof(DSBUFFERDESC); //構造体のサイズ
882デフォルトの名無しさん:2009/05/19(火) 06:32:12
ジョイスティックで入力した方向にモデルを向かせて
移動させるにはどうすればいいでしょうか?
883デフォルトの名無しさん:2009/05/19(火) 06:37:15
>>882
何がしてぇんだよ
入力した方向にキャラ向けりゃいいじゃん
884デフォルトの名無しさん:2009/05/19(火) 06:40:00
ケーブルを挿しわすれていただけでした^^;
885882:2009/05/19(火) 07:02:59
>>883
現在のキャラの向いている方向から、入力された方向への回転をどうすれば良いでしょうか?
現在の向いている方向へのベクトルと、向きたい方向へのベクトルが
一致するまでRotationするとかでしょうか?
886デフォルトの名無しさん:2009/05/19(火) 07:13:30
>>878
古めのSDKを入手して、DirectSoundのサンプルを眺めてみたら?
DirectSoundはcreateしてSoundBufferつけて書き込んだだけじゃ音はならないよ。
887デフォルトの名無しさん:2009/05/19(火) 07:15:00
>>885
アークタンジェント使え
888デフォルトの名無しさん:2009/05/19(火) 09:29:16
>>885
そりゃもう算数の話だ。
DirectX関係ねぇ。
889デフォルトの名無しさん:2009/05/19(火) 10:02:09
XAudio2でサウンドのエンジンを実装してみたが、簡単に作れるようにできてるんだなー。
ストリームのスレッドの存在もほとんど意識する必要ないし。
コールバック中でSourceVoiceの破棄がかけられないところくらいか。

ところで、DirectSoundとXAudio2ってPCにかかる負荷ってどれくらい違うんだろう。
XPとVistaで変わってくると思うんだけど。
890デフォルトの名無しさん:2009/05/19(火) 11:32:42
ID3DXFont で描画するときに、座標変換の行列を適用させる方法ってありませんか?
ID3DFont::SetTransform() みたいなのがほしいんですけど....
891デフォルトの名無しさん:2009/05/19(火) 11:39:29
その辺はオレも知りたいな。
明らかにD3DXSprite系は通常の空間座標変換を無視して描画してる。
まあたぶんrhw使って直に書いてるんだろうけど。
892デフォルトの名無しさん:2009/05/19(火) 12:39:41
pd3dDevice->SetTextureと
g_pEffect->SetTextureって何が違うのですか?

今、blenderでuvマッピングしたtgaファイルの指定の入ってるxファイルの物体を
g_pMesh->DrawSubset( 0 )で表示させたいのですが物体すら表示されません、どうしてでしょうか?
893デフォルトの名無しさん:2009/05/19(火) 13:11:33
上は描画デバイスにテクスチャをセットしてる
下はシェーダーにテクスチャのデータ渡してるだけ

質問内容から推測すると、まだシェーダーを扱うレベルに達していないみたいだから
普通にpd3dDeviceの方にしとけ
894デフォルトの名無しさん:2009/05/19(火) 13:19:53
ありがとうございます
シェーダは難しそうだから飛ばしてたのですが、勉強したほうが良いですか?
何か必然性を感じなかったのですが
895デフォルトの名無しさん:2009/05/19(火) 13:36:26
感じてないならまだ触らなくていいよ
896デフォルトの名無しさん:2009/05/19(火) 14:08:17
あーわかんね
g_pEffect->SetTexturだとuvテクスチャは張れないわけ?
いろいろ書き直すの超面倒くせえ
897デフォルトの名無しさん:2009/05/19(火) 14:10:11
>>877
をお願いします
898デフォルトの名無しさん:2009/05/19(火) 14:20:39
>>877
まずは板ポリを作ってそれを正面から眺めながら考えればいいんじゃね?
ヒント: テクスチャー座標
899デフォルトの名無しさん:2009/05/19(火) 14:22:48
テクスチャが二の累乗でない場合は内部で自動的に二の累乗に拡張される
拡張された所に何が入るかは知らないけどそれが見えてる
二の累乗に自前で事前に拡大しとけ
900デフォルトの名無しさん:2009/05/19(火) 14:38:47
>>899
ありがとうございます。
テクスチャのフィルターをD3DX_FILTER_LINEARにしたら、希望通りの動作になりましたが、これは、どの環境でも同じく動くのでしょうか?
901デフォルトの名無しさん:2009/05/19(火) 14:40:52
>>897
>テクスチャ ラッピングに [0.0, 1.0] の範囲外のテクスチャ座標が含まれないようにすること。
>このような座標が含まれている場合の結果は不定である。

ヘルプにもこうあるから、

>また、テクスチャの一部を球に貼り付けることも出来ません。

これはちょっと出来そうに無いな。
プリサンプルシェーダとかあればまた別なんだが。
素直にテクスチャを作り直すとか。
902デフォルトの名無しさん:2009/05/19(火) 14:43:16
>>901はちょっと違うか
まあ、[0.0, 1.0]以外を想定した作りになっていないってことで
903デフォルトの名無しさん:2009/05/19(火) 15:11:19
>>901
球用に新しくテクスチャを作ることにします。ありがとうございます。
904デフォルトの名無しさん:2009/05/19(火) 15:27:21
UVで作った通りにテクスチャが張り付かないんだがなんで?
905デフォルトの名無しさん:2009/05/19(火) 16:11:26
PAやSPFの低い値のものをお使い下さい
906デフォルトの名無しさん:2009/05/19(火) 16:26:45
そういうのじゃないんだよな〜
blenderで作った物体をサンプルのチュートリアルの虎の奴でやったらうまく張り付かないっていう
2個ビューア持ってるんだけど1個は暗くて見えなくて、1個では完璧っていう
907デフォルトの名無しさん:2009/05/19(火) 17:08:08
日本語でおk
908デフォルトの名無しさん:2009/05/19(火) 17:11:37
もう見てやるからソースをモデルファイル出せよ
909デフォルトの名無しさん:2009/05/19(火) 17:16:07
blenderでuvマッピング済みのxファイルとtgaファイルを作った
2つ持ってるxファイルビューアのうち一つではちゃんとテクスチャの貼られた作った通りの物体が表示される
しかしもう一つでは物体が真っ暗になって表示されない
サンプルのチュートリアルのタイガーの部分に移植したら色はついてるが思ったとおりの座標で貼られてない
なんで?
910デフォルトの名無しさん:2009/05/19(火) 17:21:42
911デフォルトの名無しさん:2009/05/19(火) 17:23:08
            ∩_
            〈〈〈 ヽ
           〈⊃  }
     /ニYニヽ   |   |
    /( ゚ )( ゚ )ヽ  !   !
  /::::⌒`´⌒::::\ |  /
  | ,-)___(-,| / <これっていうwwwwwwwwwwwwwwwwwwwwww
  、  |-┬-|  /
 / _ `ー'´ /
 (___)  /
912デフォルトの名無しさん:2009/05/19(火) 18:16:38
>>900
D3DX_FILTER_LINEAR は、D3Dが有効なら必ずサポートされていることになっている。
が、2の累乗ではないサイズのテクスチャが取り扱えるかどうかは環境依存。
動的に作られるテクスチャの場合、GetDeviceCapsで予め調べて、サポートされて
いなければ2の累乗で作成する。なおテクスチャの一辺の長さも環境依存なので調べてから使え。
913デフォルトの名無しさん:2009/05/19(火) 18:19:35
>>900
すまん嘘書いた。>>912
必ずサポートされているのは、_POINTだった。
でも、DX9が出て以降登場したカードに、_LINEARがサポートされてないのは見たことない。
914デフォルトの名無しさん:2009/05/19(火) 19:19:13
>>909
とりあえず、Normalベクトルが全部0だよ。
こいつを無視するようにしたら、自前のビューワでは
ちゃんと表示できたよ。
しかしNormalを全削除しても
SDK付属のビューアでは真っ黒表示だな。
これはよくわからん。

915デフォルトの名無しさん:2009/05/19(火) 19:31:12
ちょっと知恵を貸してください。やろうとしていることは>>611です。

SDKのサンプルにキャプチャサンプル(キャプチャしてwaveファイルに書き込む)なるものが入っていてそれを改造しています。
キャプチャバッファに音声データ部分が&pbCaptureData、&pbCaptureData2の2種類あって、&pbCaptureData部分だけに音声データが収納されているようなのです。
(&pbCaptureData2を削ってもちゃんとwaveファイルが作成されていた。&pbCaptureData2はバッファより大きい場合のために用意されている?)

&pbCaptureDataを再生バッファに送っても先頭部分にしか書き込まれておらず、再生バッファ周期でブツブツ途切れています。
再生バッファの新しい書き込み位置は古い&pbCaptureDataのすぐ後になるはずですがどうしてこうなるんでしょうか。
916デフォルトの名無しさん:2009/05/19(火) 19:43:02
>>914
サンクス!
まさに今できた!
917デフォルトの名無しさん:2009/05/19(火) 20:04:42
DXUTは使わないほうが良いの?
918デフォルトの名無しさん:2009/05/19(火) 20:15:00
便利だと思えば使えばいい
不要だと思えば使わなければいい
919デフォルトの名無しさん:2009/05/19(火) 20:17:36
むしろ不便さがよく言われてる様に思うのですが…
使ってない方が評判が良い様な気もするし
920デフォルトの名無しさん:2009/05/19(火) 20:33:25
だって横にツールウィンドウだしたほうがどうやっても楽だもん
921デフォルトの名無しさん:2009/05/19(火) 20:40:22
え?DXUTって何かGUIだっけ?の様な物なの?
922デフォルトの名無しさん:2009/05/19(火) 21:11:57
>>921
いや、俺が勝手にそう思ってただけ
923デフォルトの名無しさん:2009/05/19(火) 21:19:41
DXUTが隠蔽してる部分をいじりたいからDXUTは使わんなぁ

>>915
再生バッファのロック開始位置が常に0なんだから先頭部分にしか書き込まれないんじゃ?
924デフォルトの名無しさん:2009/05/19(火) 22:25:56
>>923
キャプチャ---------------------------------------------
○○○○○○◎◎◎◎◎◎△△△△△▲▲▲
白抜き:すでに読み込んだデータ
三角黒:未読
◎:ロックされたデータ

この◎◎◎◎◎◎を再生バッファにコピーして

再生バッファ---------------------------------------------
◎◎◎◎◎◎△△△△▲▲▲▲▲
◎:ロックしたデータ
◎◎◎◎◎◎△△△△:用意したバッファ

こうやって書き込んだら次のロック開始位置は自動的に

◎◎◎◎◎◎△△△△▲▲▲▲▲
        ↑ここ
になるんじゃないの?
925デフォルトの名無しさん:2009/05/19(火) 22:43:49
478 :名前は開発中のものです。 :sage :2009/05/19(火) 11:19:18 ID:4UcrHdRs
  DXUTとういのが難しいと聞いたのですが
  DXUTはどういうメリットがあるのですか?

479 :名前は開発中のものです。 :sage :2009/05/19(火) 12:47:11 ID:dNq8QNpp
  ウインドウの生成やそれに伴うメッセージ処理、DirectXの初期化など
  面倒くさいところを引き受けてくれる
  これすら難しいならs

480 :名前は開発中のものです。 :sage :2009/05/19(火) 12:56:35 ID:4UcrHdRs
  つまり面倒さが
  DXUTにそういう処理を引き受けさせるための処理>ウインドウの生成(ryのための定番処理
  だから嫌われてるの?今DXUTで作ってるんだが…

481 :名前は開発中のものです。 :sage :2009/05/19(火) 14:05:59 ID:vLQKBLqv
  >>480
  『 誰に 』 嫌われてるの?

482 :名前は開発中のものです。 :sage :2009/05/19(火) 14:12:04 ID:4UcrHdRs
  >>481
  2ちゃんねらーに悪口言われてカワイソス

483 :名前は開発中のものです。 :sage :2009/05/19(火) 14:34:46 ID:yVfOUj6/
  何事もなかったことにして次行った方が良さそうだね
926デフォルトの名無しさん:2009/05/19(火) 22:48:08
>>924
ならない
927デフォルトの名無しさん:2009/05/19(火) 22:57:00
>>890

pSprite->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_OBJECTSPACE );
pSprite->SetTransform( &mWorld );
pFont->DrawText( pSprite, str, -1, &rc, DT_NOCLIP, col );

フォントのDrawTextの最初の引数にスプライトのポインタを指定すると
スプライトのSetTransformでセットしたワールド変換で文字表示されます。

スプライトのBeginにD3DXSPRITE_OBJECTSPACEを指定すると3D空間表示に
なります。
928デフォルトの名無しさん:2009/05/19(火) 23:26:08
>>926
再生バッファ->SetCurrentPosition();でオフセットするのかな?
929デフォルトの名無しさん:2009/05/20(水) 00:08:15
ロック開始位置はLock()関数の第一引数だぞ
930デフォルトの名無しさん:2009/05/20(水) 00:36:47
おkおk
再生バッファ->GetCurrentPosition( &point, 0 );
if ( point > 前回のロック長);
でもいいよね?
931デフォルトの名無しさん:2009/05/20(水) 00:56:21
話が読めんが一応注意しとくと
GetCurrentPosition()で取得できるのはバッファ上の再生カーソルの位置のチョイ後ろ
その上かなりアバウトな値吐いてくるぞ
932デフォルトの名無しさん:2009/05/20(水) 00:59:53
そうだろうね
途切れ途切れがなおらない上にマイク入力から0.数秒のラグが付くようになった
933デフォルトの名無しさん:2009/05/20(水) 01:17:25
D3DXMatrixScaling(&matScale,Size,Size,Size);
D3DXMatrixMultiply(&matWorld,&matWorld,&matScale);
m = matWorld * matView * matProj;
m_pEffect->SetMatrix( m_hmWVP, &m );

シェーダーの時のサイズ変更はこれでいいんだね?
934デフォルトの名無しさん:2009/05/20(水) 01:21:24
スプライトをテクスチャに書くにはどうすればいいの?
935デフォルトの名無しさん:2009/05/20(水) 01:31:32
>>933
間違いではないが、意図してるのはこっちじゃないか
D3DXMatrixMultiply(&matWorld,&matScale,&matWorld);
936デフォルトの名無しさん:2009/05/20(水) 01:34:19
IDirectXFile::CreateEnumObject()に
XfileのパスとしてUnicode文字列を渡すと失敗する。
もしかして、日本語のパスってサポートしてない?
937933:2009/05/20(水) 02:06:05
D3DXMatrixMultiply(&matWorld,&matScale,&matWorld);

D3DXMatrixMultiply(&matWorld,&matWorld,&matScale);

どっちも同じ結果になるけど?
938デフォルトの名無しさん:2009/05/20(水) 02:39:51
>>937
まあそうかもな。
例えば、SizeをXYZ軸で分けたときとか、
matWorldに平行移動成分が入ってるとき
違いが出る。
939915:2009/05/20(水) 05:19:22
だんだん良くなってきたけど新しい問題が出てきた
マイクで音を拾う→再生→再生した音をキャプチャが拾う→再生・・・・(永久ループ)
ってなってバッファ分の音がだんだん大きくなって耳とPCを壊すところだった・・・
940デフォルトの名無しさん:2009/05/20(水) 08:07:13
フィードバックエフェクタがただで実装できて良かったじゃん
941デフォルトの名無しさん:2009/05/20(水) 20:19:52
シェーダー使ってるときのスプライトとか2D描画はどうやるの?
板ポリ作って自前でやるの?
942デフォルトの名無しさん:2009/05/20(水) 20:39:43
DirectXにスプライトなど無い。
943デフォルトの名無しさん:2009/05/20(水) 22:11:29
// pMatrix を使って文字列を描画
// pDev にはあらかじめ単位行列を SetTransform してあるので、
// pDev 行列にさらに pSprite の行列がかかったとしても、最終的な変換行列は pMatrix に一致するはず
RECT rect = {0, 0, 0, 0};
D3DXCreateSprite(pDev, &pSprite);
pSprite->Begin(pSprite, D3DXSPRITE_ALPHABLEND);
pSprite->SetTransform(pSprite, pMatrix);
pFont->DrawText(pSprite, s, -1, &rect, DT_NOCLIP, WHITE);
pSprite->End(pSprite);
pSprite->Release(pSprite);

// 上記と同じ pMatrix を使って四角形を描画
v[0].pos = D3DXVECTOR3(0, 0, 0); v[1].pos = D3DXVECTOR3(8, 0, 0);
v[2].pos = D3DXVECTOR3(0, 8, 0); v[3].pos = D3DXVECTOR3(8, 8, 0);
pDev->SetTransform(D3DTS_WORLD, pMatrix);
pDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, v, sizeof(VERTEX));

てやると、あきらかに別々の場所に表示されるんだけど、どうして
表示位置が一致しないの???
944デフォルトの名無しさん:2009/05/20(水) 22:42:11
pSpriteのメソッドの引数にpSprite渡すとか
マジでそんな担当者殴りたい仕様になってるの?
俺ならそんな関数作ったやつ関数修正するまで殴るのやめないけど
945デフォルトの名無しさん:2009/05/20(水) 22:56:34
>>944
Cから呼ぶときはthisポインタを第1引数に渡す。
よく分からんのが、943の前半はC形式で、後半がC++形式なとこ。

あと、pMatrixもよく分からんな。普通はそんな使い方しないと思うが。
946デフォルトの名無しさん:2009/05/20(水) 23:05:40
ごめん
pSprite->End();
pSprite->Release();
のまちがい。手元のプログラムは全部Cだから、
pSprite->lpVtbl->End(pSprite) とか書いてあるんだけど
C++のほうがシンプルで見やすいかと思って変換しながらスレに書き込んでた。

それよりも pMatrix の使い方の違和感についてkwsk
947デフォルトの名無しさん:2009/05/20(水) 23:16:09
>>946
余計まぎらわしいよ
余計なことすんな
そのまま貼り付けろ
948デフォルトの名無しさん:2009/05/20(水) 23:20:20
pSprite->SetTransform(pSprite, pMatrix);
pFont->DrawText(pSprite, s, -1, &rect, DT_NOCLIP, WHITE);

v[0].pos = D3DXVECTOR3(0, 0, 0); v[1].pos = D3DXVECTOR3(8, 0, 0);
v[2].pos = D3DXVECTOR3(0, 8, 0); v[3].pos = D3DXVECTOR3(8, 8, 0);
pDev->SetTransform(D3DTS_WORLD, pMatrix);

なんかこれあやしいよ
ソース間違ってるからさらにあやしい

なにが見やすいだバーカ
動かねぇんじゃ意味ねーんだよバーカ
949デフォルトの名無しさん:2009/05/20(水) 23:26:30
そもそもSpriteってワールド座標用なのか?
サンプル見る限りどう考えてもスクリーン座標用に見えるけど?

必要な変換わかってるか?

ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換

だぞ
スプライトがSetTransformの影響を受けないとしたら
上記変換が必要になる
っていっても上記情報はすでにそろっているはずなので
順番に変換していけばいいだけ
950デフォルトの名無しさん:2009/05/20(水) 23:39:07
うん?
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換
の各行列はすでに Device に SetTransform でセットされているとして、
それを GetTransform で取得しながら積を求めて最終的な行列を求め、
それを Sprite::SetTransform に渡す必要があるってこと?
951デフォルトの名無しさん:2009/05/20(水) 23:55:29
>>950
>Sprite::SetTransform
それ動いてる?
952デフォルトの名無しさん:2009/05/20(水) 23:56:33
DrawPrimitive前のSetTransformの仕様と
Sprite::SetTransformってそもそも同じなの?
953デフォルトの名無しさん:2009/05/21(木) 00:03:27
あやしくね〜?
仮にスクリーン座標とワールド座標の書き分けをこのスプライトクラスでやろうと思ったら
どうやればいいの?
っていうか酷くあいまいじゃない?
これは酷いウンコクラスであると予想

やっぱり
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換
必要なんじゃないかなぁ・・・
954デフォルトの名無しさん:2009/05/21(木) 00:07:43
下手にいじって混乱させてしまったみたいなので、手元で動かしてるテストコードそのままコピペします
--
ID3DXSprite *pSprite;
D3DXMATRIX *pWorld, proj, view, m1, m2;
RECT rect = {0, 0, 0, 0};
MyVERTEX v[4];

/* 行列の準備 */
pWorld = ID3DXMatrixStack_GetTop(g_dev->matstack);
IDirect3DDevice9_GetTransform(g_dev->device, D3DTS_PROJECTION, &proj);
IDirect3DDevice9_GetTransform(g_dev->device, D3DTS_VIEW, &view);

/* ポリゴンを描いてみるテスト(画面の中心に出る) */
MyVertex_InitArrayEx(v, 4, MyCOLOR_WHITE, 0);
v[0].pos = MyVector3i(0, 0, 0); v[1].pos = MyVector3i(8, 0, 0);
v[2].pos = MyVector3i(0, 8, 0); v[3].pos = MyVector3i(8, 8, 0);
IDirect3DDevice9_SetTransform(g_dev->device, D3DTS_WORLD, pWorld);
IDirect3DDevice9_DrawPrimitiveUP(g_dev->device, D3DPT_TRIANGLESTRIP, 2, v, sizeof(MyVERTEX));

--
次に続く
955デフォルトの名無しさん:2009/05/21(木) 00:09:41
つづき
--
/* 文字描画テスト */
D3DXMatrixMultiply(&m1, pWorld, &view);
D3DXMatrixMultiply(&m2, &m1, &proj);
D3DXCreateSprite(g_dev->device, &pSprite);
pSprite->lpVtbl->Begin(pSprite, D3DXSPRITE_ALPHABLEND);
pSprite->lpVtbl->SetTransform(pSprite, &m2);
ID3DXFont_DrawTextA(g_dev->font, pSprite, "HELLO", -1, &rect, DT_NOCLIP, g_dev->color);
pSprite->lpVtbl->End(pSprite);
pSprite->lpVtbl->Release(pSprite);

補足:
MyVector3i() は D3DXVECTOR3() と同じ
MyVertex_InitArrayEx は MyVERTEX の配列を初期化する関数
956デフォルトの名無しさん:2009/05/21(木) 00:13:09
で、上記のようにするとポリゴンは画面中心に出ますが、文字は見えません。
pSprite->lpVtbl->SetTransform に渡す行列を m1 にすると、文字は左上に出ます。
ポリゴンと同じ場所に文字列を描画というのが目的なんですけど、
うまくいきません。
957デフォルトの名無しさん:2009/05/21(木) 00:15:02
>>955
それだと今度ビューポート変換なくねぇ?
とりあえずヘルプの仕様どおりにワールド座標から突っ込んでみたら?
958デフォルトの名無しさん:2009/05/21(木) 00:19:41
ちなみにヘルプには

スプライトの元のワールド空間からのトランスフォームを格納する D3DXMATRIX へのポインターです。
このトランスフォームを使用して、スプライトのスケーリング、回転、またはトランスフォームを行います。

とかいってるけどビュー変換 → 射影変換 → ビューポート変換にはなにもいってねぇ
余計まぎらわしい
殴りたいなこのクラス作ったやつ
っていうかここまで苦労するならもう使わないほうがよくねぇw
なにかメリットあるの?これ?w
959デフォルトの名無しさん:2009/05/21(木) 02:05:16
何も考えずに座標指定したらそのままスクリーン座標になるわけだ。
考えやすいじゃないか。
実際、自作の3Dレンダラーと組み合わせるとき、デバッグ情報を画面に表示させるのが楽だったぞ。
960デフォルトの名無しさん:2009/05/21(木) 06:13:45
>>959
ふざけんなよw
だってこの仕様じゃDrawPrimitive使ったほうが楽じゃねぇかよ(笑)

なにこれ?ふざけてるの?
クラス作ったヤツ「このクラスは必要ありません」って言えよw
961デフォルトの名無しさん:2009/05/21(木) 07:08:49
>>960
2D描画の世界はそういうものだ。
自分の世界だけで全て語れるというものではない。
962デフォルトの名無しさん:2009/05/21(木) 10:33:52
>>955

スプライトのBeginにD3DXSPRITE_OBJECTSPACEを指定すれは、
スプライトのSetTransformに渡す行列がワールド変換行列として扱われる。

pSprite->lpVtbl->Begin( pSprite, D3DXSPRITE_ALPHABLEND | D3DXSPRITE_OBJECTSPACE );
963デフォルトの名無しさん:2009/05/21(木) 11:18:14
>962 追記、SetTransformにはワールド変換行列そのものを渡す

pSprite->lpVtbl->Begin( pSprite, D3DXSPRITE_ALPHABLEND | D3DXSPRITE_OBJECTSPACE );
pSprite->lpVtbl->SetTransform( pSprite, pWorld );
964デフォルトの名無しさん:2009/05/21(木) 12:53:54
あ、そーゆー仕様なんだ(笑)
わかりずらいなぁ
なんでSetTransformの仕様を俺仕様にしたんだろ?
気持ち悪い人が作ってそうだよね
965デフォルトの名無しさん:2009/05/21(木) 12:59:13
D3DXSPRITEだぞ
D3DX
あとはわかるな
966デフォルトの名無しさん:2009/05/21(木) 13:33:31
D3DXはなあ
Spriteにしても、サンプルひとつでもあればわかるんだが。
967デフォルトの名無しさん:2009/05/21(木) 13:59:46
>>964
お前が気持ち悪いわ
968デフォルトの名無しさん:2009/05/21(木) 14:42:00
DirectXって結構いいかげんだよね
969955:2009/05/21(木) 15:17:13
どうもありがとう、おかげで意図した座標に表示することができました。
ところで、ビューポートの行列を取得する関数ってないんですね。
GetViewport で取得した情報を元に自分で行列を作ったんですが、
もしかしてどこかに直接行列を取得する関数がありますか?
970デフォルトの名無しさん:2009/05/21(木) 21:34:30
DirectXにスプライトなどないと何度言わせる?
971デフォルトの名無しさん:2009/05/21(木) 22:46:52
頭悪そう
972デフォルトの名無しさん:2009/05/21(木) 23:02:11
そういうのがカッコイイとか思ってるんじゃない?
973デフォルトの名無しさん:2009/05/21(木) 23:34:59
行列使ってスケール、回転、移動と掛け合わせたまではいいんですが
なんか一個ずつズレてるんだけど原因わかりますか?
地形、飛行機と描画すると地形に設定したはずの行列が飛行機に適用されます
それ以降、オブジェクトを増やしても全部一個ずつズレます
なんとかして下さい
974デフォルトの名無しさん:2009/05/21(木) 23:43:03
原因も何も描画した後にSetTransformしてるだけでは?
975デフォルトの名無しさん:2009/05/22(金) 03:02:51
>>972
馬鹿発見
976デフォルトの名無しさん:2009/05/22(金) 10:07:56
こういう人って現場に入ってからも
「DirectXにスプライトなどない(キリッ)」っとか言っちゃうのかな
プッ
977デフォルトの名無しさん:2009/05/22(金) 12:24:39
なにこの状況・・・
978デフォルトの名無しさん:2009/05/22(金) 13:36:11
正しい用語を使えない人間は、現場でも役には立たない。
俺用語を使っている奴は勉強不足の上、指摘すると直すどころか逆ギレする。
979デフォルトの名無しさん:2009/05/22(金) 13:38:49
役立たずが逆切れしたの?
980デフォルトの名無しさん:2009/05/22(金) 13:42:46
正しい用語って言われてもなー
Direct3Dも広義には持ってると言えるし
狭義には持ってないとも言えるし
981デフォルトの名無しさん:2009/05/22(金) 14:31:50
いつもの使えないクズが逆切れしただけだろ。 放置放置。
982デフォルトの名無しさん:2009/05/22(金) 14:40:27
DirectX総合スレ (Part9)
494 :名前は開発中のものです。 :sage :2009/05/22(金) 14:12:09 ID:WlLdGHRw
  正しい用語を使っても相手に伝わらなければ無意味だけどな

勝てないと分かって姉妹スレに逃げた奴
983デフォルトの名無しさん:2009/05/22(金) 14:43:01
ワロタwwwwww
984デフォルトの名無しさん:2009/05/22(金) 14:47:33
Xファイルを読み込むとして
やっぱり動作を軽くするにはテクスチャとかを削るのが一番なの?
985デフォルトの名無しさん:2009/05/22(金) 14:59:46
ここまで全部俺の自演
986デフォルトの名無しさん:2009/05/22(金) 15:02:10
そもそも「スプライト」の定義すらあいまいなのに有無を論じるのは無駄
987デフォルトの名無しさん:2009/05/22(金) 15:17:32
そもそも正しいスプライトの定義って何なの?
おしえてエロい人
988デフォルトの名無しさん:2009/05/22(金) 15:45:31
主にテレビゲームで用いられる、画面上のキャラクタ(人物・物品等)など小さな絵を高速に表示するための技術的な仕組み

炭酸飲料
989デフォルトの名無しさん:2009/05/22(金) 16:06:19
簡単に言うと
"ハードウェア上で"2Dグラフィックを合成して出力する映像技術

ただコンシューマー畑では長い間
大きく分けて、BG(背景)とスプライト(キャラクタ)の二つのレイヤーを合成して
ゲームを作るという概念が一般的であり
現在もニンテンドーDSなどの携帯機でも現役の技術であるために
ハードの進化に伴い
プレイステーション以降のポリゴンによる2D表現
いわゆる疑似スプライトが一般的になってきた現在でも
2Dによるキャラクタ描画を特に区別することなく「スプライト」という場合が多い

スプライトが無いと言ってる派は
「ソフトウェアスプライトは厳密にはスプライトじゃねぇ」
それと叩いてるのは
「こまけぇことはどうでもいいんだよ!」

ということだと思われる
990デフォルトの名無しさん:2009/05/22(金) 16:06:44
西洋にいる伝説上の小人、妖精、子鬼。
991デフォルトの名無しさん:2009/05/22(金) 16:08:09
>>989
「ソフトウェアスプライトは厳密にはスプライトじゃねぇ」
→ 頭が固い

「こまけぇことはどうでもいいんだよ!」
→ 現実派

こんなとこかね。
992デフォルトの名無しさん:2009/05/22(金) 16:21:20
新スレ立てられなかった。
>>995 よろしく
993デフォルトの名無しさん:2009/05/22(金) 16:32:00
初心者だが、スプライトってのはサンタとソリを分けて合成する技術
と3D画面に2Dの板を入れるみたいな感じだと思ってた
994デフォルトの名無しさん:2009/05/22(金) 16:32:20
995ではないが

【C++】 DirectX初心者質問スレ Part23 【C】
http://pc12.2ch.net/test/read.cgi/tech/1242977486/l50
995デフォルトの名無しさん:2009/05/22(金) 17:18:39
ID3DXSprite != スプライト
っていうだけ。
996デフォルトの名無しさん:2009/05/22(金) 17:24:47
>>989
ソフトウエアスプライトはスプライトだろ。
問題は仮想的にでも背景とキャラクタを別レイヤで扱う機能を、
包括的に持っているかどうか。

だから
>「ソフトウェアスプライトは厳密にはスプライトじゃねぇ」
こんなことを事例に挙げてしまっている時点で、
頭が硬いという問題ではなく、>>989自体がただの馬鹿。
997デフォルトの名無しさん:2009/05/22(金) 17:28:24
こまけぇことはどうでもいいんだよ!
998デフォルトの名無しさん:2009/05/22(金) 17:31:17
もういいから埋めろよ
999デフォルトの名無しさん:2009/05/22(金) 17:34:25
背景とキャラクタを別レイヤで扱う機能がスプライトじゃないけどな
1000デフォルトの名無しさん:2009/05/22(金) 17:35:56
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。