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

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

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

1 :デフォルトの名無しさん:2009/06/22(月) 22:06:29
※回答する人も、質問する人も必ず読んでください

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

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

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

【C++】 DirectX初心者質問スレ Part23 【C】
http://pc12.2ch.net/test/read.cgi/tech/1242977486/

2 :デフォルトの名無しさん:2009/06/22(月) 22:28:04
四十年勤め上げた會社を退職し早二十年、何やら張り合いの無い日々を送る内、
大學生の孫に「退屈しのぎに遣って見たまへ」と勸められた弐チヤンネル。
當初は「こんな電腦?示板、何たる幼稚加減」と莫迦にしてゐたものの、
遣つて見ると存外に面白ひ。
華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、
食ふや食はずやで慌しく過ぎ去つた學生時代が自ずと思ひ返され、
「戰爭さえ無ければ、小生もこのやうな青春が送れたやも知れぬ」と獨りごちる事も屡々。
すつかり?となつた今では、孫の部屋から白銀色の電腦計算機をせしめては書齋に篭もり
存分に「祭り」を堪能する毎日を送つている。
「小四女兒遺棄事件」なるスレツドを拜讀した際には、その餘りに不憫な境遇と過酷な
運命に落?し、臺所で葱を刻む家内に「かような理不盡が許されて良いものか!」と
熱辯を振るって呆れられる始末。年甲斐も無い、とはこの事と後で赤面する事しきり。
下手の横好きとは云え「繼續は力なり」の言葉通り、最近ではブラクラの回避や
コピペの管理にも慣れ、「好きこそものの上手なれ」を座右の銘として弐ゲツトに勵んでいる。
同年代の友人達が癡呆や重い病に惱まされる中、老いて尚矍鑠としてオフ會に向かえるのも、
偏に弐チヤンネルの御蔭かと思えば、再三に渡る「半年ROMつてろ」の罵り文句も、
何やら「まだまだ死ぬには早いよ」と言われているやうで愉快極まれり。
一つ間違えれば自らが乗り込んでいた機體と同じ名前を持つコテハンに出會える日を
樂しみにしつつ、今日もデスプレヱに向かう。

それでは、弐ゲツト。

3 :デフォルトの名無しさん:2009/06/23(火) 11:51:53


4 :デフォルトの名無しさん:2009/06/23(火) 21:08:35
スキンメッシュのクラス化を試みているんだが、
メソッドとソフトウェアフラグだけはグローバルに置かないとエラー終了する
何故?
クラスのメンバに含めるのは無理?

5 :デフォルトの名無しさん:2009/06/23(火) 21:22:46
それはスキンメッシュ関係なくC++が分かってない

6 :デフォルトの名無しさん:2009/06/24(水) 02:08:52
staticで解決したお

7 :デフォルトの名無しさん:2009/06/24(水) 09:00:00
staticはやめましょう

8 :デフォルトの名無しさん:2009/06/24(水) 09:12:22
staticは別に悪くないだろ。
>>4のソースは悪いのは確定だが。

9 :デフォルトの名無しさん:2009/06/24(水) 10:03:48
サンプルにあるDrawSubsetを使うmesh描画でモデルを描画してみたのですが糞重いです
同じPCで市販のゲームというか無料MMOなんかを見ると
どれもこれももっと大量のモデルを表示してるように見えるのですが
それでも十分な速度が出ています
これらはどうやってるのでしょうか?

モデルを細かく分割して、視野に入るものだけを描画とかはしています
何か根本的に別の描画方法だったりするのでしょうか?

10 :デフォルトの名無しさん:2009/06/24(水) 10:37:33
それだけでは状況がよくわからん
どう重いのか、メッシュの数やポリゴン数、シェーダー使ってるかやFPSはどの程度なのかまで網羅されてないとな

結論から言うとDrawSubset以外の描画は無いけどな

11 :デフォルトの名無しさん:2009/06/24(水) 10:59:19
PIX仕え

12 :デフォルトの名無しさん:2009/06/24(水) 11:13:22
ID3DXFont::DrawTextA で日本語が文字化けするのはどんな理由が考えられますか?
渡している文字列 (char*) をデバッガで確認するとちゃんとなってます。
プロジェクトのプロパティで、「文字セット」は「設定なし」になっています。


13 :デフォルトの名無しさん:2009/06/24(水) 11:15:48
ためしに MultiByteToWideChar で CP_THREAD_ACP で wchar_t* に変換したものを DrawTextW にわたしても、
やっぱり文字化けしているのです。DrawText にそのままわたしても、char* と wchar_t* どちらも文字化けします。


14 :デフォルトの名無しさん:2009/06/24(水) 11:16:18
炎を表現するためにパーティクルを行っているのですが、質問です。

・1つの炎を表現するのに、DrawPrimitiveUPを1回使っています。10個程度の炎を画面に出しています。
・ポイントスプライトを使っています

これで、100個程度のポイントスプライト×10炎 を表示していうのですが、動作の重さで疑問点があるのです。
描画にかかる時間(DrawPrimitiveUPを呼び出す前から、Presentが終わるまでの時間)を測っていると

・画面に大きく映るように、カメラの視野角を変えた場合
・画面にすごく小さく映るように、カメラの視野角を変えた場合
で、後者のほうが遅いのです。

前者だと10ms、後者だと17msくらいになります。
比較する際、カメラの視野角以外は一切変えていません。

何かしら「ポリゴンは小さく表示しすぎると遅くなる」などの制限があるのでしょうか?

15 :デフォルトの名無しさん:2009/06/24(水) 11:31:36
最近のSDKのサンプルを読んでいたら
s_hModD3D9 = LoadLibrary( L"d3d9.dll" );
のように、Direct3DのDLLなどを動的に読み込んでいました。

昔の本などによると、あまりよろしくない手法で、だからこそ
「対応したDirectXがインストールされていないマシンだと、DLL不足を指摘するダイアログがでて終了するので、ユーザーにわかりやすい警告ダイアログを出せない」
とかされていたような・・・

16 :デフォルトの名無しさん:2009/06/24(水) 11:54:00
だからこそからの繋がりがよく分からん
自前の警告を出すためにプログラムからロードしろって事?

17 :デフォルトの名無しさん:2009/06/24(水) 11:56:00
視野角狭くした状態でも全部の頂点・面が画面内に入ってんの?

18 :デフォルトの名無しさん:2009/06/24(水) 13:21:10
>>17
はい、画面内に視野角が広くても、狭くても、全ておさまっています。
頂点シェーダの負荷は変わらないでしょうし、
ピクセルシェーダの呼び出し回数はむしろ大きく映っている方が多いはず・・・

と悩んでいるところです。

19 :デフォルトの名無しさん:2009/06/24(水) 13:24:56
日経盛り返してきました、ありがとうございます
あと50円上がったら利食いしますのでそれまで上げてください

20 :デフォルトの名無しさん:2009/06/24(水) 20:04:50
>>14
ポイントスプライトが大きいが為に
殆どのピクセルのZテストが通らなくなって
結果、更新されるピクセル数が少なくなってるとか。

21 :デフォルトの名無しさん:2009/06/24(水) 20:35:05
DirectX9で2Dゲームを作ろうとしていまして、画像ファイルが独自フォーマットで
メモリ上に展開してそこからsurfaceに変換して、たくさんのアイテムやキャラクタが
存在するわけですけど、それらはまとめてバックバッファのsurfaceにupdateSurface()
を使って描画しようと企んでいるのですが、一つ問題がありまして
というのは、この様にsurfaceにばかりたよって描画してしまうと、アルファブレンディング
が出来ないということです
surfaceをアルファブレンディングしてバックバッファに書き込むということさえ出来たら
いいのですが、textureやらsprite辺りが全く理解できていないので分かりません
全部textureとして持ってspriteに描画すれば解決しそうだというのは分かるのですが、
surfaceとして持てるものをわざわざ全てtextureとして持つのは少し躊躇いがあります
何かいい方法はあるでしょうか

22 :デフォルトの名無しさん:2009/06/24(水) 20:38:38
ポイントスプライトって回転ないから
小さく薄いパーティクルを無駄に数を出しがちじゃね?

炎・煙・水しぶきとか形のあるものはランダムに角度付けたいじゃん。


23 :デフォルトの名無しさん:2009/06/24(水) 20:40:41
>>21
バックバッファ更新用の
キャラクタが描かれたサーフェイスは
どうやって作っている?
そこにキャラを描く際、アルファを
反映させればいいんじゃないの?

24 :デフォルトの名無しさん:2009/06/24(水) 20:43:41
>21
画像データをサーフェイスに溜め込んで、描画はStreachRectやりきりたいということですね?
そんな手法でいろいろやろうとしてるのは世界であなただけです。だれもノウハウ持ってませんよ。


25 :デフォルトの名無しさん:2009/06/24(水) 20:49:09
>>23
実はまだ作っていはいないんですが、色々と調べたところ
1. 空のsurfaceを作って、lockrectして色情報を書き込んでいく
2. D3DXLoadSurfaceFromMemoryを使う
この二つが候補に挙がっていまして、2.を使おうと思っています
MSDNを良く見ると、ここでアルファを設定できるみたいですね
これでUpdateSurfaceの時にうまく動くのですね?
今の段階では必要になるかは分からないですが、アルファ値が動的に変わるような
surfaceの場合、既にあるsurfaceのアルファ値を変えられるのか、それとも
また新たにsurfaceを作らないといけないのかどちらでしょう?

26 :デフォルトの名無しさん:2009/06/24(水) 20:52:06
>>24
その通りです
普通はspriteにtextureを描くのでしょうけど、どうもそれらの正体がはっきりとしなくて使い渋っているのです
加えて、メモリにある色情報からtextureを作成する方法も分からなかったのも原因の一つです

27 :デフォルトの名無しさん:2009/06/24(水) 21:09:19
>>メモリにある色情報からtextureを作成する方法も分からなかった

サイズ分のテクスチャを生成して
ロックして色情報を書き込むだけでいいだろ

28 :デフォルトの名無しさん:2009/06/24(水) 21:10:28
SetStreamSourse
DrawPrimitive
をセットで何回も呼び出すよりも
CPUでそれを1つのトライアングルリストにまとめて
DrawPrimitiveUP一回で描画する方が速いのですが
これはストリームソースの使い方が間違ってるでしょうか?

29 :デフォルトの名無しさん:2009/06/24(水) 21:58:05
>>28
DrawPrimitiveのオーバーヘッドの影響かな?
頂点数を相対的に増やしていけば、
その差は縮まるんじゃないかなぁ。

30 :デフォルトの名無しさん:2009/06/24(水) 21:58:51
DrawPrimitiveの読み出しがそもそも遅い

31 :デフォルトの名無しさん:2009/06/24(水) 22:24:39
HLSLでVSからPSにグローバル変数で値を持ち越す事って出来ないですよね?
なんか挙動を見る限り入ってなさそうで・・・

32 :デフォルトの名無しさん:2009/06/24(水) 22:56:41
>>29-30
頂点数と転送回数のバランス次第ではありえるということですね
ありがとうございます


33 :デフォルトの名無しさん:2009/06/24(水) 23:07:15
>>31
そもそもシェーダからグローバルメモリへの
書き込みは出来ません。(DX10はしらね)

34 :デフォルトの名無しさん:2009/06/24(水) 23:41:51
>>33
varyingみたいに使えればなーと思ったんですが
やはりVSから構造体に詰めて渡すしかないんですね
ありがとうございます

35 :デフォルトの名無しさん:2009/06/24(水) 23:52:10
>>34
そもそもそれぞれが並列処理で動いてるのにグローバル変数をどうやって管理するつもりだったんだ?
シェーダーは逐次処理でまわってるわけじゃないぞ。


36 :デフォルトの名無しさん:2009/06/25(木) 01:49:39
シェーダーを延々と長々書き足していったら途中で動かなくなってしまい
どうやら一定量超えると動かないみたいなのですが、これは容量オーバーなのでしょうか?

37 :デフォルトの名無しさん:2009/06/25(木) 01:57:19
シェーダープロファイルでインストラクション数に制限がある

38 :デフォルトの名無しさん:2009/06/25(木) 02:05:59
ありがとうございます

39 :デフォルトの名無しさん:2009/06/25(木) 09:39:40
>>20
情報不足で申し訳ない。
加算合成なので、Zテストはしていないんです。
ただ、どちらにしろそれが「小さい方が遅い」結果にはつながらない気がしますね。

>>22
むしろ角度をつけないのが良い。とか思っていましたが、そういうものでしょうか。
確かに飛び散る火の粉がいつも同じ形なのは問題かもしれませんね

40 :デフォルトの名無しさん:2009/06/25(木) 09:43:47
後考えられるとすれば、縮小時は元の解像度より下がってフィルタがかかってる
拡大時は元の解像度より上がってフィルタがかかってない
そういうフィルタ設定でテクスチャを張ってる前提だけど。

テクスチャ外してみたらどうなるよ

41 :デフォルトの名無しさん:2009/06/25(木) 13:11:04
ウィンドウを一色で塗りつぶすことって出来ますか?


42 :デフォルトの名無しさん:2009/06/25(木) 13:18:28
>>40
ミップマップの生成はD3DX_DEFAULTで、拡大も縮小もLINARです。
テクスチャ外しても再現しました。


視野角ではなくカメラからの距離(遠くなり、小さく描画されている時の方が遅い)でも、再現しました。
それと、パーティクルの生成数を10倍にしたところ、「大きく映っているほうが遅い」という常識的な結果になりました。
つまりまとめますと
「描画量が少ないと、小さく映っているほうが遅い時がある」
って感じですね。

これだとロジックのどこかにバグがあるかと思われるかもしれませんが、本当にカメラ位置しか変えずにコンパイルしています。

描画量が少ないと。といっても、毎フレーム100個ほどのポイントスプライトを描画しているんですけどね。
500個にしたら逆転しました。(小さく映っているほうが速くなりました)

43 :デフォルトの名無しさん:2009/06/25(木) 14:35:03
インスタンス処理について質問があります
サンプルのInstancingなのですが、技法3、定数のインスタンス化の処理はあまり意味ないように思えるのですが
これって効果あるのでしょうか?

for( int nRemainingBoxes = 0; nRemainingBoxes < g_NumBoxes; nRemainingBoxes++ )
{
// set the box Instancing array
V( g_pEffect->SetVector( g_HandleBoxInstance_Position, &g_vBoxInstance_Position[nRemainingBoxes] ) );
V( g_pEffect->SetVector( g_HandleBoxInstance_Color, (D3DXVECTOR4*)&g_vBoxInstance_Color[nRemainingBoxes] ) );

// The effect interface queues up the changes and performs them
// with the CommitChanges call. You do not need to call CommitChanges if
// you are not setting any parameters between the BeginPass and EndPass.
V( g_pEffect->CommitChanges() );

V( pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, 4 * 6, 0, 6 * 2 ) );
}

44 :デフォルトの名無しさん:2009/06/25(木) 15:19:18
>>43
サンプルをみたが、1(HWInstancing)以外は
あまり意味はないな。
1の比較対象として、用意しているに過ぎない。
特に3は、普通に描画してるだけだな。


45 :デフォルトの名無しさん:2009/06/25(木) 15:39:45
ありがとうございます。
2だとDrawPriitiveを減らせる効果はあるぐらいですかね

同じモデルを複数回描画するのを効率化したいのですが、
ハードウェアインスタンスを使えたら使う、使えなければ普通に描画するしかないということでしょうか?

46 :デフォルトの名無しさん:2009/06/25(木) 15:54:08
2だか忘れたけど、同じモデルデータを大量に複製して
頂点にID持たせてつなげてビデオメモリに転送しとく奴だっけ?

板ポリゴン大量に扱いたいけどハードウェアインスタンス使えないって時に結構使えて気もするが

47 :デフォルトの名無しさん:2009/06/25(木) 16:01:07
>>46
2はそうだね。
無駄重複が大量にあるのは、
キモイな。

1は、メッシュx1、DrawPrimitive x1
2は、メッシュxN、DrawPrimitive x1
3は、メッシュx1、DrawPrimitive xN
4は、メッシュx1、DrawPrimitive xN
かな。

48 :デフォルトの名無しさん:2009/06/25(木) 16:10:09
>>45
そうだね。HWのそれ以外
DPを減らす方法は無いと思う。(D3D9)

ただ、サンプルの2はボックスの頂点データを
そのまま大量に複製しているように見えるが、
座標データを定数や頂点テクスチャに移せるなら、
頂点バッファは純粋にインデックスのみって構成も
可能だよね。
これがいけるんならサンプル2も、対象に入りそうだな。

49 :デフォルトの名無しさん:2009/06/25(木) 17:06:01
初歩的な質問で申し訳ありません。
C言語が必要になり、根っからの文系人間が「Cの絵本」という本でもってプログラミングに挑戦しています。

if文のところで、

#include <stdio.h>

main()
{
int s = 65;

printf("あなたの点数は%d点です。\n", s);

if(s < 70)
{
printf("平均点まであと%d点。\n", 70-s);
printf("がんばりましょう!\n");
}
else
{
printf("よくできました!\n");
}
}


という文を作りました。
ここから月数に応じてコメントを表示するプログラム(1月ならばwinter、3月ならspringといった具合に)を作りたいのですが、どのように変化を加えればよいのでしょうか?
月は1月〜12月までなので、13月以上と1月未満の数値を打ち込んだ場合はerrorと表示させたいです。
よろしくお願いします。


50 :デフォルトの名無しさん:2009/06/25(木) 17:09:52
凄くすれ違いです・・

51 :デフォルトの名無しさん:2009/06/25(木) 18:05:34
SetRenderTargetで描くのと
UpdateSurfaceでコピーするのは
どっちが速いですか?

52 :デフォルトの名無しさん:2009/06/25(木) 19:11:09
頂点バッファ作成で躓いてますorz

struct VERTEX
{
float x,y,z;
DWORD color;
enum{ FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE };
};

IDirect3DVertexBuffer9* pvb = NULL;
Graphics->GetDevice()->CreateVertexBuffer( sizeof(VERTEX)*3, D3DUSAGE_DYNAMIC, VERTEX::FVF, D3DPOOL_MANAGED, &pvb, NULL );

ってやってるんですがCreateVertexBufferを呼んでもpvbがNULLのままで・・・

エラーではD3DERR_INVALIDCALLが返ってきてます.

MSDNみると

メソッドの呼び出しが無効である。
たとえば、メソッドのパラメータに無効な値が設定されている場合などである。

とあるのですがおかしいところも見当たらない気がします.

どこか他で不具合出てるのでしょうか・・・.

思い当たる節がないので困ってます

53 :デフォルトの名無しさん:2009/06/25(木) 19:21:20
インデックスバッファや頂点バッファは
D3DPOOL_MANAGEDをD3DUSAGE_DYNAMICでは作れなったかったきが気がする
D3DPOOL_DEFAULTが推奨

54 :デフォルトの名無しさん:2009/06/25(木) 19:27:29
動的なバッファにする必要がないなら
D3DPOOL_MANAGEDのままで使用方法に0を指定するのも有

55 :デフォルトの名無しさん:2009/06/25(木) 21:22:56
髪の毛みたいなソフトボディ?のアニメーションもキーフレームアニメーションでできるのですか?

56 :デフォルトの名無しさん:2009/06/25(木) 21:52:41
スキニングを探してるのか?

57 :52:2009/06/25(木) 21:54:53
ご協力ありがとうございました.
CreateVertexBuffer解決しました.
Usageを0にしたのと
D3DPRESENT_PARAMETERS構造体の
AutoDepthStencilFormatをD3DFMT_D24FS8にしていたのを
D3DFMT_D24S8に変更でいけました.





58 :デフォルトの名無しさん:2009/06/25(木) 22:29:41
DirectInputについて質問です。
秒間60回入力を拾っても、描画の垂直同期待ちとかで
一瞬予定通りに拾えない時間帯があると思います。
(ペイントソフトを作ってマウスで線を描くと、線が切れる部分が出る)

自分はマルチスレッドで入力を回収し、バッファにためておくことで解決しようと
考案中なのですが、みなさんが他に良い方法を使用していたら、教えてください

59 :デフォルトの名無しさん:2009/06/25(木) 22:32:43
DirectInputでマウスさんさとゃでめよん

60 :デフォルトの名無しさん:2009/06/26(金) 00:06:10
>>58
変なことやらないほうがよくね?
仮に1フレームで押してる・押してないと2つの状態がとれたときにそれはどっちが優先なの?
たまに押した状態がくっついてるような変なアプリみるけど
それって小細工のたまものだと思うw

61 :デフォルトの名無しさん:2009/06/26(金) 00:11:20
IDirectInputDevice8::GetDeviceDataで
入力履歴の配列が得られる。
これで何時押されて、何時離されたか
判断出来る。

62 :デフォルトの名無しさん:2009/06/26(金) 01:22:24
それってパッドの入力履歴とれる?


63 :デフォルトの名無しさん:2009/06/26(金) 08:58:01
>>58
入力はスレッドでやり、スレッド優先度を高くしておく。
ただしそのままだとそいつが処理を食ってしまうので、きちんとWaitEventやらで沈黙することが大事。

64 :デフォルトの名無しさん:2009/06/26(金) 19:04:47
普通のメッシュファイルは表示できるんだけど、
テクスチャとかマテリアルでアルファ値が設定されていないものを
任意のアルファ値で半透明に表示する方法はないですか?

65 :デフォルトの名無しさん:2009/06/26(金) 19:07:38
そういうシェーダを書く。
マジで。
固定シェーダ(笑)でもできるけど、面倒この上ないよ

66 :デフォルトの名無しさん:2009/06/26(金) 19:10:32
なんか質問するごとにシェーダでやれと言われまくるんだよなー
そろそろ勉強したほうがいいのかな
どこから勉強すりゃいいのかよくわからんのだが

67 :デフォルトの名無しさん:2009/06/26(金) 19:10:40
D3DTA_TFACTORを使えば簡単だけど
シェーダーでやった方がいいな

68 :デフォルトの名無しさん:2009/06/26(金) 19:12:48
SetTextureStageState( D3DTSS_CONSTANT, 任意色 );
SetTextureStageState( D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
SetTextureStageState( D3DTSS_ALPHAARG1, D3DTA_CONSTANT );

別に面倒ってほどでもないなあ

69 :デフォルトの名無しさん:2009/06/26(金) 19:14:39
>>66
エフェクトからやれ。
エフェクトファイルは必須だから。

70 :デフォルトの名無しさん:2009/06/26(金) 19:19:25
スプライトをSetRenderTargetの咲に描くにはどうしますか?

71 :デフォルトの名無しさん:2009/06/26(金) 20:24:01
>>66
はぁ?
ていうか今日はじめて今日できる
ウンコする時間も考慮すると後3〜4時間?
余裕過ぎる

そんな程度

72 :デフォルトの名無しさん:2009/06/26(金) 21:27:55
>>66
気持はわかるが、マジでシェーダオンリーにしたほうがいい。
本気で。
俺も固定シェーダにこだわってゲームつくってたけど、プログラマブルシェーダに移行したら天国だった。

73 :デフォルトの名無しさん:2009/06/26(金) 21:39:47
HLSLがC言語だとすると、固定シェーダーは得体の知れないアセンブラ

74 :デフォルトの名無しさん:2009/06/26(金) 22:17:20
シェーダーの勉強のとっかかりになるところでいいところない?
いきなり高度なことやってるページばかりしかなくてこまる

75 :デフォルトの名無しさん:2009/06/26(金) 22:19:11
×固定シェーダ
○固定機能

間違った用語を平気で使い続ける馬鹿って何なの?

76 :デフォルトの名無しさん:2009/06/26(金) 23:03:47
たぶん、プログラマブルなシェーダに対しての、プログラマブルじゃない固定という意図では?

77 :デフォルトの名無しさん:2009/06/26(金) 23:24:27
まぁ将来シェーダーいじるようなゲームプログラマーになりたいとかじゃなけりゃ
好きなもんを好きなように使っておけとしか言えないが。

78 :デフォルトの名無しさん:2009/06/26(金) 23:31:04
アホが68件程度しか発見できないのがせめてもの救い
http://www.google.co.jp/search?q=%22%8C%C5%92%E8%83V%83F%81[%83_%22

79 :デフォルトの名無しさん:2009/06/26(金) 23:36:47
まあでも固定機能パイプラインを示す
適当な言葉がないのも事実。
固定シェーダでいいんじゃないの。

80 :デフォルトの名無しさん:2009/06/26(金) 23:39:21
固定機能パイプラインで良いんじゃ

81 :デフォルトの名無しさん:2009/06/27(土) 00:39:43
定食

82 :デフォルトの名無しさん:2009/06/27(土) 01:02:27
内部を考えると固定のシェーダーとも言えなくもないがw

83 :デフォルトの名無しさん:2009/06/27(土) 02:46:10
通じりゃいいだろ
こだわるところじゃない

84 :デフォルトの名無しさん:2009/06/27(土) 02:49:13
DirectX11では
「演算シェーダ」「ハルシェーダ」「ドメインシェーダ」の
三つのプログラマブルシェーダと
テッセレーションを行うための「固定機能シェーダ」が新設されるそうな

もう紛らわしいから固定機能パイプラインは無かった子にして良いよ

85 :デフォルトの名無しさん:2009/06/27(土) 07:12:24
もう固定機能パイプラインをちゃんと言うしかないな

86 :デフォルトの名無しさん:2009/06/27(土) 08:20:06
固定機能パイプラインが無くなる事で
良書が増えるといいねぇ

87 :デフォルトの名無しさん:2009/06/27(土) 12:36:05
directxライブラリと標準ライブラリを同時に使うことってできないんでしょうか?

88 :デフォルトの名無しさん:2009/06/27(土) 12:40:39
勝手に使えよ。

89 :デフォルトの名無しさん:2009/06/27(土) 12:44:25
多分同じ変数や関数が複数回使われてるみたいなエラー出たんだろ

90 :デフォルトの名無しさん:2009/06/27(土) 13:00:26
DirectXつかっててそんなの出るか・・・?

91 :デフォルトの名無しさん:2009/06/27(土) 19:52:46
maxとminがdefineされてるから、
std::maxとstd::minと衝突するってやつか?
NO_MINMAXでぐぐればいけた気がする。

92 :デフォルトの名無しさん:2009/06/28(日) 21:09:13
同じMS製品でそんなの出るとか不良品じゃねーか

93 :デフォルトの名無しさん:2009/06/28(日) 22:03:18
もともとmaxとかminとか定義してたライブラリありまくるぜ
vectorとか標準ライブラリ作った人なんでこんな名前にしたんだと思った
std::〜っていちいち書くぐらいしかないのかな?

94 :デフォルトの名無しさん:2009/06/28(日) 22:32:35
いちいち書いたほうがいい
STLだけ差し替えたりするし。

95 :デフォルトの名無しさん:2009/06/28(日) 23:46:05
SYSPROCはどこに書けばいいの?

96 :デフォルトの名無しさん:2009/06/29(月) 12:42:29
>>93
DirectXのmin maxはマクロだから、std::つけてもエラーが出る。

97 :デフォルトの名無しさん:2009/06/29(月) 16:29:55
rad0 が #define されてるのが地味にトラップ。

98 :デフォルトの名無しさん:2009/06/29(月) 23:07:23
DirectInput8のGetDeviceStateメソッドでジョイパッドの入力を生で受け取り
コード側でそれを、否定・論理積を使ってトリガ情報に加工して使おうとしています。

当該処理はDLLに放り込みました。
それを、Win32コンソールアプリケーションをドライバにしてforループでガンガン回しながら
テスト実行してみたところ、ベタ入力もトリガ入力も正しく取れるのですが、
本番環境のWin32アプリケーションに組み込んでみたところ、
トリガ入力がベタ同然の振る舞いをするようになってしまいました。

理屈の上では、メインループでどれだけの時間がかかろうと、かかるまいと、
GetDeviceStateが押された瞬間にキーが押しっぱなしでさえあれば
トリガとしてのふるまいをしてくれるはず・・・と期待しているのですが、どうにもなりません。

これって、いわゆる「直接入力における取りこぼし」ってやつなんでしょうか・・・

99 :デフォルトの名無しさん:2009/06/30(火) 01:46:34
外人「OH〜ユーアーサムラーイCOOL!」
農民「ノー…アイ アム ア ファーマー…」
外人「オウマイゴー アイムソーリー ユーアープアー」


100 :デフォルトの名無しさん:2009/06/30(火) 03:09:45
>>98
実を言うとそこまで深く突っ込んで調べたことが無い。
そのテスト版のプログラムもし公開できるものなら見てみたいよ

101 :デフォルトの名無しさん:2009/06/30(火) 19:24:25
DLLにした時点でどこのキーとってるのか俺にはわからないけど
メインの処理のキー入力を勝手にとってくるもんなの?そーゆーのって?

102 :デフォルトの名無しさん:2009/06/30(火) 19:30:02
法線とライトの内積を求めてその値で境界の範囲を決めるトゥーンシェードで
Sio29さんのCelsView見たく境界の色をあいまいにするのってどうやってやるんですか?


103 :デフォルトの名無しさん:2009/06/30(火) 19:34:53
>>102
本人に聞いてこいよ

104 :デフォルトの名無しさん:2009/06/30(火) 19:38:42
>>102
参照するトゥーンマップの段階の変わり目をグラデーションにするだけ

105 :デフォルトの名無しさん:2009/06/30(火) 19:41:18
>>103
つっこみありがとう
Sio29さん独特の技術なら聞いてこようと思います

やりたい事がわかりやすいように例を挙げただけだったんですが

106 :デフォルトの名無しさん:2009/06/30(火) 19:43:30
>>104
それじゃなんねーと思うぜ
法線は段階的に角度がついてるわけじゃねーし

107 :デフォルトの名無しさん:2009/06/30(火) 19:43:40
>>104
ありがとうございます
色の決定にトゥーンマップを使用していないのでつまづいています


108 :デフォルトの名無しさん:2009/06/30(火) 19:53:43
>>106
なんで?
頂点シェーダでマップの参照位置を計算してピクセルシェーダにわたして
実際の色参照をピクセルシェーダでやれば問題ないんだけど

109 :デフォルトの名無しさん:2009/06/30(火) 19:57:30
>>107
トゥーンマップを使わないでどうやってるの?
いちいち内積の値でifで条件分けして陰つけてるの?

110 :デフォルトの名無しさん:2009/06/30(火) 20:02:58
>>108
関係なくね?
例えば立方体の辺にグラデ入れたいとしてその方法で何かつくの?

111 :デフォルトの名無しさん:2009/06/30(火) 20:07:34
VS上の法線などのベクトルは、
PSには線形補間されて渡される。

112 :デフォルトの名無しさん:2009/06/30(火) 20:12:47
>>110はライティングの仕組みを全く理解してないと思われ
そんなこと言ったら普通のグローシェーディングもできないことになる

113 :デフォルトの名無しさん:2009/06/30(火) 20:12:51
>>111
だから頭の中でそれでグラデがつくか考えてみろっての

114 :デフォルトの名無しさん:2009/06/30(火) 20:14:52
>>112
だからその仕組みとこの仕組みがリンクしてねぇって俺は主張してるわけだよ

115 :102:2009/06/30(火) 20:23:13
>>109
そうです、ifで条件つけてやってます
マテリアルごとにトーンマップを用意するのが面倒なので

116 :デフォルトの名無しさん:2009/06/30(火) 20:30:46
>>114
VSの計算結果で頂点Aが黒で頂点Bか白としましょう
PSで頂点AとBの中間地点のピクセルを描画するときは
線形補間された灰色という値が入ってきますよね?
だから通常のライティングが成立してるのはわかりますよね?

VSで頂点Aのマップの参照位置を(u,v)=(0,0)
Bの参照位置を(u,v)=(1,0)としましょう
PSでAとBのちょうどまんなかのピクセル描画時には
線形補完された(u,v)=(0.5,0)という値が入ってきます
この値をつかってマップの色をサンプリングすればOKなのですよ

117 :デフォルトの名無しさん:2009/06/30(火) 22:35:53
>>116
そこまで来てねぇよw
法線の値でグラデかけたマップから値とりにいくところで
うまくいかねぇと思うぜ

118 :デフォルトの名無しさん:2009/06/30(火) 23:37:11
customUI使うには何をincludeすればいいでしょうか。
ソース分割とかやったことなくてさっぱりわかりません。
bccDeveloper使ってやっています。

119 :デフォルトの名無しさん:2009/06/30(火) 23:52:15
>>117
http://www.arakin.dyndns.org/glsl_cartoon.php
ここが比較的わかりやすいから、見てみれば。
そこのテクスチャの色は2色、輪郭を含めて3色だが、
その3色の境界にグラデをかければ、最終的な
出力画像にもグラデが掛かるだろ。

120 :デフォルトの名無しさん:2009/06/30(火) 23:55:02
>>118
CustomUIの中のCoreとOptionalプロジェクトを
インポートして使う。
VCならそのままだが、bccDeveloperはシラね。

121 :デフォルトの名無しさん:2009/07/01(水) 00:00:58
>>119
かかんねぇよ
よく考えろよ

122 :デフォルトの名無しさん:2009/07/01(水) 00:12:20
げちょげちょすっげキタネェのができるぞ
トゥーンマップ(?)でうまくいくのって2〜3色ぐらいでグラデなしの
ときだけのような希ガス

綺麗にならないのはグラデがかかってほしいところでちょうど
法線(内積?)が段階的にかわってくれるとは限らないってところがポイントだと思う
つまり、内積→マップの値の変換でうまくいかない

123 :デフォルトの名無しさん:2009/07/01(水) 00:50:19
境界って輪郭線じゃなくてシェーディングの部分でしょ?
だったら実際のところトーンマップの中間をグラデにしてるだけだと思うが>CelView
きたねぇところはきたねぇし


124 :デフォルトの名無しさん:2009/07/01(水) 01:54:32
>>123
境界の認識はあってるよ
実はCelView見てないけど
だったら高解像度になるにつれ余計なことしないほうがいいな

ようはシェーディングの境界をぼかしたいわけじゃなくて
シェーディングの境界がジャギってんのが気に入らないんだろ?

125 :デフォルトの名無しさん:2009/07/01(水) 11:42:26
プログラマブルシェーダについて質問です。
bool型定数を使った静的分岐をやろうとしました。
ttp://msdn.microsoft.com/ja-jp/library/bb944006(VS.85).aspx
>静的分岐では、ブール型のシェーダー定数に基づいてシェーダー コード ブロックのオン/オフを切り替えることができます。
>これは、現在レンダリングされているオブジェクトの種類に基づいて
>コード パスを有効または無効にできる便利な方法です。
>描画呼び出しの間では、どの機能を現在のシェーダーでサポートするかを決定し、
>その動作に必要なブール フラグを設定できます。
>ブール定数で無効にされたステートメントは、シェーダー実行中にスキップされます。

下記のようにやってみたのですが、
fcx.exeでコンパイルしたものを覗いたところ、cmp命令が使われてしまっていました。
それでは分岐による負荷がかかってしまいますよね。

分岐負荷がかからないコードブロック単位での静的分岐とは、どうやるのでしょうか?

bool UseTexture;

float4 PS(VS_OUTPUT In) : COLOR
{
if (UseTexture)
{
In.Color *= tex2D(DecaleSamp, In.TexDecale);
}
return In.Color;
}

126 :デフォルトの名無しさん:2009/07/01(水) 14:57:45
#ifdef
#else
#endif

127 :デフォルトの名無しさん:2009/07/01(水) 18:58:43
>>125
静的に決定させる為には、
静的に決定出来なきゃ駄目だよね。

>>125のコードだと、「bool UseTexture」は
いつ何時変わる可能性があるので、コンパイラは
決め撃ちすることは出来ない。

方法としては、>>126のプリプロセッサ以外に、

@「static const UseTexture = true;」にする。

Aシェーダの引数で受け取り、passで分岐する。

float4 PS(VS_OUTPUT In,
uniform bool UseTexture ) : COLOR
{
if (UseTexture)
{
In.Color *= tex2D(DecaleSamp, In.TexDecale);
}
return In.Color;
}

technique T
{
pass P0{ pixelShader = compile PIXELSHADER_TARGET PS( false );}
pass P1{ pixelShader = compile PIXELSHADER_TARGET PS( true );}
}

いづれも、最適化とプリシェーダはONにしておくこと。

128 :デフォルトの名無しさん:2009/07/01(水) 20:01:27
>>126-127
アドバイスありがとうございます。
静的分岐とは言え、さすがにON/OFFのチェンジはしたいので
>>126や、>>127の@というわけにはいきません。

ひとまず、>>127のAではうまくいきました。

そこで再質問なのですが、グローバル定数は、uniformとして扱われるMSの説明に書いてある上、
1回の描画命令の間では不変ですよね?
グローバル定数ではダメなのでしょうか?(ダメだったから>>125はダメだったわけですが…)

正直引数のuniformでやる方法ですと、
pass P0{ pixelShader = compile PIXELSHADER_TARGET PS( false );}
pass P1{ pixelShader = compile PIXELSHADER_TARGET PS( true );}
このようにtrueの場合とfalseの場合をいちいち定義しなければならず、
組み合わせが多い場合(ライトON/OFF、影ON/OFFなどなど)に組み合わせ爆発が厄介そうです。

uniform int の場合はintの取りうる範囲が多すぎるため、
PS(0) PS(1) のように定義しなければならないのはわかるのですが、
MSの説明を見る限り「bool型のシェーダ定数は特別扱いだよ」みたいに読めるのですが、
bool型を使うことによる利点のようなものは何かないのでしょうか?
MSの説明を見て

129 :デフォルトの名無しさん:2009/07/01(水) 20:38:08
>>128
>1回の描画命令の間では不変ですよね?
シェーダの生存期間は、コンパイルによって
exe(的なもの)として生成されてから、破棄されるまでの間です。
描画命令間ではありません。
定数が静的であるとは、生成から破棄の間静的であることです。
描画命令の間不変としたいなら、描画毎のコンパイルが必要。

>組み合わせが多い場合(ライトON/OFF、影ON/OFFなどなど)に組み合わせ爆発が厄介そうです。
そうです。これはD3D9世代の欠点でもあります。
これを補う為に、フラグメントシェーダやデファードレンダリングなどがあったりします。
DX11では動的リンクが加わるそうなんで、ちょっとはマシになるかも。

130 :デフォルトの名無しさん:2009/07/01(水) 22:30:38
DX11でシェーダの連結ができるって大騒ぎしてるけどさ
なんかDX9のフラグメントリンカーの存在忘れたような大騒ぎがよな

無かったことにされてるのか??
情報もえらく少ないし。

131 :デフォルトの名無しさん:2009/07/01(水) 22:35:50
シェーダ爆発なんて騒ぐのはキレイなエンジン作りたいやつだけで
普通は運用でどうにでもなるだろ。

132 :デフォルトの名無しさん:2009/07/01(水) 23:20:36
>>130
http://wlog.flatlib.jp/item/1219
http://wlog.flatlib.jp/item/1230

このブログがわかりやすいが、DynamicShaderLinkageは
動的リンクというよりは、サブルーチンコールに近いものらしい。
イメージとしては、動的にShaderの部品を組み上げて
1つのShaderを作るのがフラグメントリンカならば、
とりあえず全てがつまったmain()プログラム的なShaderを1つ作って、
動的に個々の分岐を決定出来るのがDynamicShaderLinkageということになる。
これが良くなったかどうかわからんが、より普通になった感じだな。

133 :デフォルトの名無しさん:2009/07/01(水) 23:24:51
>>130
フラグメントリンカを使ってる人は
今現在、世界で4人、
商用・非商用プログラムで使われてる例はゼロらしいよ。

134 :デフォルトの名無しさん:2009/07/02(木) 01:10:26
現状のPC構成だと殆どのケースでネックになるのがCPUだから
GPUで多少分岐したところで全体の速度に大差はないからな。
多少のシェーダー負荷は承知の上でまとめちまうほうが管理が楽。

135 :デフォルトの名無しさん:2009/07/02(木) 01:39:03
DirectSound で再生しながら、
横軸に周波数、縦軸に音量を表すようなグラフを
リアルタイムで描きたいです。
とりあえずWAVを再生するところはできてるんですけど、
そのようなグラフを描くにはどうすればいいですか?


136 :デフォルトの名無しさん:2009/07/02(木) 01:48:55
すれ違いじゃねっかな。
再生できてるならそのデータをそのまま解析すればいい。
どういう風なデータ構造になってるか分からないって質問は論外。

137 :デフォルトの名無しさん:2009/07/02(木) 01:49:57
spectrum analyzer source code
でググったら。



138 :デフォルトの名無しさん:2009/07/02(木) 14:05:54
フルスクリーン描画をしているときに画面中にダイアログを表示するのってどうやるの?

フルスクリーン描画しているウィンドウがフォーカスを失うと
device->Present()が失敗してしまう問題と、

フルスクリーン描画をかけるとほかのウィンドウが表示されてても
描画内容が上書きされてしまう問題とがあるわけだけど。

139 :デフォルトの名無しさん:2009/07/02(木) 18:24:20
深度バッファシャドウについて質問です。

完全な影になる部分は、RGBA(0.5f, 0.5f ,0.5f, 1.0f)であるとします。

普通の理屈通り使うと、ライトから見て裏面になる部分は、深度バッファシャドウ的に影であると判定されますよね。
でも、ライトから見て裏面になる部分は、すでに頂点シェーダ上でCOLOR0の値が半減しているはずです。

ピクセルシェーダでの判定にひっかかったからといって、さらに半減してしまうと、影が濃すぎることになりますよね。

これは、頂点シェーダでは影による表面色の補正をかけず「影の濃さ」を計算してピクセルシェーダに渡し、
深度バッファシャドウとライティングのシャドウを先に計算し、最後に表面色に反映。としなければならないのでしょうか?

140 :デフォルトの名無しさん:2009/07/02(木) 19:52:52
影と陰ね
これは同じ物理現象だよね
たしか

141 :デフォルトの名無しさん:2009/07/02(木) 19:57:29
シャドウマップのサンプルがあるんだからそれ見ればいいだろ
三項演算子使ってるから

142 :デフォルトの名無しさん:2009/07/02(木) 20:01:13
Direct3Dの色ってどうして少数使うの?
遅いでしょ。

143 :デフォルトの名無しさん:2009/07/02(木) 20:06:18
シャドウマップを影を追加する為のギミックとして
使うのではなく、
光が当たっているかどうかの判断に使うといい。

144 :デフォルトの名無しさん:2009/07/02(木) 20:08:04
>>142
正規化してるだけ

145 :デフォルトの名無しさん:2009/07/02(木) 20:24:56
>>143
あ、なるほど。
すんなり理解できました。わかりやすい教示ありがとうございます。

146 :デフォルトの名無しさん:2009/07/03(金) 08:54:10
>>142
GPUでは小数のほうが早い

147 :デフォルトの名無しさん:2009/07/03(金) 15:42:01
SAFE_RELEASEマクロの代わりに以下のようなインライン関数を書いたのですが、IUnknownのポインタがうまく変換されないのでコンパイルができません
inline void SafeRelease(IUnknown *& pUnk)
{
if (pUnk)
{
pUnk->Reelase();
pUnk = NULL;
}
}

以下ポインタの型変換をテストしてみたものですが、どうしてエラーになるコードが駄目なのかがわかりません
このように変換ができない理由を教えて下さい
IDirect3D9 * pD3D9 = Direct3DCreate9(D3D_SDK_VERSION);
//IUnknown *& rp = pD3D9; // エラー
//IUnknown *& rp = (IUnknown*)pD3D9; // キャストしてもエラー
IUnknown * p = pD3D9;
IUnknown *& rp = p; // 一時変数にコピーしてからだとOK

[ VC++2008 EE / DirectX SDK March 2009 ]

148 :デフォルトの名無しさん:2009/07/03(金) 16:08:38
IUnknown *& rp = pD3D9; // エラー

149 :デフォルトの名無しさん:2009/07/03(金) 16:17:09
関数のコンパイルが成功しない理由は148だと思うのですが、どうしてこの変換が認められないのか教えて下さい

150 :デフォルトの名無しさん:2009/07/03(金) 16:22:25
ポインタは変換可能だが、参照は変換できないというだけ。

151 :デフォルトの名無しさん:2009/07/03(金) 16:27:14
ありがとうございました。

152 :デフォルトの名無しさん:2009/07/03(金) 20:49:27
あえて関数化する必要がないしなー

153 :デフォルトの名無しさん:2009/07/03(金) 22:56:19
スマポ使えってこった

154 :デフォルトの名無しさん:2009/07/04(土) 18:42:31
むむ
RegexOptions^ Option = gcnew RegexOptions();
Option |= RegexOptions::CultureInvariant;
これでコンパイルエラーerror C2676が出てしまいました・・。




155 :デフォルトの名無しさん:2009/07/04(土) 19:23:53
>>154
型が違うんだから当然じゃないか。

156 :デフォルトの名無しさん:2009/07/04(土) 20:12:07
すまぽってComPtr的な動作したっけ?

157 :デフォルトの名無しさん:2009/07/04(土) 21:21:41
無理、よって完全に的外れ。

158 :デフォルトの名無しさん:2009/07/04(土) 21:28:58
           / ̄ ̄ ̄\
          /  ⌒  ⌒ ヽ 
         /  ( ●)(●) |  
         |    (__人__) }   …
        /、.    ` ⌒´  ヽ  
       /            |   
       |           | /    
       ヽ_|  ┌──┐ |丿     
         |  ├──┤ |      
         |  ├──┤ |


159 :デフォルトの名無しさん:2009/07/04(土) 21:31:47
レベル低いなぁ

160 :デフォルトの名無しさん:2009/07/04(土) 23:51:17
directX9で2Dゲームを作る為にPNG画像を表示しようと思ったのですが
D3DXCreateTextureFromFileInMemoryEx(g_pD3DDevice,ptr,SizeofResource(NULL, hRsrc),40,40,8,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,
D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL, &img[i]);
で40pxの画像を読み込むと64pxに拡大されて表示されてしまいます。
元の画像のサイズのままで読み込みたいのですがどうすればいいでしょうか。

161 :デフォルトの名無しさん:2009/07/04(土) 23:57:44
自分でそうなるようにしているからだろ。
他人の作ったAPIが使えない、ヘルプを読むつもりもないのなら、
全部自前で読み込めよ。

162 :160:2009/07/05(日) 00:25:32
>>161
http://msdn.microsoft.com/ja-jp/library/cc372744.aspx
このページと自分の持ってる本を参考にしても分かりませんでした。

参考になるサイトや本を紹介して頂くだけでも有りがたいのでどうかアドバイスをお願いします。

163 :デフォルトの名無しさん:2009/07/05(日) 00:31:33
>>160
VGAによってはそうなる。
自分のPCだけで無くどこでも動くようにするなら、テクスチャは2のべき乗サイズになると想定したほうがいい。

164 :デフォルトの名無しさん:2009/07/05(日) 00:41:59
>>163
VGAのせいじゃねえよ。
どんだけ馬鹿なんだよ?

>>162
引き延ばす設定が入っているから。
いったいヘルプのどこを読んだんだよ?

165 :デフォルトの名無しさん:2009/07/05(日) 00:51:21
VGAによってはサイズ制限があるから
D3DXがフラグの設定どおりに拡張してテクスチャを作る。

⇒VGAのせいってコトだったんじゃね?

166 :デフォルトの名無しさん:2009/07/05(日) 00:53:34
客:アプリが起動しません。 サポ:デフラグかけてみて。 客:直りました。

動くプログラムを早く作るのは、いちいち理屈を勉強するプログラマではなく、魔法を信じるプログラマの方である。


167 :デフォルトの名無しさん:2009/07/05(日) 01:03:38
俺の経験だけかもしれんが
デフラグをかけた(かける必要が出た?)PCは例外なく復活は無くお亡くなりになるw

168 :デフォルトの名無しさん:2009/07/05(日) 01:10:16
NT4時代から毎日かけているがそんなことは無かったぜ。

169 :デフォルトの名無しさん:2009/07/05(日) 01:13:08
まめにやってると数秒だな

170 :デフォルトの名無しさん:2009/07/05(日) 01:23:50
>>160
ところでテクスチャのサイズと表示のサイズには何の関係性もないんだけど
なぜ拡大されていると判断したの?

作成したテクスチャのGetLevelDescでサイズを取得してみて
本当にサイズが64のテクスチャとして作られているか確認したの?
もしそうならそれはビデオカードの問題

テクスチャのサイズが40なのに64で表示されているっていうなら
それは表示のさせ方の問題
貼り付けてるポリゴンはどうなってるの?
射影行列の設定は?
viewポートとウインドウサイズが一致してないとかは?

171 :160:2009/07/05(日) 02:01:54
>>170
GetLevelDescでサイズを取得したら64×64でした。
Draw関数で40pxに縮小して表示してみたんですが若干ぼやけてしまいました。
テクスチャは2D画像を表示させるのに適していないってことでしょうか。
画像を表示させる別の方法を探してみます。
アドバイス有難うございました。

172 :デフォルトの名無しさん:2009/07/05(日) 02:08:31
>>171
2Dゲーム作るならOpenCVでいいんじゃない?

173 :デフォルトの名無しさん:2009/07/05(日) 02:28:18
>>171
元々テクスチャというのは不定形のメッシュに伸び縮みさせながら貼り付ける道具だから、
デフォルトでフィルターがかかるようになっている。
FilterとMipFilterをD3DX_FILTER_NONEにすれば補間は起こらないよ。

>>164
初心者に嘘ばかり教えない。
おまえ、ネットブック(GMA950)で動作チェックしたことないだろ?

174 :160:2009/07/05(日) 02:49:04
>>173
ありがとうございます。
黒い領域が残ったけどクリッピングで消せそうなので大丈夫そうです。

VCproだと64×64になってしまったのですが、ExpressEditionでプロジェクトを
作り直したら40×40のテクスチャを作れました。
原因はVCの設定ミスなんでしょうか・・・

175 :デフォルトの名無しさん:2009/07/05(日) 05:17:56
スキンメッシュをリソースファイルから呼び出すにはどうすれば良いですか?

176 :デフォルトの名無しさん:2009/07/05(日) 06:58:30
>>173
GMA950はNONPOW2CONDITIONALがYesだったと思うが。

NONPOW2CONDITIONALはドライバレベルで対応できる機能だから、
よほど古くてドライバが更新されてないのでなければ使える。

177 :デフォルトの名無しさん:2009/07/05(日) 09:14:36
デフラグを頻繁に行うと間違いなくHDDにダメージを与える事になる

PCの調子がおかしい時は基盤とかにホコリがたまってて電源不足になってる可能性あり

178 :デフォルトの名無しさん:2009/07/05(日) 09:28:29
>>174
なんでUVを適切に設定しないでクリッピングなんだ?
意味分からん

>原因はVCの設定ミスなんでしょうか・・・
人の話を聞かない奴だな

179 :デフォルトの名無しさん:2009/07/05(日) 12:49:38
断片化した状態で使うのは常にデフラグをかけているのと同義

180 :デフォルトの名無しさん:2009/07/05(日) 12:59:03
結局確率の話でしかないだろ。
対象のファイルが

・頻繁に読む・固定長で書き込み
HDD側で2桁程度の高速化

・永久に使用しない
無益

・追記する場合
また断片化する

181 :デフォルトの名無しさん:2009/07/05(日) 13:18:19
まぁSSDにしとけってこったな

182 :デフォルトの名無しさん:2009/07/05(日) 13:32:41
はいはい、スレ違いスレ違い

183 :デフォルトの名無しさん:2009/07/05(日) 14:02:30
コンパイルしようと思ったら

1>------ ビルド開始: プロジェクト: a, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。


1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
1>D:\Program Files\VC\project\a\Debug\a.exe : fatal error LNK1120: 外部参照 9 が未解決です。
1>ビルドログは "file://d:\Program Files\VC\project\a\Debug\BuildLog.htm" に保存されました。
1>a - エラー 40、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と出ます。何が原因でしょうか?
コード自体は
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html#R6
の6.プログラムを組む、というプログラムです

184 :デフォルトの名無しさん:2009/07/05(日) 14:08:36
>>183
はいはい、CRTの設定ミス。全プロジェクトで統一しようね。

185 :デフォルトの名無しさん:2009/07/05(日) 14:22:53
>>184
ありがとうございます
CRTよくわかりませんがぐぐって調べてみます

186 :デフォルトの名無しさん:2009/07/05(日) 14:30:59
>>184
できました。ありがとございました

187 :デフォルトの名無しさん:2009/07/05(日) 16:22:43
他アプリ(DirectXモノ)画面に上書き描画出来るようになったんだが、チラツキが多すぎて微妙です。
タイマーを使っているのが間違いだと思うのですが、解決方法ありますか?

Presentフックが王道とは思うのですが、vsync待ちの処理ができる方法があるならアドバイスいただけないでしょうか。

188 :デフォルトの名無しさん:2009/07/05(日) 17:24:43
質問です。
D3Dで地面に影メッシュを表示しようと思うのですが、地面とまったく同じ高さに描くと
Z-fightingが起こってしまいますよね。
これに対処するためわずかに地面から浮かせていたのですが、Z-fightingが起こらない程度に浮かせると
影の位置がずれているのが結構見えてしまいます。

そこで「描画位置はそのままに、Zバッファでの比較の際バイアスをかける」方法がないか探しているのですが、
どうにも見当たりません。
バイアスをかける方法があれば教えていただきたいのです
よろしくお願いします。

189 :デフォルトの名無しさん:2009/07/05(日) 17:42:25
188自己解決です

float bias = -0.1f;
pDev->SetRenderState(D3DRS_DEPTHBIAS, *((DWORD*)&bias));

で出来ました。
が、D3DRS_DEPTHBIASはマイナーな上、サポートしていないグラボも少なくないとか?
このあたりの情報おもちのかたいらっしゃいましたら、教えていただければと思います。

190 :デフォルトの名無しさん:2009/07/05(日) 17:49:41
>>188
単純に地面のあとから描けばいいような気がするんだが、それで問題があるんだろうか。

191 :デフォルトの名無しさん:2009/07/05(日) 17:49:43
シェーダーでやれば問題ない。

192 :デフォルトの名無しさん:2009/07/05(日) 18:08:42
質問です。
Xファイルとやらでオブジェクトを表示させようとしたのですが、メッシュ(?)だけ表示されて色の情報が描写されません。
同じようなことがあった人がいたら解決法を教えてください。お願いします

193 :デフォルトの名無しさん:2009/07/05(日) 18:22:42
あーいーうーえーおー


あしかの赤ちゃん雨の中
赤い雨傘甘えん坊

いちご畑の一年生
石ころ一個 コロコロ

宇宙の海で運動会

円盤遠足絵の具で絵日記

折り紙のオルガンで

あ い う え お の 音楽

あーいーうーえーおー

194 :デフォルトの名無しさん:2009/07/05(日) 18:38:47
再現する最低限のコード晒すといい。

195 :デフォルトの名無しさん:2009/07/05(日) 18:41:30
Xファイルはあくまでデータのコンテナであって、
中のデータをどう描画するかは自分次第。
よって自分でやっていないからとしか言いようがない。

196 :デフォルトの名無しさん:2009/07/05(日) 20:23:51
色々やってみたら、テクスチャのファイルネームに何も入っていないことがわかりました。何とかなりそうです、ありがとうござました

197 :デフォルトの名無しさん:2009/07/05(日) 20:34:55
GDIのコントロールを描画しようというのが根本的に王道ではない。
王道だったらMicrosoftがやってる。


198 :デフォルトの名無しさん:2009/07/05(日) 22:22:34
>>197
ありがとうございます
描画対象エリアのみ2D使ってるぽいところに2D上書き予定なのですが、
zが手前になるように追加描画が出来るか調べてみようかと思います


199 :デフォルトの名無しさん:2009/07/06(月) 15:39:10
質問です。

ピクセルシェーダの色出力を省略し、深度バッファへの書き込みだけを行う方法があったと思うのですが
どなたかわかる方いらっしゃいますでしょうか?

PixelShaderの返り値をvoidにしたらHLSLコンパイルエラーになりましたし、
PixelShader = NULL;
にしたら妙な色が書き込まれてしまいました。

200 :デフォルトの名無しさん:2009/07/06(月) 16:41:02
SetRenderState()で色の書き込みをマスクする。
DirectX10ならSetRenderTargetでNULLをいれる。

201 :デフォルトの名無しさん:2009/07/06(月) 16:50:02
D3DRS_COLORWRITEENABLE
ですね。
ただこれは、マスクを0にしてもピクセルシェーダ自体は呼び出されてしまうようです。
ピクセルシェーダ自体を呼び出さずに済ませてしまう方法があったような気がするのですが・・・
曖昧な記憶で申し訳ないです

202 :デフォルトの名無しさん:2009/07/06(月) 17:48:55
9でも連打ーターゲットNULLでいけなかったっけ

203 :デフォルトの名無しさん:2009/07/06(月) 18:12:17
>>201
DirectX9にはない。
0.0を出力しとけ。

普通は色の出力を全部マスクしていればドライバー側で
PixelShaderの処理はスキップしてくれるはず。

>>202
インデックス0に対してはNULL無理。

204 :デフォルトの名無しさん:2009/07/06(月) 20:31:43
ピクセルシェーダから深度値を変更できるんだから、
カラー出力しなくてもスキップされるわけないだろう。

205 :デフォルトの名無しさん:2009/07/06(月) 20:35:20
深度値を出力した時だけ早期Zカリングがスキップされたりするんだから
カラーマスクと深度出力をみて不要ならスキップもしてるだろ。

206 :デフォルトの名無しさん:2009/07/06(月) 20:56:12
スキンメッシュのプログラムはマテリアルを設定してないの?

207 :デフォルトの名無しさん:2009/07/06(月) 21:28:10
それは自分次第だろ。

208 :デフォルトの名無しさん:2009/07/06(月) 21:44:46
HELP ME
Xファイルを表示するためにマテリアルの数を変数に格納したはずなのになぜか格納されていません。
推測で原因を教えてください

209 :デフォルトの名無しさん:2009/07/06(月) 21:57:48
推測だがお前が悪い

210 :デフォルトの名無しさん:2009/07/06(月) 22:54:50
directsoundでIDirectSoundBuffer8::SetVolumeをセットしても音量に変化がありません。なぜだすか?

211 :デフォルトの名無しさん:2009/07/06(月) 22:57:08
>>210
っ 初期化

212 :デフォルトの名無しさん:2009/07/06(月) 23:49:24
>>211
IDirectSound8::CreateSoundBufferが内部で初期化してるけど、音量変更前にもう一回初期化するってこと?
そもそもループ内でそれやるの難しくない?

213 :デフォルトの名無しさん:2009/07/06(月) 23:56:55
最初にやれよ

214 :デフォルトの名無しさん:2009/07/07(火) 00:01:05
CreateのときにDSBCAPS_CTRLVOLUMEフラグを立ててないからって落ちじゃ?

215 :デフォルトの名無しさん:2009/07/07(火) 00:51:34
a


216 :デフォルトの名無しさん:2009/07/07(火) 01:02:16
DI8で pDI8->EnumDevices でデバイスを列挙するのはわかるんだが
pJoyDevice->EnumObjectsでプロパティを列挙したときに何が取得できるかよくわからない

たぶんボタンがいくつあるとか軸の範囲とかの取得・設定ができるんだと思うんだけど
EnumObjectsCallback内でpJoyDevice->SetPropertyとかやっているサンプルが多く、
これだとpJoyDeviceが1つのときは問題ないんだろうけど
複数のpJoyDeviceを扱いたいときとかどうすればいいのだろう?
とか考えるとさらによくわからなくなりまつ

BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext )
のpContextに、プロパティ設定したいデバイスのpJoyDeviceでも渡して
pContext->SetPropertyとでもしておけばいいんでしょうか?




217 :デフォルトの名無しさん:2009/07/07(火) 01:12:08
PCでパッド2個つけて2人用プレイって需要あるんかな
格闘ゲームでも1P vs COM か COM vs COMしか利用されないだろ

218 :デフォルトの名無しさん:2009/07/07(火) 02:16:04
家庭用ゲーム機のエミュとか?

219 :デフォルトの名無しさん:2009/07/07(火) 09:15:32
http://abnormal.sakura.ne.jp/upfiles/2008/06/29/keiou.jpg

            l   i    i        i    i    l
   / ̄ヽ   昼l   ゝ  ノ        ゝ  ノゝ  ノ
   , o   ', 食ご l  i´   `i  _   i´ 講  `i   `l
   レ、ヮ __/  べはl  l     /  \ l  義  l   l
     / ヽ  よん.l       {@  @ i   が  l   l
   _/   l ヽ うを l       } し_  /   お
   しl   i i    l        > ⊃ <    わ
     l   ート   lヽ、    / l    ヽ     っ
 ̄ ̄¨¨'~~ ‐‐‐--─|  ヽ 、 / /l   丶 .l`\ た
____   __   |     (_/ |   } l`\|
    ||  |WC|  |  へ へ   ヽ、  l ! \||
    ||   ̄ ̄  |/   \ `ヽ、 ヽし! /|| ガタッ
    ||       |    / /     ヽ、||
  ◎||       |   / /        ヽ、
 ̄ ̄ ¨¨¨ー─‐‐--- ,,, __ ____
       ,, _    |        ̄¨¨` ー──---
モパ  /     `、   |    モパ   |:::::::::::::::
グク /       ヽ |    グク  /  ̄ ヽ:::::モパ
モパ./  ●    ●l |    モパ  l @  @ l:::グク
グク l  U  し  U l |   グク  } し_  /::::モパ
   l u  ___ u  l |     _  /=テ⊃ <_グク
    >u、 _` --' _Uィ l   ◎ー)/キ' ~    \ヽ
  /  0   ̄  uヽ |    |  | | i二二二i-'  ) ',
. /   u     0  ヽ|    ~~~ ~ l ヽ--┬ ' ./
 テ==tニト      |      / ̄/ ̄ ̄` ノ /
/ ̄) ̄ | ̄ ̄ ̄ ̄ ̄|      |  |  |二二二)



220 :sage:2009/07/07(火) 18:55:08
>>216
pJoyDevice->EnumObjects は 第3引数で指定したフラグの情報が取得できる
例えば軸情報なら DIDFT_AXIS を指定すればいい。
ttp://msdn.microsoft.com/ja-jp/library/cc351884.aspx

>BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext )
引数には DIDEVICEOBJECTINSTANCE オブジェクト と EnumObject で渡した第2引数 pContext がある。
コールバック関数で指定したフラグの情報を含む DIDEVICEOBJECTINSTANCE オブジェクトから pContext に情報を
引っ張ってくればいい。

ex)
Joystick* pJoy = (Joystick*)pContext;
if (pdidoi->guidType == GUID_XAxis) /* 処理 */


221 :デフォルトの名無しさん:2009/07/07(火) 21:13:24
トイレでプログラミングはしても良くて助かった

222 :デフォルトの名無しさん:2009/07/07(火) 21:32:50
監視カメラ設置かよ

223 :デフォルトの名無しさん:2009/07/07(火) 23:14:53
あれあれ?
俺ライブラリをVistaに対応する前にWindows7とかでちゃったw

224 :デフォルトの名無しさん:2009/07/07(火) 23:30:55
これはどんな仕組みなの?
ttp://www.teatime.ne.jp/infor/tech48/page_02_01.htm

225 :デフォルトの名無しさん:2009/07/07(火) 23:42:55
DirectXと関係ない宣伝行為乙

226 :デフォルトの名無しさん:2009/07/07(火) 23:47:07
どう見てもDirectXだが

推奨環境
Vista 日本語版WindowsXP / Vista
Intel(R)Core(TM)2 Duo プロセッサ 2.40GHz 以上

メモリ 以上 2.0GB 以上


DirectX9.0cに完全対応し
ビデオメモリ256MB以上で
ピクセルシェーダー2搭載の
GeForceまたはRADEONシリーズ
(メーカーから最新のグラフィック
ドライバサポート必須)
画面解像度1280X960ピクセル
フルカラー推奨

メインメモリと共有と表記のあるビデオシステムは動作保証外となります
サウンド DirectSoundに完全対応したサウンドカード
DVD-ROM 4倍速以上のドライブ
HDD 5.0GB以上の空き容量


227 :デフォルトの名無しさん:2009/07/07(火) 23:54:16
224の仕組みとDirectXは関係ない。
OpenCVのスレにでも行けばいいかと。

228 :デフォルトの名無しさん:2009/07/08(水) 01:44:18
てs

229 :デフォルトの名無しさん:2009/07/08(水) 09:02:37
>>223
よう俺

230 :デフォルトの名無しさん:2009/07/08(水) 09:16:19
         宇  宙  の  大  規  模  構  造
                 (太陽の∞倍)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∧ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              帝ハ神ナリ!帝ハ神ナリ!




         グ  レ  ー  ト  ウ  ォ  ー  ル
 ̄ ̄ `――(長さ:太陽の3500兆倍、幅:太陽の2100兆倍) __ , -――
               ∧
           守るも攻めるも黒鉄の〜♪



         _,,,,,,,,_
        /`  `'i、
超銀河団  |      l    <ゴミクズども氏ねよwwwww
       ゙l、    /
        `'ー---'"
(太陽の約680兆倍〜)

銀河系     o  <太陽?誰だよそれwwww
(太陽の6800万倍)

IRS5       。  <太陽?俺の国民だよ
(太陽の10000倍)

太陽        .  <たいようたいよう〜!
(直径140万km)



231 :デフォルトの名無しさん:2009/07/08(水) 11:44:25
カメラの使用はDirectShowの範疇でありDirectXではない。

232 :デフォルトの名無しさん:2009/07/08(水) 14:56:39
DirectX9のフックについて、初心者向けの詳しいHPはありませんか?
当方、VC(++は少し苦手)、VB、Delphi分かります。dllのコンパイルも出来ます。

目標は、フルスクリーンの別アプリ画面に自前のグラフィックを描画することです。
レベルが低い質問かもしれませんが、よろしくお願いします。

233 :232:2009/07/08(水) 15:02:38
別アプリのhWnd取得と画像データの取得までは出来たのですが、描画の方が上手くいきません。

234 :デフォルトの名無しさん:2009/07/08(水) 15:08:48
またおまえか

235 :デフォルトの名無しさん:2009/07/08(水) 15:12:14
16と16の平たいを毎回敷き詰めて描くと
テクスチャに写植して描くはどちらが速いか?

236 :デフォルトの名無しさん:2009/07/08(水) 15:19:37
実測しろ

237 :デフォルトの名無しさん:2009/07/08(水) 15:20:59
日本語がおかしいが
敷き詰めて書くのが1回の命令で出来るならそっちの方がいいんじゃね?
ただのループならWARP指定汁

238 :デフォルトの名無しさん:2009/07/08(水) 16:18:32
>>234
やはり直接フックがベストですか!
有り難う御座いました。

239 :デフォルトの名無しさん:2009/07/08(水) 17:23:37
質問です。
カメラから見た時の、あるメッシュの「厚み」を調べる方法を考えています。

サイコロのような凸型物体ならば、
・裏面を描画し、テクスチャAに深度値として書き込む。
・表面を描画し、テクスチャBに深度値として書き込む。
とし、A-Bで厚みが出ると思います。
(深度バッファシャドウの時のように、深度値をz/wで0〜1にしてしまうと、歪んでしまうので単純にzを記録する必要がありますが)

ただ、「コ」の字を上から見た時のような場合の厚み合計の出し方が思いつきません。
「コ」を真上から見た際、上辺の厚みと、下辺の厚みの合計が知りたいのです。
何か良い手はありますでしょうか?

240 :デフォルトの名無しさん:2009/07/08(水) 17:34:02
>>239
表面/裏面と分けるのではなく、カリングを無効にした状態でZFUNCを
LESSEQUAL、GREATEREQUALにして描画する。

241 :デフォルトの名無しさん:2009/07/08(水) 17:39:32
>>239
加算合成すればいいのではない?
裏面のZ値の合計から表面のZ値の合計を引く
0〜1の範囲をはみ出ないようにしないといけないけれど

242 :デフォルトの名無しさん:2009/07/08(水) 17:49:10
>>240
すいません、その結果何が解決するかがちょっと分からないのですが…。
一番奥であるポリゴンまでの距離が記録されるだけかと。

>>241
素晴らしいです!
まさにその通りですね!
(Af - An) + (Bf - Bn) == ((Af + Bf) - (An + Bn))
ということですね。

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

243 :デフォルトの名無しさん:2009/07/08(水) 18:31:47
3Dゲームのプログラミングを始めようと思うのですが
オススメの書籍はありますか?

244 :240:2009/07/08(水) 18:59:59
>>242
上辺の厚みと下辺の厚みの合計ってとこ見てなかった。
コが1枚ずつの面ってことじゃなくて、厚みのある凹ってことね。

245 :216:2009/07/08(水) 19:25:37
>>220
EnumObjectsCallbackで何をやってるのかようやく理解できますた
VOID* pContext に LPDIRECTINPUTDEVICE8 を渡して
コントローラーごとに個別にプロパティが設定できるようになりました
ありがとうござますた


246 :デフォルトの名無しさん:2009/07/08(水) 19:27:41
>>243
DirectX逆引き大全500が鉄板だと思うが
Googleのオンライン書籍立ち読みで見れるので見るといい


247 :デフォルトの名無しさん:2009/07/08(水) 21:33:09
いまググって調べた。 東京12.960.883人の内、支那人149.113人だな。
堂々コリア人を抜いてる。  (09年5月調べ)

約、100人に1.15人いるんだな。

248 :デフォルトの名無しさん:2009/07/08(水) 22:49:17
初心者ですが質問させてください。

現在DirectSoundを使った音声キャプチャプログラムを作成しています。
マイクやライン、サウンドミキサなどの入力先を指定してキャプチャを行いたいので
次の手順でキャプチャデバイスオブジェクトの作成を行っています。

手順1.DirectSoundCaptureEnumerate関数を使用して利用可能なデバイスを列挙
手順2.手順1で列挙したGUIDから任意の入力先のGUIDを選択し
   DirectSoundCaptureCreate8関数の第1引数に設定しキャプチャデバイスオブジェクトの作成

Vista環境では手順1のDirectSoundCaptureEnumerate関数で
マイクやラインなど録音デバイスの項目に表示されている
入力先の数だけデバイスの情報が取得できて
入力先を選択してのキャプチャが実施できるのですが、
XP環境では1つのデバイスしか列挙できず入力先の指定が行えません。
(録音コントロールにはマイク、ライン入力など複数の入力先が表示されています。
 録音コントロールで選択されている入力先の音しかキャプチャ出来ません。)

XPでは入力先を指定してのキャプチャデバイスオブジェクトの作成は行えないものなのでしょうか?
不可能な場合は何か入力先を指定してキャプチャするよい方法はないでしょうか?
よろしくお願いします。


249 :デフォルトの名無しさん:2009/07/08(水) 23:44:16
Ring 3 Circus のDirect3D9 Hookingを改造して
Direct3D9を使ったゲームの画像を取得するプログラムを作ったんですが
デバイス作成時にバックバッファをロック可能にするフラグを指定していないと
バックバッファの内容が取得できないようです。

それでIDirect3DSwapChain9::GetPresentParametersを呼んで、
得られたD3DPRESENT_PARAMETERSのFlagsを
flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER
のように変更し、Resetを読んだら、HRESULTがD3DERR_INVALIDCALLに・・。
Resetはだめみたいです。

ランチャとか用意して、バックバッファをロック可能でデバイスを作成させるのは使うとき面倒です。
ほかにバックバッファの内容を取得する方法は無いんでしょうか

250 :デフォルトの名無しさん:2009/07/09(木) 00:36:26
取得しないといけない状況がまったく思いつかないので分からない。

251 :デフォルトの名無しさん:2009/07/09(木) 00:45:51
IDirect3DDevice9::StretchRectでコピーすりゃいいんでないの

252 :デフォルトの名無しさん:2009/07/09(木) 10:30:42
質問です

パーティクル(たくさんのビルボード)を表現するのに
DrawPrimitiveUP + D3DPT_TRIANGLELIST
を使っています。

1つのビルボードを表現するのに6頂点。
100個なら600頂点のデータをDrawPrimitiveUPに渡す必要があるのですが、これが思いのほか遅い気がします。
パーティクルを表現するのに、DrawPrimitiveUPを使うのは常道なのでしょうか?

DrawPrimitiveUPによって、メインメモリーからVRAMに転送するコストが大きいのが遅い原因かな?と思います。
ただ、パーティクルは移動なども毎フレーム行われるため、DrawPrimitive(UPではない)のほうでは実現が難しい気がします。
(結局は毎フレームStreamに流す作業が必要。これではVRAMへの転送コストは変わらない)

253 :デフォルトの名無しさん:2009/07/09(木) 10:47:49
AGPメモリ

254 :デフォルトの名無しさん:2009/07/09(木) 11:05:55
どんなパーティクルを想定してるのかわからないけど
6頂点のポリじゃなくて1頂点のポイントスプライトにしてみるとか
そうすると制御が楽になるので簡単な飛び散りくらいなら
頂点シェーダで動かせるようにもなるし

255 :デフォルトの名無しさん:2009/07/09(木) 11:16:33
>>252
ホントにDrawPrimitiveUPの呼び出しだけを計測してる?
頂点演算って毎フレームCPUにやらせると結構負荷かかるよ。
パーティクルの移動計算が幾何学的なものならシェーダーにやらせたほうがいい。

256 :デフォルトの名無しさん:2009/07/09(木) 11:31:06
レスありがとうございます

>>254
ポイントスプライトも考えたのですが(ポイントスプライトで実装しているパーティクルもあるので)、
今回は頂点毎に違う方向を向いた法線が必要だった(疑似ボリュームパーティクル)ため、ビルボードにすることにしました

目指しているのは疑似ボリュームパーティクルによる煙表現です

>>252
実験としてDrawPrimitiveUPに流し込む(FVFで定義した頂点フォーマットの)構造体を編集せず、描画し続けさせてみました。
ほぼ同等の速度のようです。
おそらくCPUパワーはほとんど足を引っ張っていないかと思われます。

257 :デフォルトの名無しさん:2009/07/09(木) 11:43:31
>>256
TriangleStripなら4頂点で済むよ。

DirectXのバージョンが分からんが、たぶんヘルプに「動的な〜」頂点バッファ処理云々の項があって
そこにDrawPrimitiveで、頂点位置が毎フレーム変わるようなものの処理の仕方が書いてあるはず。

簡単に言えば、頂点バッファを確保して、後は毎フレームに
バッファをロック>書き込み>一杯になったらアンロックしてDrawPrimitive>再度バッファを…

更にインデックスバッファを使ってTriangleStripにすれば、転送コストはかなり違ってくるわよ。

258 :デフォルトの名無しさん:2009/07/09(木) 11:49:37
Stripじゃ縮退ポリゴンで2頂点増えるから、減らないだろう。

259 :デフォルトの名無しさん:2009/07/09(木) 11:57:46
バッファをロックするんじゃ、結局遅いと思うが

260 :デフォルトの名無しさん:2009/07/09(木) 12:10:23
インデックスは毎回転送する必要がないから、流すデータ量は減るんじゃないか

261 :デフォルトの名無しさん:2009/07/09(木) 12:17:30
微妙な即レスが続いて、なんか答えるのが馬鹿馬鹿しくなってきたが

>>258
2通りにとれるな。もう少し理由を言ってみ。縮退ポリなんか使わんよ。

>>259
今時そんな…ではDrawPrimitiveUPはどうやってVRAMに送ってるんだ?
ロックとDrawは極力まとめるんだ。まぁ、UP系もそれなりに上手くやってくれるけど。

確かLunaの作者が昔実験結果を掲載してくれてたけど、今はなくなっちゃったみたいだな。

262 :デフォルトの名無しさん:2009/07/09(木) 12:45:15
スプライトって全部板なんだから頂点情報ひとつで十分だろ

263 :デフォルトの名無しさん:2009/07/09(木) 12:49:55
>>261
縮退ポリゴンを使わずに、複数のビルボードをStripで描画するってどうやるの?

264 :デフォルトの名無しさん:2009/07/09(木) 12:55:40
>>261
いまどきそんな。とか言ったって、DrawPrimitiveUPより早くならなきゃ質問に答えたことにはならないんだぜ?
しかも今回は、毎フレーム1回しかUPを呼び出さだないわけだし、どうやってUP以上に「ロックとDrawをまとめる」んだよ?

265 :デフォルトの名無しさん:2009/07/09(木) 13:01:22
>>263-264
ごめんなさい
俺こそが質問者の質問をよく読んでない、ただの馬鹿馬鹿しい男でした

266 :デフォルトの名無しさん:2009/07/09(木) 13:07:44
ちゃんと自分の間違いを謝れる奴は、伸びる奴

267 :デフォルトの名無しさん:2009/07/09(木) 13:10:27
>>256
そこまで試したならついでに、静的なVertexBufferに頂点データ入れてみて
本当に転送が問題なのかも確かめた方がいいかと。

268 :デフォルトの名無しさん:2009/07/09(木) 13:15:57
            /j^i
           ./  ;!
          /  /__,,..
         /  `(_t_,__〕
         /    '(_t_,__〕
        /    {_i_,__〕
       /    ノ  {_i__〉
     /      _,..-'"
   /      /
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜




269 :デフォルトの名無しさん:2009/07/09(木) 13:23:51
だから動的更新ならAGPメモリ使えよ。

270 :デフォルトの名無しさん:2009/07/09(木) 13:40:13
>>263
インデックスバッファ

>>264
まず>>259でロックが遅いなんて書くから、UPでもロックのコストは変わらないと書いた。
「動的な〜」の項読んでみろと。>>253氏のも乗ってたはず。

で更にUP系でIB使うと、毎回IBの転送が起こるよな?
ところが非UP系ならば初期(或いはVBサイズ変更時のみ)コストだけで済む。

で、更に頂点数の転送量は2/3に抑えられる。

もう少しいうと、DrawPrimitiveUP系の場合、計算用のアクセスしやすいバッファの他に、
描画用の配列をメインメモリに取って、更にVRAMにも同じのが出来るわけだ。無駄だと思うがねぇ。

まぁ、好きに実装したらいいじゃないの。なんでそんな必死よ>>265-266

271 :デフォルトの名無しさん:2009/07/09(木) 13:43:23
>>252がDrawPrimitiveUPを連投してるなら
それをまずやめるべき。
>>257方式で、まとめるのが一番良い方法だろうな。

余力と環境があるなら、ジオメトリインスタンシングも
試して欲しいところだが。

272 :デフォルトの名無しさん:2009/07/09(木) 14:06:50
結局「縮退ポリゴンを使わずに、複数のビルボードをStripで描画する」方法の説明がないわけだが

273 :デフォルトの名無しさん:2009/07/09(木) 14:11:03
インデックスで縮退用のを適当に一枚かますってことか
それでなくてもDrawPrimitiveUPにこだわる人は、
描画数増えたときどうするんだろ?

274 :デフォルトの名無しさん:2009/07/09(木) 14:24:44
「DirectSoundで鳴らしている音」を録音したいのですが、
どうすればよいでしょうか?

例えば、自作ゲームの「BGM」と「プレイ中に適宜鳴る効果音」の両方を
1つのWAVファイルに録音したいと思っています。
よろしくお願いします。


275 :デフォルトの名無しさん:2009/07/09(木) 14:27:40
縮退ポリは使わないと言ってるだろ

276 :デフォルトの名無しさん:2009/07/09(木) 14:39:01
なんか大人と子供だな

277 :デフォルトの名無しさん:2009/07/09(木) 14:40:13
そもそも2000〜3000ポリゴン以下ならDrawPrimitive系もDrawPrimitiveUP系も
速度にほとんど差がないんだが、みんな計測した上で話をしてるんだろうか?

278 :デフォルトの名無しさん:2009/07/09(木) 14:43:08
誰もそこの速度差は問題にしていないけどな

279 :デフォルトの名無しさん:2009/07/09(木) 14:46:15
259です。
>>270
>UPでもロックのコストは変わらないと書いた
259で書いてるのは「結局(UPと同じくらい)遅いと思うが」という意味です。

280 :デフォルトの名無しさん:2009/07/09(木) 14:54:53
>>277 >>278
むしろ本当に3000ポリゴン程度で差が出るなら問題じゃね?
速いほう使った方がいいだろ

281 :デフォルトの名無しさん:2009/07/09(木) 15:07:02
たくさんのご意見ありがとうございます。

まず、UPをやめる+INDEX化で転送量が2/3になるのは良さそうです。
やってみます。
さらにINDEXバッファは1回だけ書けば書き換え無用ですから、純粋に2/3になりそうで良いですね。

TriangleStripで〜という方法は、いまいちわかりません。
離れた位置の四角ポリゴン(実際は三角ポリ×2)を描画する必要がある以上、TriangleStripは使えないのではないでしょうか?
縮退ポリゴン(描画されない細い三角ポリゴン)を使うことによる手法も聞いたことはありますが。

AGPメモリというのが最初よくわかりませんでしたが、D3DUSAGE_DYNAMICを指定することなんですね。
こちらも試してみます。

このほかに、下記のような手法も考えたのですが、一般的ではないのでしょうか?
説明を楽にするために、INDEXではない方法での説明とします。
・「四角形を1つ描画するのに必要な情報」を作る。つまり6頂点分。
 頂点データの中にD3DFVF_SPECULARを加え、その領域に「何個目の四角形か」を入れておく。

・上記の6頂点×描画しうる四角形分の”静的”頂点バッファを作り、情報を書き込む。
 その際D3DFVF_SPECULARの領域に入れている「何個目の四角形か」をきちんと適切な値にしておく。

・パーティクルを表現するには、四角形毎の座標情報を更新する必要がある
 そこでID3DXEffect::SetVectorArray()で座標情報を渡す

・エフェクト側ではD3DCOLORtoUBYTE4を使って、対応するVectorArrayの座標情報を引き出し、頂点座標に加算する

問題点として、ビルボードをカメラに正面向けにするためのMATRIX変換を頂点シェーダ内でやる必要があります。
(今までは、頂点データ内のxyzを正面向くように調整済みだった)

282 :デフォルトの名無しさん:2009/07/09(木) 15:16:38
>>281
長々書いてあるが、テストすれば分かることだから自分でやってくれ。

Index関係の思い出といえば、
Indexバッファを途中から使うための引数の与え方が全然資料が無いことだった。
正しく動作させるまでかなり試行錯誤したな。
一度動けばなんてことないんだが。

283 :デフォルトの名無しさん:2009/07/09(木) 15:24:58
>>282
詳しく
前にIndexバッファを途中から使おうとしたんだけど
GeForceとIntel系チップセットでは想定通りの動きをしたんだけど
ATI系のビデオカードではうまく動いてくれなかったんだよね

284 :282:2009/07/09(木) 15:28:43
>>283
逆に、マジかと言いたい。
オレはGeForceで開発した上でIntel系とATI系でも動いてることを確認する形を取ったが、
Direct3DのAPIレベルで互換性が無いような違いが
IndexedBufferレベルであるんだろうか?

285 :デフォルトの名無しさん:2009/07/09(木) 15:44:09
>>281
全然わからんが、要はこれがしたいのか?
FVFが通るか、不安があるけど。

uniform float4x4 g_world_transform[n] = { ... };
static const float4 g_local_position[4] = { ... }; // for box vertices

struct vertex_in_t
{
uint24 transform_index; // 0~n
uint8 position_index; // 0~3
};

struct vertex_out_t
{
float4 positon;
float4 color;
};

void vp_main( in vertex_in_t iv, out vertex_out_t ov )
{
float4x4 world_transform = g_world_transform[iv.transform_index];
float4 local_positon = g_local_position[iv.position_index];

ov.position = mul( local_positon, world_transform );
pv.color = float4(1,1,1,1);
}

286 :デフォルトの名無しさん:2009/07/09(木) 17:34:48
縮退ポリゴンとはなんぞや?

287 :デフォルトの名無しさん:2009/07/09(木) 17:43:39
>>286
面積が0のポリゴン
ストリップは数珠繋ぎしか出来ないけど
途中面積が0のポリゴンを繋げれば
バラバラに見えるでしょ

288 :デフォルトの名無しさん:2009/07/09(木) 17:52:37
報告です。

281で提唱した方法だとでかかる時間を1とすると、
AGPメモリに置く方法は2
DrawPrimitiveUPでやる方法は3
となりました。

何の因果か、きれいに1:2:3になりました。

281で提唱した方法だと、実質VRAMへ転送している量はvector4 * particleNumでかなり節約できます。
その他ですと、
float x, y, z;
float nx, ny, nz;
DWORD color;
float u, v;
でfloat * 9 * particleNumほど転送しているので、二倍超転送していることになります。
やはりボトルネックはこのあたりなのでしょう。

次は、ストリームを分けることで、AGPメモリに置く方法をとりつつxyzの値しか転送しないようにしてみます。


289 :デフォルトの名無しさん:2009/07/09(木) 17:59:13
1*1のポリゴン用意して
トランス演算とDraてPrimitive繰り返せばよくね?

290 :デフォルトの名無しさん:2009/07/09(木) 18:21:59
>>281を見てると「それってInstancingじゃね?」と言いたくなる
ttp://msdn.microsoft.com/ja-jp/library/bb174602(VS.85).aspx

291 :デフォルトの名無しさん:2009/07/09(木) 18:48:59
小沢の西松建設問題の時
09/01/21 西松建設社長を逮捕
09/01/21 元西松建設専務 死亡
09/02/24 長野知事の元秘書(西松建設事件での参考人) 死亡
      (電柱にロープを巻きつけ首吊り自殺)
09/03/01 「小沢一郎氏と秘書と、ダム工事のただならぬ関係」を追及してきた記者(吉岡元議員) ソウルで取材中に死亡
09/03/03 民主党岩手支部家宅捜索
09/03/04 民主党事務所のある相模原卸売市場全焼
助かった人
小沢氏の第一秘書・大久保容疑者も自殺の恐れが出てきたため、検察が緊急逮捕

鳩山の献金問題



292 :デフォルトの名無しさん:2009/07/09(木) 23:14:37
288です。
288の報告は、いわゆるオンボでの実験で、頂点シェーダがソフトウェアで行われていました。

グラボつき(GF9600)の環境で試したところ、
UP系 5
AGP  8
281法 1

の割合で時間がかかりました。
AGP法のほうが、UPよりも遅くなっているのが印象的です。

>>290
面白い記事ありがとうございます。
まさしくこれですね。

293 :デフォルトの名無しさん:2009/07/09(木) 23:42:09
なんかやり方が下手な気がする
ソースあげてみ

294 :デフォルトの名無しさん:2009/07/09(木) 23:49:07
つかindexbufferも使えない素人のコードによる測定になんの価値があるんだ
いつまでやる気だろ

295 :デフォルトの名無しさん:2009/07/09(木) 23:57:00
>面白い記事ありがとうございます。
節子…それ、公式サンプルや

一般的な方法がわかって良かったんじゃね

296 :デフォルトの名無しさん:2009/07/09(木) 23:59:00
まともなグラボならUP使ったほうが早いのは常識だろ
293とか294は典型的な2ch馬鹿だな

297 :デフォルトの名無しさん:2009/07/10(金) 00:04:24
>>293
一番あやしいのは、逆に遅くなってるAGPのやつですよね。

pDev->CreateVertexBuffer(
sizeof(D3DVERTEX) * 4 * MAX_SMOKE,
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY ,
MYFVF,
D3DPOOL_DEFAULT,
&m_buffer,
NULL
);

pDev->CreateIndexBuffer(
sizeof(WORD) * 6 * MAX_SMOKE,
D3DUSAGE_WRITEONLY ,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&m_index,
NULL
);

で生成し、毎フレーム下記のようになっています。
>>294 IndexBufferは使ってますよ

m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
m_buffer->Unlock();
pDev->SetStreamSource(0, m_buffer, 0, sizeof(D3DVERTEX));
pDev->SetIndices(m_index);

pDev->SetFVF(MYFVF);
pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4 * m_smokes.size(), 0, 2 * m_smokes.size());

298 :294:2009/07/10(金) 00:04:34
>>296
は?UP云々なんて一言も言ってないんだがw

299 :デフォルトの名無しさん:2009/07/10(金) 00:05:10
>>296
その根拠は?

>>292
動的バッファLock時のオプションは
どうしてる?

300 :デフォルトの名無しさん:2009/07/10(金) 00:14:21
>>297
む、こりゃちょっとひどい気がする
スレちゃんと読んでないけど、xyzは毎フレーム変化してるんだよな?
どのタイミングで更新してるんだい?

301 :デフォルトの名無しさん:2009/07/10(金) 00:19:30
>>299
D3DLOCK_DISCARDですね。
m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
この行が、動的バッファのロックです。

LockとUnlockの間に「ここで頂点情報を書き込んでいます」とか書くべきでした。すいません

>>300
え、初心者サイトのサンプルをほぼそのまま使ったのですが、妙でしょうか?

xyzの更新は、Lockの前に行っています。
m_smokesというのが、ビルボードの中心座標の配列vector<D3DXVECTOR3>です。

302 :デフォルトの名無しさん:2009/07/10(金) 00:24:23
ちゃんとD3DLOCK_DISCARDでロックしてるし、
動的バッファの取り扱いは、特に問題はなさそう。
へえ、これでUP系の半分の性能なんだ、信じられんw

303 :デフォルトの名無しさん:2009/07/10(金) 00:29:11
>>302
オンボ環境ではしっかりUPのほうが遅かったので、環境によるような気がします。
明日再度オンボ環境の場所に行くので、再度慎重に測り直してみます。

304 :デフォルトの名無しさん:2009/07/10(金) 00:30:56
>>301
うーむ、Lockの前に更新って、矛盾してないか
このソースだとDYNAMICでバッファを確保した意味がないよ?

305 :デフォルトの名無しさん:2009/07/10(金) 00:34:25
こりゃ計測方法も怪しくなってきたなw
両方のソース示さない限り無意味だろw

306 :デフォルトの名無しさん:2009/07/10(金) 00:39:25
>>304
すいません。ちょっと更新の意味を取り違えているのかもしれません
for(DWORD i = 0; i < m_smokes.size(); ++i)
{
m_smokes[i].y += 0.1f;
}
m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
for(DWORD i = 0; i < m_smokes.size(); ++i)
{
(D3DVERTEX) *p = &vertex[i * 4];
p[0].x = m_smokes[i].x - 0.5f;
p[0].y = m_smokes[i].y + 0.5f;
p[0].z = m_smokes[i].z;
p[1].x = m_smokes[i].x + 0.5f;
p[1].y = m_smokes[i].y + 0.5f;
p[1].z = m_smokes[i].z;
p[2].x = m_smokes[i].x + 0.5f;
p[2].y = m_smokes[i].y - 0.5f;
p[2].z = m_smokes[i].z;
p[3].x = m_smokes[i].x - 0.5f;
p[3].y = m_smokes[i].y - 0.5f;
p[3].z = m_smokes[i].z;
}
m_buffer->Unlock();

こんな感じにやっています。
実際は座標のほかに、normal, color, uv もセットしています。
あと、もうちょいマシなコピーの仕方をしています。

>>305
単純に1000フレーム回るまでの時間を計測しています。
描画以外はほとんど何もやっていないのと、座標移動計算はまったくといってよいほど時間をくっていないのを確認済みです。

307 :デフォルトの名無しさん:2009/07/10(金) 00:41:06
>>294=>>298=>>305
初心者スレ荒らして楽しい?
他人の足引っ張って立って、自分の価値を高めることにはならないぜ?
無意味だと思うならスルーしてなよ

308 :デフォルトの名無しさん:2009/07/10(金) 00:43:46
特に問題あるようなソースには見えないな
UP系のほうが早い場合があるというのは面白い
UPはドライバ側で何かしらの最適化を行っているのかもね

309 :デフォルトの名無しさん:2009/07/10(金) 00:44:01
>>307
連続でお疲れさんw

310 :デフォルトの名無しさん:2009/07/10(金) 00:45:48
294 indexbufferも使えない素人が!(キリッ!!
297 >>294 IndexBufferは使ってますよ

腹抱えてワロタw

311 :デフォルトの名無しさん:2009/07/10(金) 00:53:01
久々に有益情報が出てるな
俺は何も考えずにDrawPrimitiveUP使ってた
Instancingとやらを使うと速度が5倍になるとかマジパネェから俺も実験してみるわ

312 :デフォルトの名無しさん:2009/07/10(金) 00:53:04
俺のソースでは、mallocaで確保した一時バッファにデータを作ってから
Lock→memcpyでまるごとコピー→Unlock と、
ロックしている時間が短くなるようにしてたな。
なんとなくその方が良かろうと思っただけで、計測してないから鵜呑みにはするな。


313 :デフォルトの名無しさん:2009/07/10(金) 00:57:20
294じゃないけど、よくおまえらそこまで無条件で信用できるな。
煽る気はないけど、ソースのないベンチなんて昔は弾いていた気がするんだが。

314 :デフォルトの名無しさん:2009/07/10(金) 01:01:39
DirectX10使えば縮退ポリゴンもいらねーしデータ転送量も抑えられるしでウハウハ。
SO使えば座標更新もGPUで出来てさらにウハウハ。

315 :デフォルトの名無しさん:2009/07/10(金) 01:06:14
>>312
D3DLOCK_DISCARDを指定すると、
一時バッファを用意してくれるらしいので
その処理は冗長と言える。

316 :デフォルトの名無しさん:2009/07/10(金) 01:16:45
俺もGeforce9600GTなんで、さくっと試してみたよ
DrawIndexedPrimitiveとDrawIndexedPrimitiveUP
LVetexで位置のみ毎時更新
前者は動的バッファがたまり次第フラッシュ
後者もそれに合わせようと思ったけど、面倒なんでメモリ一括確保
疲れてるんで固定機能でやったけど、1万ポリでも誤差程度
寝る

317 :デフォルトの名無しさん:2009/07/10(金) 01:20:16
>>316
そうなるはずだ。
UP系かそうでないかでそんなに差が出るというのはちょっとおかしいんじゃないか。

プリミティブの座標更新をGPUにやらせることで全体の高速化を図るというのならまだ分かるが。

318 :デフォルトの名無しさん:2009/07/10(金) 01:30:53
>>316
結局描画におけるGPUの時間が変わらないからフレーム単位だと時間は変わらないが
DrawPrimitive()とDrawPrimitiveUp()だと関数から帰ってくるまでの時間にかなり差があったと思うが。

319 :デフォルトの名無しさん:2009/07/10(金) 02:04:48
DirectShowのスレでも質問したのですが、スレの勢いを考えてこちらにも質問させていただきます。

DirectShowでGeekなページを参考に動画再生をするプログラムを作りました
http://www.geekpage.jp/programming/directshow/change-rate.php
参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。
put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』
とありますが、

pMediaPosition->put_Rate(0.5);
のput_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。

そこでIMediaSeekingかIMediaPositionを用いて、または用いなくてもいいのでdirectshowで
動画の巻き戻しをするプログラムを作りたいのですが、どうすればよいのやら困っています。
何か良い考えはないでしょうか?
是非知恵をおかしください!

320 :デフォルトの名無しさん:2009/07/10(金) 04:29:31
テクスチャのサンプリングをWrapにして何度も繰り返すような貼り方をすると負荷が高いと聞いたんですが
これは本当ですか?
使用するテクスチャが小さくなるから、むしろこっちのほうが良いと思ったんですが
自分の環境( GTX280 )では違いが見られなかったんですが
オンボードのような低スペックのビデオカードだと遅くなったりしますか?

321 :デフォルトの名無しさん:2009/07/10(金) 08:27:10
うそです。

322 :デフォルトの名無しさん:2009/07/10(金) 08:28:23
ゲームの動画再生にDirectShowはいつも使っているけど、再生速度の変更が必要になったことがないから知らない。

323 :デフォルトの名無しさん:2009/07/10(金) 08:34:33
AGPっていつの時代だよw

324 :デフォルトの名無しさん:2009/07/10(金) 09:08:50
ソース無いベンチなんて意味ないよ
ということではあるそうですが、一応報告しておきます

グラボつき(GF9600)の環境で試したところ、
UP系 5
AGP  8
281法 1

オンボ環境で試したとところ
UP系 10
AGP  9
281法 8.5

くらいの処理時間になりました。
あくまで同一環境内での比率なので、GF9600の数値とオンボの数値には関係性はありません。
まったく同じ実行ファイルで実験しました。

>>316
私の実験と差がありそうなのは下記2つっぽいですね
>座標だけ更新
座標だけストリームを分けて、そこだけ更新したということでしょうか?
(私のは、座標のほかに法線・カラー・UVも毎フレームVRAMに転送しています)

>前者は動的バッファがたまり次第フラッシュ
これはどういう方法でしょうか?
D3DLOCK_DISCARDではない方法ですかね

325 :デフォルトの名無しさん:2009/07/10(金) 11:36:58
定数レジスタの数について質問があります
DX8時代は96
DX9時代は256
というのはなんとなく知っているのですが、これは頂点シェーダのバージョンに依存しているのでしょうか?

もしそうだとして
定数レジスタを200個近く使っている状態で
VertexShader = compile vs_1_1 vertexShader();
とやったとき、問題なく動作してしまうのが不思議です
エラーもでませんし、見た目も問題なく表示されてしまうのです

326 :デフォルトの名無しさん:2009/07/10(金) 12:08:32
最低サイズが だろ?
詳細はcapsで調べれたと思う
どのみち最低サイズを守った方が利口だが

327 :デフォルトの名無しさん:2009/07/10(金) 13:03:54
ICH10RでSSD2台で7RCでRAID0組みたいです。途中でFDDからRAIDドライバ読み込み必要ですか?

328 :デフォルトの名無しさん:2009/07/10(金) 23:54:37
>>324です。
原因がわかりました。

どうやら、>>306のように、ロックしてからループで書きこんでいくのはよろしくないようです。
>>312のように、一時バッファを用意して全部メインメモリ上で書きこんでから、Lock。
memcpyでいっきに流し込みすぐUnlock
とやることで、UP系と同等の性能になりました。
「これならUPでいいじゃん」って思ってしまいますね…。

329 :316:2009/07/11(土) 12:23:40
>>324
なんの工夫もなくロックして位置や色を書き込み
memcpy未使用

フラッシュはバッファに溜まったものを吐き出すって意味
今時使わない?俺もロートルか

330 :316:2009/07/11(土) 13:00:33
memcpyでもやってみたが同じだな

フォーラムをざっと見てきたが、UPはレガシー扱いで間違いないだろう
・UPはハードウェアサポートが約束されていない
・UPは中間バッファを勝手に使うからパフォーマンスが落ちる(チューニングしづらい)
  少なくとも2倍から3倍のメモリを使う
・描画命令を出しても、完了してから制御を戻すわけでないので、UPのために確保したメモリがいつまで妥当であるべきかが不定
・例え変化が無くてもmemcpyが描画命令のたびに呼ばれる(最適化が出来ない)

問題の件だが、冗長なメモリコピーがそのままUPのコストになるので、
扱う頂点数が増えるほどUPは不利になるだろう
おそらく結果が逆転してしまうなら、正しく使えてないのだと思う

331 :デフォルトの名無しさん:2009/07/11(土) 13:12:57
ロックが長いってだけで、1.6倍の遅延に繋がるとは思えない。
なぜそうなるのか、シナリオが作れない。
誰か説明してくれない?

332 :デフォルトの名無しさん:2009/07/11(土) 13:35:23
>>330
・描画命令を出しても、完了してから制御を戻すわけでないので、UPのために確保したメモリがいつまで妥当であるべきかが不定

流石にこれはないだろ。
UPを呼び出した直後に、確保したメモリーを壊してしまっても大丈夫だよ

333 :316:2009/07/11(土) 14:12:18
>>332
さてどうだろうな
描画命令はFIFOで処理されタイミングは不定
投げ入れ側は(Sendではなく)Post扱い
そしてUPの場合、向こう側で全コピーが必ず発生している

壊したメモリがたまたま生きていただけかもしれない
*大丈夫だった*以上のことは言えないはずだ

334 :デフォルトの名無しさん:2009/07/11(土) 14:15:00
UP系は関数から抜けたときにはソースのデータは破棄してOKなはず。
ようするに中でメモリ確保してコピーして保持してるって事だけどな。

335 :デフォルトの名無しさん:2009/07/11(土) 14:21:21
ハハ、DrawPrimitiveUPは
何時クラッシュするかわからない
ファイナルハゲマル丼的な関数というわけですね。
わかります。

336 :デフォルトの名無しさん:2009/07/11(土) 14:23:18
>IDirect3DDevice9::DrawPrimitiveUP に渡す頂点データは、呼び出しの後も保持する必要はない。
>MicrosoftR Direct3DR は、呼び出しから戻る前に、そのデータへのアクセスを完了する。

>>330の引用元の信用がガタッと減ったな



337 :デフォルトの名無しさん:2009/07/11(土) 14:25:35
MSDNの記事くらいは読もうよ。

>IDirect3DDevice9::DrawPrimitiveUP に渡す頂点データは、呼び出しの後も保持する必要はない。
>MicrosoftR Direct3DR は、呼び出しから戻る前に、そのデータへのアクセスを完了する。

338 :316:2009/07/11(土) 14:27:54
>>336
こりゃすまなかったな
引用元はよく使うGDevだ

しかし全コピーが発生するのは間違いないだろう

339 :デフォルトの名無しさん:2009/07/11(土) 14:30:06
>>336
だからこそUP系は遅いんだろ
>>318で既に出ているけど

340 :デフォルトの名無しさん:2009/07/11(土) 14:30:50
UP系は中でDYNAMICなバッファのプールに対してLOCK_DISCARDと
DrawPrimitiveを必要な数繰り返していると推測できる。

341 :デフォルトの名無しさん:2009/07/11(土) 15:01:39
>>340
その間制御を戻さないならば、CPU時間が減るし、
コピー後に制御を戻すとしても、メモリとコピー時間が無駄なわけだよね。

どう考えてもUP系の方が速くなるはずがないのだけど、
そもそも質問主以外にそんな結果の人はいるんですかね?いないなら不毛な気が・・・。

342 :デフォルトの名無しさん:2009/07/11(土) 15:16:29
昔、散々会社で似たような検証してたみたいだけど
結局、使い方が悪いだけで変わらない(まあ、当然かw)って結論が出てたなw

343 :デフォルトの名無しさん:2009/07/11(土) 15:20:01
だからといって、ある程度までの頂点数ならUP系でもほとんどペナルティーは無いわけだし、
種々のコンテナが使えるヒープメモリで間接的にレンダリング設定できるのはありがたい。
前作ったライブラリではUP系のみで実装した。

もっとも、現在製作中のライブラリは頂点バッファの確保/Lock込みで実装してしまったのでもう関係ない話だが……。

344 :デフォルトの名無しさん:2009/07/11(土) 15:20:38
>>341
たんなるベンチ風に測れば速度は変わらないでしょ。

UP系は同期関数でUPじゃないほうが非同期って考えれば
データ量が多くなってゲームなんかでCPUを使うようになれば差が出てくると思う。

3Dゲームで毎フレーム書き換える頂点データつったらエフェクトくらいしか思いつかないけど。

345 :デフォルトの名無しさん:2009/07/11(土) 15:23:47
2Dゲー作っててもたまに3Dゲーと同じような演出とかやりたいときあって
結局、UP系特化で作ったライブラリって開発してるとゴミになるぞ

346 :デフォルトの名無しさん:2009/07/11(土) 15:37:54
UP系大好きなお前らに悲しいお知らせです。

ttp://msdn.microsoft.com/ja-jp/library/cc627093(VS.85).aspx
>DrawPrimitiveUP と DrawIndexedPrimitiveUP はどうなったのですか。
>D3D10 で廃止されました。

347 :デフォルトの名無しさん:2009/07/11(土) 16:16:24
>>340で正解だな。加えて毎回バッファのプールを再作成していたような。
ロックで遅くなるってヤツは、メモリアクセス中にCPUとGPUがバッティングしたらどうすんの。
UP系だって結局中で同じことをせざるを得ない。UP系が未来の技術でない限りは。

しっかし100レス近くも費やす内容なのかねぇ

348 :デフォルトの名無しさん:2009/07/11(土) 16:25:30
>>347
まあ、とんちんかんなベンチレポとそれに賛同したり火消ししたりが延々と続いたからな。
ソースをさらしてれば話は早かったんだが。

349 :デフォルトの名無しさん:2009/07/11(土) 16:48:56
>>346
やっぱ、意味ないよねw

350 :デフォルトの名無しさん:2009/07/11(土) 16:59:16
>>344
変わらないならOKでしょ。むしろ速くなるっていうからさ。
まー質問主というより、無条件で賛同しちゃっている人が悪いな。

351 :デフォルトの名無しさん:2009/07/11(土) 19:25:56
自演だろ

352 :デフォルトの名無しさん:2009/07/11(土) 20:55:16
オンボ環境なら俺らが思ってるとおりの速さ順で、
GeForce9600GT下なら逆転する
って言ってるのだから、何かしらあるんだろ
面白い事象だと思うがねー

353 :デフォルトの名無しさん:2009/07/11(土) 21:04:14
それじゃあ俺クロシコの9600GT入れてるんですけどまずいっすねえ

354 :デフォルトの名無しさん:2009/07/11(土) 22:05:35
>>352
さすがにもう来ないでくれ

355 :デフォルトの名無しさん:2009/07/11(土) 22:20:58
結局のところ逆転現象が起こる理由について誰も指摘できないわけか

356 :デフォルトの名無しさん:2009/07/11(土) 22:30:09
ソースもexeもなしで何をどう説明できるんですか。

357 :デフォルトの名無しさん:2009/07/11(土) 22:30:39
だから言ったろうに、端からチラ裏レベルの情報なんだから相手にする必要なし

ソースコードも出せない怪しげな情報まき散らされると、
まともな初心者さんに迷惑なんですがねぇw

358 :デフォルトの名無しさん:2009/07/11(土) 22:35:53
みんなソースを出せと平気で言うけど
そんな簡単に出せるもんかね
誰も、使い捨てのテストプログラム作ってる訳じゃないでしょ
そこは、非難する部分じゃない

359 :デフォルトの名無しさん:2009/07/11(土) 22:40:48
>>358
三角プリミティブ表示にDirectDraw使ったら、D3Dと変わらなかったよ。
ソースは出せないけど、コードは絶対間違ってない!
なんでこんな結果になるか説明して。環境?もちろん俺環境だお!

360 :デフォルトの名無しさん:2009/07/11(土) 22:41:43
なんでもいいけどさあ
あんまり初心者っぽくない人多いよね

361 :358:2009/07/11(土) 22:45:21
>>359
同じ現象になる使い捨てのテストプログラム作って
そのソースとEXEをアップしろよ

362 :デフォルトの名無しさん:2009/07/11(土) 22:51:41
色々な要因が絡んでる場合、うまく抜粋してソース出せるとは限らんしな
それなりの報告とそれなりの信ぴょう性がありゃとりあえず「本当だとして」アドバイスするよ
それが気にくわないならレスしなきゃいい

363 :デフォルトの名無しさん:2009/07/11(土) 22:52:40
>>361
簡単に言わないでください。非難…批難イクナイ!!
ボクの計測結果ならいくらでも出します。ほらDirectDrawの方が速くなりました
なんでですか!

…という流れだな

364 :デフォルトの名無しさん:2009/07/11(土) 22:55:38
いずれにしろDirectX10ではなくなった。
DirectX11で復活することもないだろう。
過去のAPIの事はもういいじゃないか。

今からエンジン作るって人がDirectX9なんて選択しないし。

365 :デフォルトの名無しさん:2009/07/11(土) 22:56:48
後はゲ製でどうよ?IDもあるし
ttp://pc11.2ch.net/test/read.cgi/gamedev/1234296058/

遠慮する気があるなら質問者から移動してくれ
マジで機能しねぇぞ初心者スレがw

366 :デフォルトの名無しさん:2009/07/11(土) 23:22:10
別に他の質問のやりとりもあるし>>325-326
なんで機能しなくなるのかわからん

367 :デフォルトの名無しさん:2009/07/11(土) 23:39:48
正直流れ速いと質問しづらいよ

368 :デフォルトの名無しさん:2009/07/11(土) 23:41:25
>>364
え?2ヶ月前からDX9やり始めたんですけどDX10にしといた方がいいのかな?
持ってる本がDX9用だったんでつい・・・

369 :デフォルトの名無しさん:2009/07/11(土) 23:45:00
>>368
もちろん最先端を勉強するとかいう目的ならDX10や11のほうが良い
が、実用品を作る(売る同人ゲームとか)目的なら、古い枯れた技術のほうが良い
そもそも10にしたら、XPユーザー全切りだぜ?
過去のAPIの事は〜とか言っちゃう阿呆は気にしないでいいよ。このスレのタイトルすら読めないみたいだし

370 :デフォルトの名無しさん:2009/07/11(土) 23:46:10
しっかしとってつけたような質問だな

371 :デフォルトの名無しさん:2009/07/11(土) 23:50:44
10でも9でも好きなほうを使えばいい。
どっちみちWindows7が浸透するまで3年くらいはかかるだろうし。

372 :デフォルトの名無しさん:2009/07/11(土) 23:51:20
いくら自己レスでも、初心者にDirectX11の勉強を勧ってすげぇな

373 :デフォルトの名無しさん:2009/07/11(土) 23:52:03
そうだな・・・まあ興味本位でだから問題ないか
ところでボーンのアニメーションを作ってみたいんですけど
ID3DXAllocateHierarchy *p_AlllocHrachy;
ってやってD3DXLoadMeshHierarchyFromXで渡すとエラー出るんですけどなんでですか?
まさかこの辺は自分で作るんですか?

374 :デフォルトの名無しさん:2009/07/11(土) 23:59:58
そうだよ

375 :デフォルトの名無しさん:2009/07/12(日) 00:02:05
了解
調べてやってみます

376 :デフォルトの名無しさん:2009/07/12(日) 00:04:15
DirectX9を最初から勉強するならDirectX10を
最初からやるほうがはるかに簡単だけどな。

DirectX9は細かいルールを覚えていくのが面倒くさい。
一般に公開するなら断然DirectX9だけど。

377 :デフォルトの名無しさん:2009/07/12(日) 00:23:50
パーティクルの件でお騒がせしているものです
再現コードができましたのでUPしておきました

ttp://www1.axfc.net/uploader/File/so/26949
パス: particle
です。

中にソースとEXEが入っています。
描画方法をクラスでわけてあり、TypeAがUPを使った方。TypeBがロックして書きこむほうです。

起動するとそれぞれで1000回ほど描画を行い、それぞれのかかった時間をダイアログで表示します。
(1)がUP系、(2)がロックです。

GF9600GTでは下記の結果になります。なぜか後者のほうが断然遅い…。
(1) 2641 ms
(2) 4918 ms

きっとTypeBのほうに何か誤りがあるのだと思うのですが、アドバイスいただけると幸いです。
ちなみに>>328になるようにコードを書き直すと、だいたい同じくらいの速さになります。

378 :デフォルトの名無しさん:2009/07/12(日) 00:27:52
キーワードが正しくありません

379 :デフォルトの名無しさん:2009/07/12(日) 00:30:15
>>378
初心者スレ荒らして楽しい?ほんとに楽しい?

380 :デフォルトの名無しさん:2009/07/12(日) 00:41:44
マジネタだったのか

381 :デフォルトの名無しさん:2009/07/12(日) 01:01:27
MobilityRadeon9700だけど、
(1) 11849 ms
(2) 11959 ms

こっちは、ほぼ推測どおりの結果だね。



382 :デフォルトの名無しさん:2009/07/12(日) 01:03:57
エラー: このリンクは無効です。

が出るけど荒らし認定されるのかしら

383 :デフォルトの名無しさん:2009/07/12(日) 01:05:06
>>382
>>379

384 :382:2009/07/12(日) 01:06:21
試しにリロードしたら早速レスついているし
こいつはずっと張り付いているんだろうか…

385 :デフォルトの名無しさん:2009/07/12(日) 01:57:02
>>381は自演か

386 :デフォルトの名無しさん:2009/07/12(日) 02:15:06
つながりにくいんじゃない?
パスは通ったけど俺も全然ダウンロードできない。

387 :デフォルトの名無しさん:2009/07/12(日) 02:19:26
>>377
WRITEONLYで作った頂点バッファに対して読み取りアクセスしてるから遅いんだよ。
そこを修正したら、頂点バッファの方が速くなったよ。

388 :デフォルトの名無しさん:2009/07/12(日) 03:49:19
>>377
移動してよ…

389 :デフォルトの名無しさん:2009/07/12(日) 08:33:53
>>387
ありがとうございます。修正ができました。
代入しかしていないつもりでしたが、+=が実質参照していることに気が付けました。
WRITEONLYでも「読める」んですね…。

長々失礼しました。
一応言っておきますが、変なあおりレスとかはつけてません。こちらは質問させていただいている立場ですから。

390 :デフォルトの名無しさん:2009/07/12(日) 08:48:16
389です。
気になったので、D3DUSAGE_WRITEONLYの説明を調べてきました。

http://msdn.microsoft.com/ja-jp/library/cc324365.aspx
>この能力を使って作成された頂点バッファからの読み出しは失敗する

http://msdn.microsoft.com/ja-jp/library/dd188510.aspx
>このフラグを使用する頂点バッファからの読み出しでは、メモリ アクセス時間が非常に低速になることがある

どっちだよ!といった感じですが、結果を見るに後者のようですね。

391 :デフォルトの名無しさん:2009/07/12(日) 08:57:10
そもそもVRAMへのアクセスはAGPだと書き込みに対して読み込みが劇的に遅い。
PCIeで改善が図られているが、メインメモリに比べればやはり遅いのでやるべきではない。

392 :デフォルトの名無しさん:2009/07/12(日) 09:10:33
御苦労さん
結果を報告してくれる質問者はいつでも歓迎だぞ
やっぱム板こそID欲しいよなー

393 :デフォルトの名無しさん:2009/07/12(日) 10:39:41
まともな初心者さんに迷惑なんですがねぇ(笑)
さすがにもう来ないでくれ(笑)
自己レス(笑)
自演か(笑)
エラー: このリンクは無効です。(笑)


ほんとに屑が住み着いてるな
屑はさすがにもう来ないで欲しい

394 :デフォルトの名無しさん:2009/07/12(日) 10:44:29
ファイルが見つかりません

395 :デフォルトの名無しさん:2009/07/12(日) 10:54:08
このスレにクーラーが設置されました。

  r──────────┐
  | l王三王三王三王三l o==ニヽ
  | |王三王三王三王三|  .| //
  ゝ 乂━━━━━━━乂_| `-=
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  / /  / / / /  / /
 / /  /  / /  / /  ゴーゴー

396 :デフォルトの名無しさん:2009/07/12(日) 11:24:06
解決したからファイル消しちゃったのかな?

397 :デフォルトの名無しさん:2009/07/12(日) 12:05:44
DirectXSDKをインストールしてるなら
DirectXのControlPanelでランタイムをDebugRuntimeに設定できる。

そうするとWRITEONLYへの読み込みを行った場合に
ビデオカードやドライバに関係なくDirectX層でエラーを履いてくれるようになる。

世間に出すようなプログラムの場合は必ずDebugRuntimeでの動作確認をしましょう。


398 :デフォルトの名無しさん:2009/07/12(日) 13:12:51
>>394
すいません、解決したということで削除してしまいました
Lockした内容に対し
v.x = 1.0f;
v.x += data[i].x;

という、+=を使っていたのが原因でした

>>397
>DirectXのControlPanelでランタイムをDebugRuntimeに設定できる。
これ知りませんでした。
早速試してみたら、いろいろ細かいエラーが出たのでささっと直せました。
すばらしいですね。入門サイトにはぜひ書いておいて欲しかった…。
良い情報ありがとうございました。

399 :デフォルトの名無しさん:2009/07/12(日) 13:45:37
>>393
ID無いと便利ね(笑)

400 :デフォルトの名無しさん:2009/07/12(日) 14:15:52
ソース見れないが、あれだけ説明したのに、結局UPも何も関係なかったわけかい。
情報を小出しにするからだよ。一番ダメなパターンだろ。
煽られて終わってもしょうがないのに、変に擁護がつくし、逆に俺が煽られるし。

WRITEONLYの線は>>306みて違うと思っていたが、じゃあ実際は別のコードなんだな。

401 :デフォルトの名無しさん:2009/07/12(日) 15:53:17
いい加減にしないとこのスレ潰すから。
鬱だ死のうDirectXスレのように

402 :デフォルトの名無しさん:2009/07/12(日) 16:35:19
>>400
一通り読んだが乙としかいいようがない。終始まともな回答ついているのねぇ。
原因は実装だからソース見ないと分からないってレスも早期にあるし。

403 :デフォルトの名無しさん:2009/07/12(日) 18:46:35
別にスムーズにソースでてきたと思うんだが
>>328の段階でレスが終わって、その後ソース準備をしてたわけだろ?
単に質問者がいないとこで勝手に煽りあいしてkskしてたのを、質問者のせいにするなよ

404 :デフォルトの名無しさん:2009/07/12(日) 18:51:06
再現ソースが出来てから質問しにくるのが最低限の礼儀だろ。
情報を小出しにするとか最悪すぎる。

405 :デフォルトの名無しさん:2009/07/12(日) 18:57:34
>>404
別にそんなことはない。勝手に敷居を上げるなよ。
今回の件だって、蓋を開けてみれば、
動的バッファを扱う上でFAQと言えるべきものだった。
個人的には、ソースなんか無くても
証言だけでわかってしかるべきと思う。
まあ、全然わからなかった訳だが。

406 :デフォルトの名無しさん:2009/07/12(日) 18:59:52
今回の件WRITEONLYのバッファにREADしてるのが原因なだけだろ。
DebugRuntimeにしてりゃエラーでてたろ。

407 :デフォルトの名無しさん:2009/07/12(日) 19:10:52
>>406
誰一人として「Debugランタイムがなんかエラー吐いてないか?」と言っていないわけで

408 :デフォルトの名無しさん:2009/07/12(日) 19:18:52
もういいよこの話題

409 :デフォルトの名無しさん:2009/07/12(日) 19:20:01
とりあえず次からは>>1にDbugRumtimeについて書いておこうぜ
大抵の問題はあれのログ見ればわかる気がする

410 :デフォルトの名無しさん:2009/07/12(日) 19:30:55
>>405
>>400

411 :デフォルトの名無しさん:2009/07/12(日) 20:29:59
Windows7でもDX9使える?

412 :デフォルトの名無しさん:2009/07/12(日) 20:33:29
DirectX3も動くだろ

413 :デフォルトの名無しさん:2009/07/12(日) 22:24:37
tairanaporigondea)4wyd@)4-4fbweuyq@:s@
表示するときにテクスチャの一部分を選んで貼り付けるにはどうすればいいの?

414 :デフォルトの名無しさん:2009/07/13(月) 00:11:04
UVを適切に設定しろ

415 :デフォルトの名無しさん:2009/07/13(月) 00:17:51
それは頂点に含まれているので固定です。

416 :デフォルトの名無しさん:2009/07/13(月) 01:21:22
描画時に変えられるようにしたいなら、データの時点で変えられるように考慮すべき。

どうしてもプリミティブ情報が確定してからいじりたいというのならシェーダを使う。
(UV座標変更かけるだけならvertex、pixelシェーダどっちでもいいかな?)

417 :デフォルトの名無しさん:2009/07/13(月) 01:27:21
データがXファイルしかありません。モデリングツールは買えないので持ってません。
Xファイル読み込み処理は変えられません。レンダリングステートを設定するだけでなんとかさせてください。

…な予感。


418 :デフォルトの名無しさん:2009/07/13(月) 01:50:51
いや、テクスチャステージステートで変えられるし
散々既出だよ

419 :デフォルトの名無しさん:2009/07/13(月) 08:31:19
    ┏━━━━━┓          ┏━━━━━┓
    ┃┌─┬─┐┃          ┃┌─┬─┐┃
┏━┛│  │  │┗━┓  ┏━┛│  │  │┗━┓
┃┌─┼─┼─┼─┐┃  ┃┌─┼─┼─┼─┐┃
┃│  │  │  │  │┃  ┃│○│  │  │  │┃
┃├─┼─┼─┼─┤┃  ┃├─┼─┼─┼─┤┃
┃│  │  │  │  │┗━┛│○│●│  │  │┃
┃└─┼─┼─┼─┼─┬─┼─┼─┼─┼─┘┃
┗━┓│○│○│○│○│○│●│  │  │┏━┛
    ┃└─┴─┼─┼─┼─┼─┼─┴─┘┃
    ┗━━━┓│●│●|●│○│┏━━━┛
            ┃├─┼─┼─┼─┤┃
    ┏━━━┛│  │●│●│○│┗━━━┓
    ┃┌─┬─┼─┼─┼─┼─┼─┬─┐┃
┏━┛│  │  │  │  │●│○│○│○│┗━┓
┃┌─┼─┼─┼─┼─┴─┼─┼─┼─┼─┐┃
┃│  │  │  │  │┏━┓│●│  │  │  │┃
┃├─┼─┼─┼─┤┃  ┃├─┼─┼─┼─┤┃
┃│  │  │  │  │┃  ┃│●│●│●│  │┃
┃└─┼─┼─┼─┘┃  ┃└─┼─┼─┼─┘┃
┗━┓│  │  │┏━┛  ┗━┓│  │  │┏━┛
    ┃└─┴─┘┃          ┃└─┴─┘┃
    ┗━━━━━┛          ┗━━━━━┛

Next:○

420 :デフォルトの名無しさん:2009/07/13(月) 08:37:57
    ┏━━━━━┓          ┏━━━━━┓
    ┃┌─┬─┐┃          ┃┌─┬─┐┃
┏━┛│  │  │┗━┓  ┏━┛│  │  │┗━┓
┃┌─┼─┼─┼─┐┃  ┃┌─┼─┼─┼─┐┃
┃│  │  │  │  │┃  ┃│○│  │  │  │┃
┃├─┼─┼─┼─┤┃  ┃├─┼─┼─┼─┤┃
┃│  │  │  │  │┗━┛│○│○│  │  │┃
┃└─┼─┼─┼─┼─┬─┼─┼─┼─┼─┘┃
┗━┓│○│○│○│○│○│●│  │○│┏━┛
    ┃└─┴─┼─┼─┼─┼─┼─┴─┘┃
    ┗━━━┓│●│●|●│○│┏━━━┛
            ┃├─┼─┼─┼─┤┃
    ┏━━━┛│  │●│●│○│┗━━━┓
    ┃┌─┬─┼─┼─┼─┼─┼─┬─┐┃
┏━┛│  │  │  │  │●│○│○│○│┗━┓
┃┌─┼─┼─┼─┼─┴─┼─┼─┼─┼─┐┃
┃│  │  │  │  │┏━┓│●│  │  │  │┃
┃├─┼─┼─┼─┤┃  ┃├─┼─┼─┼─┤┃
┃│  │  │  │  │┃  ┃│●│●│●│  │┃
┃└─┼─┼─┼─┘┃  ┃└─┼─┼─┼─┘┃
┗━┓│  │  │┏━┛  ┗━┓│  │  │┏━┛
    ┃└─┴─┘┃          ┃└─┴─┘┃
    ┗━━━━━┛          ┗━━━━━┛

Next:●

421 :デフォルトの名無しさん:2009/07/13(月) 14:13:26
シェーダーって何なんですか?
つまり受け取ったデータをどういう風に加工して画面に出力するかっていう
関数の一種なんですか?

422 :デフォルトの名無しさん:2009/07/13(月) 14:26:09
>421
このページ読むとわかりやすいよ
ttp://marupeke296.com/DXPS_No1_WhatIsProgrammableShader.html

423 :デフォルトの名無しさん:2009/07/13(月) 15:23:08
ありがとうございます
あとシェーダーを書いたとしてGPUによって
表示が違うとかという問題は起こるのでしょうか?

424 :デフォルトの名無しさん:2009/07/13(月) 15:29:50
もちろん起こる

それにシェーダーをコンパイルしたビデオチップが違うと
同じPCでも表示結果が変わったりする

425 :デフォルトの名無しさん:2009/07/13(月) 15:34:57
>>424
それはない。
いちいち突っ込まれることを
書くから荒れる。

426 :デフォルトの名無しさん:2009/07/13(月) 15:36:01
ちゃんと作れば同じになるな

427 :デフォルトの名無しさん:2009/07/13(月) 15:38:27
そうですか
ありがとうございました
シェーダーに挑戦してみます

428 :デフォルトの名無しさん:2009/07/13(月) 15:49:38
>>425
いや、おれも変わらないと思うんだけど
なぜか変わるんだよね
解るなら説明してくれない?

PC-AとPC-Bで開発してます
まず同じプログラムからPC-AとPC-Bで作った実行結果を比べると
テクスチャの浮動少数の精度のせいなのか微妙に結果に誤差がでます
ただし
PC-Aで作成した実行ファイルをPC-Bで動かした場合
実行結果はPC-Aで確認できるものと一緒
PC-Bでコンパイルしなおすと出来上がる実行結果ははPC-Bのものになる
逆の場合同じ

なんで?

429 :デフォルトの名無しさん:2009/07/13(月) 15:53:32
同じ奴じゃあるまいな

430 :デフォルトの名無しさん:2009/07/13(月) 15:54:21
Direct3Dはビデオカードによって出力結果が変わるのは常識なのに、
同一だと思っている人間がいることに驚きだ。


431 :デフォルトの名無しさん:2009/07/13(月) 15:55:09
Utilities\bin\x86\psa.exe
Utilities\bin\x86\fxc.exe
のバージョン違いかな?

432 :デフォルトの名無しさん:2009/07/13(月) 15:55:31
シェーダーってどうデータを渡して加工するかだけだから
コンパイルは関係なくね?

まあ精度の点は知らんしGPUそんなにいろいろないからわからないけど

433 :デフォルトの名無しさん:2009/07/13(月) 15:59:36
ラデで問題ないものがゲフォで変だったことはあるな
結局>>426だったのだけど、本当に見つかりづらかった

434 :デフォルトの名無しさん:2009/07/13(月) 16:01:20
変わるのはシェーダのバイナリではなく、
レンダリング時のピクセルの状態

435 :デフォルトの名無しさん:2009/07/13(月) 16:04:57
>>430
だから
PC-Aで作った実行ファイルを
PC-Bで動作させた場合に動作がPC-Bに準拠してくれるなら納得なんだけど
なぜか動作はPC-Aで動かした場合と同じになる

これをPC-Bでコンパイルしなおすと
出来上がる実行ファイルはPC-Aのもと違った動作をする

この実行ファイルをPC-Aに持っていくと
動作はPC-Aに準拠したものではなくPC-Bで動作していたときと一緒になる

シェーダーはコンパイル済みじゃなくて.fxファイルに書いてある

いまいち納得できないんだけど

436 :デフォルトの名無しさん:2009/07/13(月) 16:13:31
PC-AとPC-BにインストールしてるSDKのバージョンは?
特にpsa.exeのバージョン

437 :デフォルトの名無しさん:2009/07/13(月) 16:14:40
シェーダー関係ないのでは?
同じライブラリをリンクしてる?

438 :デフォルトの名無しさん:2009/07/13(月) 16:16:39
>>435
fxファイルをコンパイルして出来たエフェクトオブジェクトを
D3DXDisassembleEffectで逆アセンブルして、diffを取ってくれ。
双方に違いがないようなら、話を進めよう。


439 :デフォルトの名無しさん:2009/07/13(月) 22:08:10
D3DXのランタイムのDLLが異なるだけだろ。
それをビデオカードのせいだと考える思考回路が、あまりにも馬鹿馬鹿しい。

440 :デフォルトの名無しさん:2009/07/13(月) 22:17:49
お前らさ、なんで先日の質問者の(悪い部分だけを)真似した嘘質問にまともにレスしてるの?
からかわれてるだけだろ

441 :デフォルトの名無しさん:2009/07/13(月) 22:24:18
元々こんな質問ばっかりだぞ?
前はまだ自浄能力があったけど

442 :デフォルトの名無しさん:2009/07/13(月) 22:29:40
自浄能力・・・?

443 :デフォルトの名無しさん:2009/07/14(火) 10:35:50
^2

444 :デフォルトの名無しさん:2009/07/15(水) 22:56:27
SDK2008Nov入れてるんですけど、DirectPlayってなくなったんですか?
ヘッダがみつからないんですが.....

ネットワーク関係の機能ってどこにあるんですか?

445 :デフォルトの名無しさん:2009/07/16(木) 00:12:12
WinSock

446 :デフォルトの名無しさん:2009/07/16(木) 00:39:52
8のSDKからヘッダだけひっこぬけばよくね?
DirectPlayは8で終了だっけ?
サポートとか心配ならおとなしくWinSockとか使えって話なんだろうが
セッションとか考えるのだるいし音声セッションとかかなりめんどいし
UPNPポートマッピングとか自作するのは資料少なくてかなり泣けるのでまじおすすめしない
ただし、WinSockでDirectPlay並のものが実装できるようになるとかなりスキルあがるよ
時間が余ってるならチャレンジしてもいいかもしらん
ただ、あくまでゲームつくるのが目的ってなら時間もったいなす
DirectInput8だっていまだに使われまくってるから
DirectPlay使ったっていいじゃない
と思わなくもないが、否定派が多い木がします

447 :デフォルトの名無しさん:2009/07/16(木) 01:00:06
DirectPlayはいまいち中途半端な感じがしたが・・・
ロビーサーバーがLinuxとかでもちゃんと通信できたっけ?

448 :デフォルトの名無しさん:2009/07/16(木) 03:05:43
今だったらboost.asioを使うのがいいのかな

449 :デフォルトの名無しさん:2009/07/16(木) 07:33:12
DirectShowも消えたしなー

450 :デフォルトの名無しさん:2009/07/16(木) 07:35:11
消えたんだw何になったの?

451 :デフォルトの名無しさん:2009/07/16(木) 07:37:06
DirectShowは消えたのではなく、Platform SDK入りをした。

452 :デフォルトの名無しさん:2009/07/16(木) 08:02:42
DirectShowの設計はかなり酷い
ソースをメモリから転送するだけでソースフィルタから書けってどんだけ

453 :デフォルトの名無しさん:2009/07/16(木) 08:15:42
阿良々木 暦のプログラマブルコントローラーの配線図

阿良々木 暦
「絶望した…。自分の配線図でさえも、きっちりし過ぎて何が何だか分からないことに絶望した…。」

阿良々木 暦の変直切り替えは、キハ110系と同様、自動で最適なタイミングで切り替えていきますので、
かなり複雑な電子制御方式であり、プログラマブルコントローラーで自動的にアイドル指令を出すような設計です。

454 :デフォルトの名無しさん:2009/07/16(木) 08:16:30
>>449

昇格じゃん

455 :デフォルトの名無しさん:2009/07/16(木) 15:29:03
市販のゲームって.xファイルとかが置いてなくてアプリケーション内に組み込んであるじゃないですか
あれどうやってやるんですか?

456 :デフォルトの名無しさん:2009/07/16(木) 15:36:42
いくらでもやりようはあると思うが。
リソースに入れて一連のAPIで読みだしてもいいし。

457 :デフォルトの名無しさん:2009/07/16(木) 15:49:40
リソースに入れるにしろxファイルは使ってないわな

458 :デフォルトの名無しさん:2009/07/16(木) 15:59:20
普通は自前のオリジナルフォーマット使うだろう。
Xファイルは悪くは無いがいかんせん古い。
今は物理データやコリジョンデータやシェーダーパラメーター埋められないとなー。

459 :デフォルトの名無しさん:2009/07/16(木) 16:20:00
時代はVRML

460 :デフォルトの名無しさん:2009/07/16(木) 16:31:43
Xファイルが有用だとは言わないが、
テンプレートを追加すればいくらでも
カスタムデータを埋め込むことは可能なんだが、
埋められないとか言う前に仕様ぐらい確認して欲しいところだ。

461 :デフォルトの名無しさん:2009/07/16(木) 16:42:55
>>460
あんなのに埋めこんでどーする
出力と入力を自前で書くハメになるから、それなら結局自前フォーマットで構わん

462 :デフォルトの名無しさん:2009/07/16(木) 16:57:08
デバイス->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
これやるとテクスチャとテクスチャの隙間が白く見えるようになってしまった。どうして?

463 :デフォルトの名無しさん:2009/07/16(木) 17:05:53
>>461
よくわからない理屈だな
結局、その主張に
なにか根拠や理由がある訳じゃないんだね

464 :デフォルトの名無しさん:2009/07/16(木) 17:11:44
というかあの質問は初心者のものだろ?
つまりexeファイルだけ出力させてスッキリさせたいって話であって
Xファイルの仕様云々じゃないと思うけど

465 :デフォルトの名無しさん:2009/07/16(木) 17:13:48
>>461
有用かどうかはさておき、Xファイルの仕様として追加できると言ってるのに、
埋め込んでどうするとか意味不明なんだけど。

466 :デフォルトの名無しさん:2009/07/16(木) 17:19:35
質問者は、「とか」って言ってるからxファイルに限らないのだろう

467 :デフォルトの名無しさん:2009/07/16(木) 17:58:04
だよなぁ ぽまいら脱線しすぎなんだよ
モデルファイルとか音声ファイルをEXEの中に入れてしまいたい系の質問じゃないのか?




468 :デフォルトの名無しさん:2009/07/16(木) 17:58:23
Xファイルに3Dデータを追加できるって主張は、
テキストファイルに3Dデータを追加できるって主張とほぼ同義だろ

Xファイルを使うことが目的でない限り、何の意味もないわ

469 :デフォルトの名無しさん:2009/07/16(木) 18:14:41
まあリソース埋め込みでいいのなら、カスタムリソースでググればいいかな。
使うのはFineResource、LoadResource、LockResource

470 :デフォルトの名無しさん:2009/07/16(木) 18:44:16
>Xファイルは悪くは無いがいかんせん古い。
>今は物理データやコリジョンデータやシェーダーパラメーター埋められないとなー。

単にこれがアホな発言だというだけ。
わざわざデータを入れることに意味があるかどうかの是非に、話をすり替える必要はない。
これで無知を晒す前に確認することを学んだのならそれでいい。

471 :デフォルトの名無しさん:2009/07/16(木) 18:51:38
まあXFileまわりも
せっかくDirect3Dのコーポネントなら、
D3Dのリソースを直でシリアライズするような
機能があってもよかったと思うな。
なんだか知らんが、MSがRMと一緒に
即切りしやがったからな。

472 :デフォルトの名無しさん:2009/07/16(木) 19:01:50
Xファイルは使わないとして、
初心者は何でボーンの木構造やアニメーション情報をやり取りすれば良いの?

素人の俺は、ToyStudioみたいなのにするのかなと想像してる

473 :デフォルトの名無しさん:2009/07/16(木) 19:09:50
そもそもモデリングソフトは何を使用しているのかという問題がある。
まともにやろうとすると覚悟が必要な金額になる。

474 :デフォルトの名無しさん:2009/07/16(木) 21:21:30
とりあえず趣味のレベルだからメタセコイアで
XSIはちょっと重くて無理

475 :デフォルトの名無しさん:2009/07/16(木) 21:31:43
自分のゲームにどうやってモデリングデータを持って行くか話してる時に
そのソフトを同列に書くってどういう事?
重いとかそう言う事じゃねーだろ

476 :デフォルトの名無しさん:2009/07/16(木) 21:35:35
うるさいな

477 :デフォルトの名無しさん:2009/07/16(木) 21:54:27
実際個人で趣味程度につくるぶんにはメタセコ程度が価格的に限界でつ
別にCGやりたいわけじゃなくてあくまでゲームつくりたいだけだからなー
メタセコにはモーション作る機能追加してほしいぜ

で、Xファイルダメとか言ってるやつは実際どうしてるのかくらい書いてくれないと
参考にもならないおっおっお

478 :デフォルトの名無しさん:2009/07/16(木) 22:00:48
初心者がツール名をあげて、話を誘導するのかと思ったが
ただの厨だったでござる


同じメタセコユーザーなので、MIKOTOやkeynote等のファイルリーダーを
作るとか、既にあるなら知りたかったな

479 :デフォルトの名無しさん:2009/07/16(木) 22:05:32
どーでもいいけどファイル仕様で騒ぐなよ
ここ初心者スレよー
初心者には難しくてわからんよー


いや俺なんだけどね
それよりさあID3DXAllocateHierarchyまわり面倒クセー
やっぱりアニメーションは自分で何とかしようかなあ・・・

480 :デフォルトの名無しさん:2009/07/16(木) 22:19:24
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J <やっぱりアニメーションは自分で何とかしようかなあ・・・
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
なんというループ

481 :デフォルトの名無しさん:2009/07/16(木) 22:24:22
>>474
メタセコイアもXSIも独自形式で書き出すプラグインとか作るのですか?

482 :デフォルトの名無しさん:2009/07/16(木) 22:25:14
昔アニメーションを別ファイルに書き込んでそれを読み込んで
手足を配置って方法取ってたけどいろいろめんどくさくてやめた

483 :249:2009/07/16(木) 22:27:59
>>251
レスめちゃくちゃ遅れてすいません
自分でいろいろ試してみました。
1.StretchRect
 pSourceSurfaceにIDirect3DDevice9::GetBackBufferで取得したサーフェイスを指定
 pDestSurfaceにCreateOffscreenPlainSurfaceで作ったサーフェイスを指定
 領域は二つともNULL、フィルタはD3DTEXF_NONE
 →D3DERR_INVALIDCALLが返る

2.pDestSurfaceをCreateRenderTargetで作ったサーフェイスに変える
 転送先のサーフェイスは上記のメソッドで作ってはいけないようだったので。
 →CreateRenderTargetを実行時に強制終了
 CreateRenderTarget(w, h, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, 0, true, &lpDestSurface, NULL)

3.StretchRectではなくGetRenderTargetDataを使う
 →何とかコピーに成功

でもStretchRectと比べて制限が多いですし、できればStretchRectの方を使いたいです。
なぜCreateRenderTargetで強制終了するんでしょうか?何かおかしな指定してるんでしょうか・・

484 :デフォルトの名無しさん:2009/07/17(金) 03:04:45
デバッグランタイムにすれば、原因わかるんじゃないの
失敗するときは、大抵ログ吐いてくれる

485 :デフォルトの名無しさん:2009/07/17(金) 03:43:44
サンプルを落としてコンパイル→当然成功
少し書き加える→エラー
書き加えたところを削除して元に戻す→未解決の外部シンボルが大量に

 ふ ざ け ん な

何で元に戻したら悪化するんだよ糞が・・・

486 :デフォルトの名無しさん:2009/07/17(金) 06:12:34
>>485
原因お前だろw

487 :デフォルトの名無しさん:2009/07/17(金) 06:42:38
やっとできた・・・
追加の依存ファイルに追加してなかったのが原因か・・・
これならだいぶ前にやったはずのに・・・
でもとりあえずコンパイルできるようになってよかった
8時間ぐらいかかったけどw
しかし一度エラーが出たら元に戻してもエラーが出るというのは謎だ

488 :デフォルトの名無しさん:2009/07/17(金) 07:03:23
>>487
どう考えても自分が原因なのにうるさい

489 :デフォルトの名無しさん:2009/07/17(金) 09:40:02
Xファイルを自前の形式に変換してゲーム中に表示させたいので質問です。

AnimationKeyの番号が0で回転を表しているのですが
floatが四つ並んでいます。
どうやら調べるとクオータニオンを使って変換するらしいのですが
xyzwでクオータニオンってDirectXの関数で作れますか?
幾ら調べても見逃しているのか見つかりません。

また他にもframeに番号1(拡縮)と2(移動)があるのですが
これ 拡縮行列x回転行列x移動行列の結果を影響のある頂点にかければいいのでしょうか?

490 :デフォルトの名無しさん:2009/07/17(金) 09:43:24
d3dxのクオータニオン構造体あるだろ
あれの要素がxyzwだからそのまま放り込めばおk

491 :489:2009/07/17(金) 09:50:27
盲点でした…。
クオータニオンってもっと複雑な物かと思ったいたら
中身はxyzwしかなかったのですね…。

ありがとうございます。

492 :デフォルトの名無しさん:2009/07/17(金) 10:50:30
盲点でもなんでもねえ

493 :デフォルトの名無しさん:2009/07/17(金) 11:02:59
>>483
StretchRectはさまざまな制限があるけど、MSDNは確認した?
めくら撃ちしたって時間の無駄だよ。

拡大・縮小がダメな場合もあるから領域指定がNULLなのも怪しい。
ちゃんと動くまではちゃんと指定してあげること。

494 :デフォルトの名無しさん:2009/07/17(金) 15:02:08
DirectX関係ないな

495 :デフォルトの名無しさん:2009/07/17(金) 15:03:10
あ、ごめん、リロードしてなかった

496 :デフォルトの名無しさん:2009/07/18(土) 16:33:32
スキンメッシュで手とか足のボーンの位置とか傾きを取得するにはどうしたらいいですか?

497 :デフォルトの名無しさん:2009/07/18(土) 16:37:24
該当フレームの行列を確認すればいい

498 :デフォルトの名無しさん:2009/07/19(日) 14:09:51
頂点データを取得したいんですが
D3DXLoadMeshFromXでLPD3DXMESH *ppMeshを取得して

DWORD FVFSIZE;
LPDIRECT3DVERTEXBUFFER9 ppVB;
BYTE *pointVec;
ppMesh->GetVertexBuffer(&ppVB);
FVFSIZE=D3DXGetFVFVertexSize(ppMesh->GetFVF());
ppVB->Lock(0,0,(void**)&pointVec,0);
とやってこのあとどうすれば頂点データを一つずつ取得できますか?
FVFSIZEの分だけpointVecに足してやればいいんでしょうか?

499 :デフォルトの名無しさん:2009/07/19(日) 19:02:25
フォーマット通りに並んでいるだけなんだから、
順番に取り出していけばいいだけ。

500 :デフォルトの名無しさん:2009/07/19(日) 20:02:19
DirectX9のSDKで最新はどれですか?

501 :デフォルトの名無しさん:2009/07/19(日) 23:39:52
ぼくしょうがくせいだけど
それはDirectXデベロッパーセンターにいけばわかることくらいわかるよ

502 :デフォルトの名無しさん:2009/07/21(火) 01:14:33
Xファイルのデータでボーンアニメーションって出来ますか?


503 :デフォルトの名無しさん:2009/07/21(火) 01:51:32
うん

504 :デフォルトの名無しさん:2009/07/21(火) 03:25:35
Xファイルをサービス関数を使わず独自の形式で読み取りたいです。
そこでモーションつきのモデルを読み込みたいのですがうまくいきません。
まずメッシュの頂点データと法線データとUVデータは全て読み込みました。
ちなみにメッシュは1メッシュです。マテリアル等は無視しています。


質問@
「SkinWeights」の項目にそのフレームが影響する頂点とそのウエイトが定義されているのですが
その一番最後に4x4行列があるんですがこれがよくわかりません。
これは親子関係を考慮しつつ各頂点にかければいいのですよね?

質問A
入れ子によって親子関係を定義している部分がありますが
そこにあるFrameTransformMatrixはボーンアニメーションする場合は
一切無視していいのでしょうか?
調べてみるとアニメーションの概念ができる前から存在すると聞きました。

質問B
最後に「AnimationSet」の項目に
ローテーション・スケール・トランスレーションが各フレーム毎にデータがあるんですが
スケール行列xローテーション行列xトランスレーション行列で1つにまとめたあとに
影響する頂点にかければいいのですよね?

質問C
これらの事をしてもときちんと動かないのですが何か抜けている点はあるでしょうか?

505 :デフォルトの名無しさん:2009/07/21(火) 08:26:28
質問@
いいえ
ボーンの行列 = ボーンのオフセット行列 * 親子関係によって積算した後のフレーム行列

質問A
はい
アニメーションとそれは相互排他

質問B
はい

質問C
わかりません

506 :デフォルトの名無しさん:2009/07/21(火) 08:29:55
まずは、スキンメッシュじゃなくて
普通のアニメーションするメッシュが
正しく動作するか確認して

507 :デフォルトの名無しさん:2009/07/21(火) 09:41:17
質問A
相互排他ではありません。
たとえばアニメーションに位置の情報が無い場合は
そこから位置だけを抽出する必要があります。
当然アニメーションに回転が無い場合も回転だけ
そこから抽出する必要があります。

508 :デフォルトの名無しさん:2009/07/21(火) 10:33:35
>>507
その発想はなかった。確かにアニメーションデータに位置の情報がなければ(そんなXファイルつくるなw)引用する必要がでてくるな。

俺は、AのFrameTransformMatrixは「デフォルトポーズ」だと認識してるぜ

509 :デフォルトの名無しさん:2009/07/21(火) 11:49:57
回転と移動と伸縮を別に管理してるとどれか情報がないって事はよくあるけどな
D3DXのはマトリックスしか持ってないんだっけ

510 :505:2009/07/21(火) 14:46:52
>>507
FrameTransformMatrixが相互排他であるかないかは
多分ドキュメント類には記述はなく、未定義だろうから、
DXSDK関連のソースでもみて結論付ける必要があるだろう。

個人的には、>>507は十分わかるんだが
Xfileでアニメーションする際には、必ずFrameTransformMatrixの
分解が必要になる訳で、ちょっとナンセンスかなと思うな。

例えば、フレームの移動が必要ないなら、アニメキーは無しに、
全編を通して固定位置にしたいなら、キーを1つだけ用意する。
これで対応出来るし、こっちの方がスマートだと思う。

511 :デフォルトの名無しさん:2009/07/21(火) 16:55:23
GDIかなんかで5頂点ポリゴン描画すると
http://www.traum-projekt.com/forum/attachments/3748d1027598908-corel-draw-polygon-stern.jpg

真ん中がくりぬかれて描画されますが、
DirectXのDrawPrimitiveで
同じ5頂点を利用してこのような描画って
できますか?

512 :デフォルトの名無しさん:2009/07/21(火) 17:37:42
ステンシルバッファ使えば出来なくもない

513 :デフォルトの名無しさん:2009/07/21(火) 19:08:08
>>511
>真ん中がくりぬかれて描画されますが
は?

514 :デフォルトの名無しさん:2009/07/21(火) 19:17:03
ROPなんてゲーム作るうえで誰も必要としてないから

515 :デフォルトの名無しさん:2009/07/21(火) 19:19:08
XORな描画ステータスあったらいけそう

516 :デフォルトの名無しさん:2009/07/21(火) 19:24:00
わざわざ5頂点でやる意味がわからない

517 :デフォルトの名無しさん:2009/07/21(火) 20:18:54
出来るかどうか聞いてるのに
文句言ってるやつって何なの?

518 :デフォルトの名無しさん:2009/07/21(火) 20:29:30
まぁ文句出る気持ちも分かるけど

>>511
DrawPrimitiveでやるなら、まずテセレーション(面倒だけどネットに情報あり)して三角形に分解後、
それぞれの三角形を塗るかどうか判定(三角形内部から適当に線を延ばし、他の辺と交わる回数が奇数なら描画)
していくしかないね。

しっかしXファイルのことなんてレスつかないだろうから、帰ったらレスしようと思ったら、意外に皆詳しいなw

519 :504:2009/07/21(火) 20:58:41
皆さんありがとうございます
505さんの言うボーンの行列 = ボーンのオフセット行列 * 親子関係によって積算した後のフレーム行列
が何をさすかピンときませんががんばって見ます

520 :デフォルトの名無しさん:2009/07/21(火) 21:06:07
>>517
明らかに馬鹿でウザイから
まず具体的にやりたいことから言えって感じ
詳しく聞くとそんな仕様まったく必要ないのにくだらないもの探してるってオチだと思う

521 :483:2009/07/21(火) 23:43:40
>>493
レスありがとうございます、ですが領域はNULLでもいいみたいです。

CreateOffscreenPlainSurfaceとGetRenderTargetを使ったコードを
そのままCreateRenderTargetとStretchRectを使ったコードにしたら動きました!

しかしこれが最も速く画像を取得する方法なんでしょうか。
GetRenderTargetData→転送先サーフェイスからGetDC、BitBlt
StretchRect→転送先サーフェイスからGetDC、BitBlt
GetRenderTargetDataは遅いそうですが、StretchRectはそれより速いのか分かりません。

522 :デフォルトの名無しさん:2009/07/22(水) 08:55:23
>>512 が早々に適格なこと言ってると思うんだが
まあ実際、面倒ならやらないわ―ってレベルだろ

523 :デフォルトの名無しさん:2009/07/22(水) 12:57:58
D3DXMatrixPerspectiveFovLHのfovyは
http://msdn.microsoft.com/ja-jp/library/cc324601.aspx
このページのfov/2の値をのことでしょうか?
私のプログラムでは,fovyを90度ににすると歪んで見え,
45度にすると普通に見えます.また,SDK付属のサンプル
も45〜60度で設定しているようです.
しかし検索すると
http://www.gamedev.net/community/forums/topic.asp?topic_id=512105
のページのように,fovyはfov/2ではなく,fovを設定すると書かれているページ
に多く出会います.もしfovを設定するのだとすれば,fovyを45度に設定
することは視線から上側の視錐台の角度がたったの22.5度しかないことになって
しまいます.

真相はどうなっているのでしょうか?

524 :デフォルトの名無しさん:2009/07/22(水) 13:29:37
自分の目からディスプレイの上端までと目から下端までの間の角度を測ってみ
90度もある? (あるとしたら、どれだけディスプレイに目を近づけてるんだ)
不自然だから歪んで見えるのでは?

525 :デフォルトの名無しさん:2009/07/22(水) 13:32:37
ちゃんとラジアン角度にしてるか?
D3DXToRadian(90);

526 :デフォルトの名無しさん:2009/07/22(水) 13:42:41
>>525
もちろんしてます.
SDKのサンプルも90度に設定して動かすとやはり歪んで見えます

527 :デフォルトの名無しさん:2009/07/22(水) 15:18:44
>>526
>>524

528 :デフォルトの名無しさん:2009/07/22(水) 21:51:21
質問です。
Xfileを表示してキーボードでそれを動かし、当たりがあったら文字を表示するというプログラムを作ったのですが。
普通に起動させると動作が遅いのですが、メディアプレイヤーを起動している時だけはなぜか動作が速くなります。
なぜこんなことが起こるのか教えてください

529 :デフォルトの名無しさん:2009/07/22(水) 22:07:34
http://cpplover.blogspot.com/2008/09/google-chrome_10.html
これだろ

530 :デフォルトの名無しさん:2009/07/22(水) 22:09:26
timeBeginPeriod メディアプレイヤー
でぐぐってみれば、理由を考察してるサイトがいくつか見つかる

531 :デフォルトの名無しさん:2009/07/22(水) 23:00:12
一応解決しました。貴重な情報ありがとうございました

532 :デフォルトの名無しさん:2009/07/22(水) 23:56:22
3Dモデルを表示するソフトウェアを開発しています。
描画エンジンとしてDirectX9.0のDirect3Dを使おうと考え、
色々調査しているのですが、PCの画面色数が24Bitの場合、正常に動作しません。
Googleで調べた所、いくつかのソフトでは24Bitでは動作不可との記述が見つかりました。
 ttp://postpet.jp/support/v3/manual/win/html/2_32.html
 ttp://mxengine.net-dimension.com/jpn/sub/faq.htm
しかし、MSDNには24Bit動作不可との記述が見当たりません。

質問ですが、
DirectX9.0のDirect3Dウィンドウモードでは、16Bit/32Bit以外の動作は不可でしょうか?
24Bitで動作させる方法(コーディング例)がありましたら、ご教授お願いします。


533 :デフォルトの名無しさん:2009/07/22(水) 23:58:58
ねーよ。
そもそも24Bitの画面モードが選べるような
ビデオカードが現存してた事に驚いた。

534 :デフォルトの名無しさん:2009/07/23(木) 00:00:08
24ってマイナーじゃないの?存在を初めて知った

535 :デフォルトの名無しさん:2009/07/23(木) 00:06:37
>>533
>>534
早速のレスありがとうございます。
実は配布先PCは特殊な環境で16Bit/24Bitのみ選択可、
通常は24Bitで動作しております。

すでに客先で動作しているPCであり、
客先は全国にある為、
インストールの為、画面設定を変更するのは難しいです。

やはり24Bitで動作させるのは難しいのですね。
最悪、DirectXではなく、他の描画ルーチンを使用することも考えています。


536 :デフォルトの名無しさん:2009/07/23(木) 00:13:26
24はVRAMが少量しかなかった時代に
少ないメモリでフルカラー表現するために存在した。
VRAMが豊富になって32Bitが使えるようになったら滅んだ。
24Bitって3Byte単位のアクセスだから速度がすげー遅かったし。

>>535
DirectX7か8のどっちかならいけるはず。
無論速度は度外視な。

537 :デフォルトの名無しさん:2009/07/23(木) 00:14:40
どうせならOpenGLってどうかな?(いや、よくしらんけどw)

538 :デフォルトの名無しさん:2009/07/23(木) 00:43:53
その前にビデオカードの具体的な製品名を明らかにしろよ。
なんでいちいち情報を小出しにするんだ?

539 :デフォルトの名無しさん:2009/07/23(木) 00:46:31
それ大事か?
しかし24なんて使ったことがないから可とも不可ともいいようがない・・・

540 :デフォルトの名無しさん:2009/07/23(木) 00:48:12
D3D9は確かにディスプレイフォーマット24bitは
サポートしてないみたいだけど、
それってFullScreenだけじゃなく
Windowモードもそうなの?


541 :デフォルトの名無しさん:2009/07/23(木) 00:49:54
MatroxのG200とかは24Bitモードあったぜ

542 :デフォルトの名無しさん:2009/07/23(木) 00:51:14
>>540
デバイスの初期化が通らないよ。

543 :デフォルトの名無しさん:2009/07/23(木) 00:53:58
どうやらVoodoo Bansheeあたりも24bitあったみたい。
しかし、Bansheeは良いカードだったw


544 :デフォルトの名無しさん:2009/07/23(木) 01:05:03
ディスプレイモードの列挙が通らなくて強制終了だな
完全にサポートしてないと動かない

545 :デフォルトの名無しさん:2009/07/23(木) 10:02:17
GF2MX400とかも普通に24bitモードあったぞ。
てか、24bitがマイナーだと初めて知ったw
当時、32bitこそ「無駄遣いだなぁ。24bitでフルカラー表現できるのに、なんだこの糞異端ボード」とか思ってた。

546 :デフォルトの名無しさん:2009/07/23(木) 11:25:14
Direct3Dを使わないのが前提なら24bit対応のビデオカードは多い

547 :デフォルトの名無しさん:2009/07/23(木) 11:30:19
でもわざわざ24bitを使う理由ってなに?

548 :デフォルトの名無しさん:2009/07/23(木) 11:35:13
質問者は、個人制作で自宅の24bit環境が普通だと思った
メーカーがどうして用意したかは、上に散々かいてある
昔のPCI

549 :デフォルトの名無しさん:2009/07/23(木) 12:51:38
815あたりの内蔵グラフィック機能だと、32bppが無いんじゃなかったっけ?
16/24しか選択できなくて、3D機能が使えるのは16だけみたいな感じ。

550 :デフォルトの名無しさん:2009/07/23(木) 14:53:47
スパロボのようなゲームを作っているのですが、
マウスで入力するために入力関係に特化したようなサイトとかありますか?



551 :デフォルトの名無しさん:2009/07/23(木) 17:39:07
>>550
言いたいことはわからんでもないけどとりあえず日本語で(ry

552 :デフォルトの名無しさん:2009/07/23(木) 17:42:04
たぶん碁盤の目のようなフィールド上でクリックしたら
コマンドが出るようにとかしたいんだろうけど

DirectXの要素はマウスの座標取得ぐらいしかねえじゃん

553 :デフォルトの名無しさん:2009/07/23(木) 20:33:35
>>551
すいません、要するにスパロボのフィールド画面を作りたいんです
>>552
そうです、まさにそんな感じです

セルの上にマウスを置いたらセルを囲み、右クリック等でコマンドが出る・・等の構成にしたいのです
ゲームのサイト色々見てるのですが、なかなか目的のものが見つからないのですよ
とりあえずマウスの座標取得から始めてみますね

554 :デフォルトの名無しさん:2009/07/24(金) 01:45:36
作ったゲームのテストたのんだ友人の中の一人だけがエラーで止まるので
いったい何が悪いんだと調べてみたらフォント描画が原因だった
\r\nを含んだ文字列描画すると原因不明のエラー警告で落ちる
\r\nを\nにしたらエラーでなくなったが、一体なにが悪いのかよくわかりませんでつた
OSもDirectXランタイムバージョンも他の正常に動作してるPCと同じでつ

555 :デフォルトの名無しさん:2009/07/24(金) 03:42:55
>>554
DirectXとOSのバージョンと描画方法は何ですか?

556 :デフォルトの名無しさん:2009/07/24(金) 07:06:17
プログラム中の文字列の改行コードにCRLFって使った事無いなw
テキストに落とす時は別だけど

557 :デフォルトの名無しさん:2009/07/24(金) 08:30:56
>>554
落ちた1台が例外なんじゃなくて、
他のPCではたまたま動いたってだけの話だろうたぶん

558 :デフォルトの名無しさん:2009/07/24(金) 13:50:58
555は偉いなぁ…真似できん

559 :デフォルトの名無しさん:2009/07/24(金) 17:36:51
質問です
DIRECTXで作られた質の高いフリーゲームってありますか?

560 :デフォルトの名無しさん:2009/07/24(金) 17:47:19
ここはプログラムを作ることに関しての板ですゲームサロンにでもいってください

561 :デフォルトの名無しさん:2009/07/24(金) 17:55:50
プログラマブルシェーダでのSetTextureについて質問です。

D3DXEffect effects[100];
for(int i = 0; i < 100; ++i)
{
effects[i].SetTexture("DecaleTex", textures[i]);
}
と、それぞれのエフェクトにそれぞれ別のテクスチャーをセットするとします。
これで、すべてのエフェクトが予想通りに動いているのは確認済みです。

このときに疑問が湧いたのですが、d3ddevice->SetTexture相当のことはいつ行われているのでしょうか?
1)effect[0]を使って描画
2)effect[0]を使って描画
3)effect[1]を使って描画
4)effect[1]を使って描画
とやった場合、2→3のところで内部的に行われているのでしょうか?
となると
1)effect[0]を使って描画
2)effect[1]を使って描画
3)effect[0]を使って描画
4)effect[1]を使って描画
とやると、d3ddevice->SetTextureのコストという面では2倍コストがかかってしまっているのでしょうか?

そもそも全てのエフェクトにテクスチャをあらかじめセットしてまわっておく。というのは正しいやり方なのでしょうか?
「d3ddevice->SetTextureはなるべく減らすように」と昔教えられたもので
(実際に、パーティクルなどの表示で切り替えまくると遅かったし)
かなり気になっています。

アドバイスいただければと思います。よろしくお願いします。

562 :デフォルトの名無しさん:2009/07/24(金) 21:22:42
DX9ならBeginPassとCommitChanges
DX10ならApply
それ以外に公開情報あったっけ

563 :デフォルトの名無しさん:2009/07/24(金) 21:23:32
質問です。

d3d9.hの読み込みより前に

#define D3D_DEBUG_INFO
を設定することで、デバッグウインドウ上で情報が表示されるということで実践してみたのですが、
どう考えてもおかしな数値が入っているように表示されます。

これは皆さんの環境でそうなのでしょうか?
単なるD3Dの初期化>D3Dデバイスの中身をデバッグウインドウで見る>数値とかがぐちゃぐちゃ
なのですが…。

環境はVS2008Express
Microsoft DirectX SDK (March 2008)
を使っています。

564 :デフォルトの名無しさん:2009/07/24(金) 21:36:20
君のプログラムの文字セットの設定は何だろう?
ちなみにIDirect3DTexture9::NameはLPCWSTRだ。


565 :デフォルトの名無しさん:2009/07/24(金) 21:40:51
マウスをクリックしたとき、どのオブジェクトをクリックしたかというのはどういうコードを書けばよいんでしょうか
それとも、マウスをクリックした時にその地点にオブジェクトがあるかないかを総当りで調べるものなのでしょうか?

566 :デフォルトの名無しさん:2009/07/24(金) 21:55:37
スクリーン座標をsx,syとする。
スクリーン座標の手前(sx,sy,0) 奥(sx,sy,1) を3D空間の座標に変換する
(=3D空間の座標をスクリーン座標にする変換の逆)
2点を結ぶ直線と最初に交差したオブジェクトを選択。

総当りで問題なくOKなら総当り。
総当りでは重いならばケースバイケースで効率的な方法を考える。

567 :デフォルトの名無しさん:2009/07/24(金) 21:57:32
>>566
うおおおおありがとうございます

568 :デフォルトの名無しさん:2009/07/24(金) 22:12:08
>>566
直線だけだと漏れが出ないか?
四角錐じゃないと。

569 :デフォルトの名無しさん:2009/07/25(土) 00:05:32
>>563について自己解決です

オブジェクトのプロパティ名が表示されますが、この値はデバッグのランタイムが有効な場合のみ正確です。リテール ランタイムに対して実行するときは、値は無効です。

とありました。
DirectX Control PanelからUseDebugVersionOfDirect3D9 を選んだところきちんと値が見られるようになりました

570 :デフォルトの名無しさん:2009/07/25(土) 13:52:15
D3DXIntersectを使って当たり判定をしてる人がいましたらご教授願います。
表示した3dモデルに対して現在一体にしか当たり判定が有効になっていません。
複数のモデルに対して当たり判定を有効にするには何か特別な仕掛けをしていますか?

571 :デフォルトの名無しさん:2009/07/25(土) 18:12:35
自分で組め

572 :デフォルトの名無しさん:2009/07/25(土) 20:11:23
まともなゲームならほとんどすべて、
詳細な当たり判定より先におおざっぱで高速な判定をして
比較するオブジェクトの数を減らす。

最終的には、D3DXIntersectだろうが自作だろうが
当たり判定の必要な回数だけ繰り返す。


573 :デフォルトの名無しさん:2009/07/25(土) 21:14:18
レスありがとうございます!

574 :デフォルトの名無しさん:2009/07/27(月) 00:22:28
このスレの70%はゲー専生で構成されているとかいないとか

575 :デフォルトの名無しさん:2009/07/27(月) 01:14:25
そんなことはない。
大学にも行かず浪人にもなれず就職もしない人は実社会では多数派でもないし
ゲーム業界内でも少ないだろう。2流3流大卒がほとんど。


576 :デフォルトの名無しさん:2009/07/27(月) 01:51:48
数学とかそこらは、中学レベルだと感じるな。

577 :デフォルトの名無しさん:2009/07/27(月) 09:42:08
というかそんな高度な知識がなくても組めるし
まあ効率とかを考えるといろいろむずかしくなるけれども

578 :デフォルトの名無しさん:2009/07/28(火) 07:57:06
今、線分とメッシュとの当たり判定を作っています。
中身は線分と三角形との当たり判定を行っているのですが、
そのために必要な三角ポリゴンデータを、
DirectXのメッシュデータから取得する方法がわかりません。

頂点バッファのロックメソッドから、頂点データへの先頭アドレスを取得し
そのアドレスから12byteずつずらしながら、無理やり三角ポリゴン(と仮定したデータ)を取得し
当たり判定させてみましたが、途中から頂点のデータが「3.587e-043#DEN」などと壊れるようです。

ご存じの方がいらっしゃれば、ご教授よろしくお願いします。

579 :デフォルトの名無しさん:2009/07/28(火) 08:08:47
>>578
空間上の特定の点がポリゴンの内包する閉空間状に存在するか(要するに当たり判定)は
計算幾何学の分野で、一応n log nのオーダーで出ることは知られているけど
計算が死ねるのでよしたほうがいい。

大学の研究レベルでやるならともかく、ゲームでやるなら質点同士の運動と考えれば十分なはず。

580 :デフォルトの名無しさん:2009/07/28(火) 08:22:50
ttp://sukima.vip2ch.com/up/sukima026731.jpg

江戸時代の人々はこれで抜けるんなら
ある意味聖人だな


581 :デフォルトの名無しさん:2009/07/28(火) 08:28:13
>>579
レスありがとうございます。
線分と三角形の当たり判定は、テストデータで計算出来ていることは確認しています。
ですので、知りたいのはポリゴンデータの取得なのです。

わざわざレスくださったのに申し訳ないです。

582 :デフォルトの名無しさん:2009/07/28(火) 08:31:38
>>579
すいません、読み違えてました。

Xファイルで入力してるので、問題ないと思っているのですが
無理でしょうか?

583 :デフォルトの名無しさん:2009/07/28(火) 12:25:04
>>578
12byteの根拠は?
頂点データにはxyz以外も含まれていると思うので、12byteではないと思うが。

ID3DXBaseMesh::GetFVFでメッシュのFVFを取得してD3DXGetFVFVertexSizeで
頂点データのサイズを取得するか、ID3DXBaseMesh::CloneMeshFVFを使って
都合のいい頂点フォーマットに変換してから扱うのがいいかと。

584 :デフォルトの名無しさん:2009/07/28(火) 12:59:33
最近DirectXを勉強しはじめました。
初心者丸出しですが、質問させてください。

DirectXで2Dを扱う場合、Spriteを使用する方法と
座標変換済み頂点を使用する方法があると知りました。
また、座標変換済み頂点を使う方が処理が早いという書き込みも
チラっとみたのですが詳しく書かれておらず、把握している程度です。


質問は
@Spriteか座標変換済み頂点のどちらを使用すれば処理が早いか。

ASpriteと座標変換済み頂点の両方の利点・欠点。


よろしくお願いします。

585 :デフォルトの名無しさん:2009/07/28(火) 13:21:14
スプライトというのは、本来のDirectXの姿を隠して
ユーザが扱いやすいようにラップしているだけで、
最終的に頂点を組み立てて描画するのは同じ
ラップしているオーバーヘッドのぶん、処理が遅いかもね

586 :デフォルトの名無しさん:2009/07/28(火) 13:22:42
>>584
D3DXSprite自身が、内部的に座標変換済頂点(rhw)を使ってるんだが、どうよ?

単体の画像を何枚か扱う程度ならこのままでもいいが、小さなチップを大量に描画するようなら
通常の頂点バッファ(Position)を使うことを考えた方がいい。

587 :デフォルトの名無しさん:2009/07/28(火) 13:22:55
DirectXにSpriteなど無い

588 :デフォルトの名無しさん:2009/07/28(火) 13:24:51
D3DXSPRITEなら定数として存在するが、D3DXSpriteなど無い

589 :デフォルトの名無しさん:2009/07/28(火) 13:39:16
>>583
D3DXGetFVFVertexSize( mesh.pmesh->GetFVF() );

として取得したところ、返された数値は12でした。
ですので12byteと判断しているのですが……。
もし不都合があれば教えてください。

よろしくお願いします。

590 :584:2009/07/28(火) 13:50:35
ttp://marupeke296.com/DXG_CreateBorad.html
ttp://marupeke296.com/DXGSmp_No2_2DPoly.html
座標変換済み頂点は、ここの内容を見てます。

>>585
つまり結局は同じ処理をしているという事ですか…


>>586
>通常の頂点バッファ(Position)を使うことを考えた方がいい
通常の…ですか。勉強不足で通常というのがよく分らないのですが
上記のURLにあるコードのような使い方をする場合
「小さなチップを大量に描画」というのは不向きなのでしょうか?


591 :デフォルトの名無しさん:2009/07/28(火) 14:04:27
流体力学研究所とかいうとこを参照してみては?

592 :デフォルトの名無しさん:2009/07/28(火) 15:10:47
>>589
途中から?それって頂点データを超えて取得してるんじゃないの?
GetNumFacesとかGetNumVertices使ってる?

593 :デフォルトの名無しさん:2009/07/28(火) 17:51:19
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
       |                    |
       |                    |
       /    ̄ ̄ ̄ ̄      /_____
       /   また旅に出ます  /ヽ__//
     /               /  /   /
     /  探さないで下さい  /  /   /
    /   ____     /  /   /
   /             /  /   /
 /     光 圀    /    /   /
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/   /   /
のパターンじゃないんだな


594 :デフォルトの名無しさん:2009/07/28(火) 21:15:24
>>592
使用している部分について、ソースをアップしました。
http://www1.axfc.net/uploader/Sc/so/22044

もしよろしければ、ソースをダウンロードしていただいて
見てもらってよろしいでしょうか?

GetNumFaces、GetNumVerticesは、一応数値は取得していますが
実際のところどのようにしてポリゴンとして頂点が格納されているのかが
まだ分かっていません。

595 :デフォルトの名無しさん:2009/07/29(水) 02:52:06
pvertex + fvfsize
らめぇぇぇぇぇ

596 :デフォルトの名無しさん:2009/07/29(水) 02:55:49
あれ?そこだめなの?
俺は
v1=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[0]));
v2=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[1]));
v3=*(D3DXVECTOR3*)(pointVert+FVFSIZE*(indexp[2]));
ってやってるけど問題ないぞ

597 :594:2009/07/29(水) 03:29:12
>>595
試しに
pvertex[*(pindex+i)];と配列でアクセスしたら幸せになりました。
理由はわかりません。

今回わかったことは、頂点バッファ内に「三角形ポリゴン数×3」個の頂点が格納されているわけではないので
インデックスバッファも使ってアクセスしないときちんと読み取れないということでした。
凸凹の大きいモデルを使った場合、ポリゴンの読み間違いが起こると、Hitが抜けなかったり、
本来あるはずない場所でHitが出たりなどという現象が起こるのは当然でしょう。

しかし、今回の問題は読み込んだ数値自体がおかしくなっていたことでした。
明らかにストライドの量がおかしかったんだと思いますが、何が理由かよくわかりません。

>>596
私の環境でも結果は駄目でした。
突き抜けた穴のあいたポリゴンを使用してテストしていますが、
途中でHitが出てしまいます。


本当に助かりました。
協力してくださった方、ありがとうございました。

598 :デフォルトの名無しさん:2009/07/29(水) 03:30:46
(pvertex + 0) の次の頂点は (pvertex + 1)なんだぜ

599 :デフォルトの名無しさん:2009/07/29(水) 03:38:42
poly.v[0] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-2)));
poly.v[1] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-1)));
poly.v[2] = *(Point3D*)((BYTE*)pvertex + fvfsize*(*(pindex+i-0)));
こうするか、
もしくは最初からpvertexをBYTE*で宣言すればOK

600 :594:2009/07/29(水) 03:50:17
>>599
動作確認出来ました。
pvertexがD3DXVECTOR3*型だったから駄目だったんですね。
ポインタのアドレスって、どんな型であろうと変わらないかと思っていました。
ポインタのアドレスを弄るときはchar*なわけですね。

すごく助かりました。
今度C言語の参考書よみなおします。

601 :デフォルトの名無しさん:2009/08/01(土) 02:17:57
初心的質問ですみません。
DirectXを使っているプログラム内でwavを再生させるにはどうすればよいのでしょうか?
ほとんどのところでdmusici.hを使えとなっているのですが、ヘッダーをインクルードしても見あたらないというので調べたところ廃止(?)になったとかで書かれていて
いくつか調べたのですが、ほとんどのところがdmusici.hを使ってでのやり方なので、解らずじまいです。
現在の再生方法をおしえていただけないでしょうか?

602 :デフォルトの名無しさん:2009/08/01(土) 02:21:17
おとなしくDirectSoundを使ったほうがいい


603 :デフォルトの名無しさん:2009/08/01(土) 02:57:27
普通にXAudio2使えよ

604 :デフォルトの名無しさん:2009/08/01(土) 10:26:20
XBox360の市場が壊滅状態でもXAudio2はヤバくないんですか?

605 :デフォルトの名無しさん:2009/08/01(土) 11:15:28
実際のところ、X〜〜 ってどうなんでしょう。
XAudio2って言うほどまともとは思えないんですが。

606 :デフォルトの名無しさん:2009/08/01(土) 12:12:44
失礼します。
directx_mar2009_redist.exeをCドライブにインスコしようとするのですが、
必ず半分ぐらい進んだところでゲージが巻き戻り、結局右端までたどり着かず
途中で終了してしまうのです。一体どういうことなのでしょうか

607 :デフォルトの名無しさん:2009/08/01(土) 13:14:58
炎や爆発、煙などのエフェクトをビルボードを大量に出して
描画しようと思っているのですが、どうすれば高速に描画できますか。



608 :デフォルトの名無しさん:2009/08/01(土) 15:09:40
現状のエフェクトでどんな処理をやっているのかが分からないので、
より高速な方法について答えようにも答えることができません。

609 :デフォルトの名無しさん:2009/08/01(土) 15:38:19
大量に出すのをやめる

610 :デフォルトの名無しさん:2009/08/01(土) 15:43:31
より高速かどうかは置いといて、
最も早いと思われる描画方法を教えてください。




611 :デフォルトの名無しさん:2009/08/01(土) 15:44:56
マジレスすると
視錐台クリップが最重要だな
次にその中に入ってしまったものをまとめて描画だな
あらかじめDrawPrimitiveにぶち込んでしまうとクリッピングされないから
ある程度の塊でおおざっぱな判定でもするといいよ

なんにせよクリップ方法が最重要
これでしっかり省けば余計な最適化いらない場合のが多いよ

612 :デフォルトの名無しさん:2009/08/01(土) 15:46:35
>>610
それはいつでもどこもでネタでもなんでもなく「描画しない」ってのが最速

613 :デフォルトの名無しさん:2009/08/01(土) 16:00:32
>>611
まとめて描画とは、Zsortをして
板ポリ(2ポリ4頂点)×出す量 を毎フレーム描画
ということですか?


>>612
描画しなかったら私のも速くなります。
しかしビルボードをたくさん描画すると重くなるのです。

614 :デフォルトの名無しさん:2009/08/01(土) 16:31:13
やめろよ
また不毛な議論が始まるぞ

せめてどうやってるのかも書かない奴に
答えてどうする

615 :デフォルトの名無しさん:2009/08/01(土) 16:53:11
>>614
カメラ空間でのZ値でZsortして、板ポリ一個一個毎フレーム

逆行列作る
worldViewProjectionMatrix作る
effect->SetMatrix
でセットし

effect->setTechnique
effect->Begin
effect->BeginPass
effect->setTexture
effect->CommitChanges

ここでdeclarationをセットし
DrawIndexedPrimitive((D3DPT_TRIANGLELIST....);
effect->EndPass
effect->end

と普通にやっています。

616 :デフォルトの名無しさん:2009/08/01(土) 16:57:07
>>613
その前にクリッピングそれができないなら気にしなくていい

617 :デフォルトの名無しさん:2009/08/01(土) 17:11:27
>>616
そうですか、今回作るゲームが引いた視点なので
結構、というかほとんど視錐台に入るんですよね…

618 :デフォルトの名無しさん:2009/08/01(土) 17:23:29
特殊な条件、爆発の煙や湿原の霧でパーティクルが数百個くらい普通に出てるような状況。
ポリゴンを自前で座標変換後したあとにバッファにためておいて、バケツソートで数個のブロックに分けて描画とか。


619 :デフォルトの名無しさん:2009/08/01(土) 17:42:07
>>618
>ポリゴンを自前で座標変換後したあとにバッファにためておいて、
>バケツソートで数個のブロックに分けて描画とか。

ちょっと良く分からなかったのですが、
座標変換は存在するすべてのビルボードパーティクルに対して行い(頂点座標を書き換えるのでなくてワールド座標)
それらビルボード一枚一枚をzソートするクラスに溜めています。
そしてzソートし、一気に一枚一枚描画しています。

ブロックごとに分けて描画するとなると
ブロック内のz値の順番はうまくいきますが
ブロックごとのz値の順番がおかしくなりませんか?

620 :デフォルトの名無しさん:2009/08/01(土) 18:01:08
ソートした後で分割

621 :デフォルトの名無しさん:2009/08/01(土) 18:29:54
>>620
分割する意味がわかりません

622 :デフォルトの名無しさん:2009/08/01(土) 18:40:22
もしかしてポリゴン1枚づつDrawPrimitveしてるの

623 :デフォルトの名無しさん:2009/08/01(土) 18:51:59
そうです。

624 :デフォルトの名無しさん:2009/08/01(土) 18:58:04
そりゃないわ。
炎を100個のビルボで表現しているとするなら、その100個は1回のDrawPrimitiveで描画してしまいなさい。

ところで、加算合成なら前後関係をソートする必要がないのは知ってるか?

半透明にしても、ソートがてきとーでも、そうそうばれないからあまり気にするな。
炎単位でソートするくらいで十分。ビルボ1つ単位でソートしてたらすさまじいことになっちまうぜ。

625 :デフォルトの名無しさん:2009/08/01(土) 19:17:12
>>624
>炎を100個のビルボで表現しているとするなら、その100個は1回のDrawPrimitiveで描画してしまいなさい。

いったいどうやるんですか?
頂点バッファに全ビルボードの移動後の頂点を入れておくとかですか?

そうだとすると、フレームによってビルボードの数が変わるので
毎フレーム頂点バッファを作りなおさなくてはいけなくなりませんか?

全加算なら単純に足すだけですから、炎とかならいいと思いますが
ミサイルなどの手前から奥に飛んでいく煙を表現する場合の線形合成は(今回使います)
ソートは必須です。

しかもいくつもミサイルが飛んでいる場合それらの煙単位でソートしては
煙1と煙2が重なった場合板ポリの輪郭が見えてしまいます。
なので煙全部でソートしないとうまくいかないんです。

626 :デフォルトの名無しさん:2009/08/01(土) 19:22:06
ここで以前DrawPrimitiveUPや動的頂点バッファの話をしてたが、
まさに枚フレーム書き換えるような頂点のためだよ


627 :デフォルトの名無しさん:2009/08/01(土) 19:25:30
>>625
>頂点バッファに全ビルボードの移動後の頂点を入れておくとかですか?
それでOK。
頂点バッファを毎フレーム「作り直す」のはつらいので、500ビルボード分作る。
MSのヘルプによると、一回のDrawPrimitiveでは1000ポリくらいが適切だということなので、ビルボは三角形二つだから500ビルボード分ね。

ミサイルの煙を半透明でやるのね。OK。
「気にすんな」でOK
とりあえず試してみ。前後関係が狂っててもまったく気にならないから。
「気にならない」正確さより、「気になる」処理落ちを防ぐのを優先。

>煙1と煙2が重なった場合板ポリの輪郭が見えてしまいます。
半透明の物体を描くときは、Zバッファへの書き込みをOFFにするべき。
そうすればこの現象は起きないよ


628 :デフォルトの名無しさん:2009/08/01(土) 19:28:30
>頂点バッファを毎フレーム「作り直す」のはつらいので、500ビルボード分作る。

500ビルボード分の大きさで作る。のほうがわかりやすかったね。補足。
描画するたびに中身を書き換えて使うべし。
ロックする際D3DLOCK_DISCARDを指定すれば、ロック待ちも発生しないので早いぞ。

629 :デフォルトの名無しさん:2009/08/01(土) 19:33:42
>>626
毎フレーム書き換えるのは頂点バッファをLock,UnLockして書き換えるより
頂点シェーダでやったほうが高速だと思ってたので、すべて頂点シェーダでやっています。

それはスキンメッシュのスキニングをシェーダでやったほうが
何倍も高速だったのでそう思っています。

DrawIndexedPrimitiveを何回も呼ぶより
バッファ作ってLockして書き換えたほうが速いということですか?

上のほうで言ってたことは
結局はDrawIndexedPrimitiveもUPも大して速度は変わらないという結論ですよね。


630 :デフォルトの名無しさん:2009/08/01(土) 19:43:28
>DrawIndexedPrimitiveを何回も呼ぶより
>バッファ作ってLockして書き換えたほうが速いということですか?

書き換えたほうが速い。
というのも、DrawIndexedPrimitiveの呼び出しオーバーヘッドは遅いので。

頂点シェーダでやると高速化するのは確かにそうだが、やるなら281法をやることになる。
確かにID3DXEffect::SetVectorArray()で座標情報を渡すのが大抵のグラボで最速。

ただ、定数レジスタの数の制限を考えるに1回につき250ビルボ程度しか描画できない。
あとは場合によりベターな方法は変わる。
まとめて描画する単位が250ビルボ以下ならこちらでいいと思われ。


631 :デフォルトの名無しさん:2009/08/01(土) 19:50:21
固定的な頂点バッファとは別に、毎フレーム書き換わるデータ向けの動的頂点バッファがあるの。
その違いを分かってないから、スキンメッシュとの比較検証も、効率悪いやり方でやった場合の結果にすぎない。

632 :デフォルトの名無しさん:2009/08/01(土) 19:59:06
>>630
複数の頂点情報ストリームを登録しておいて、片側を毎回書き換えるという方法が考えられるな。
(で、VertexShaderで合算する)
計算がいくらか楽になるかもしれない。どれくらい速度が変わるかは試してみないと分からないけど。

633 :デフォルトの名無しさん:2009/08/01(土) 20:02:57
とりあえず、281法含めて色々実測した身としては、
UPだろうがUPじゃなかろうが、頂点シェーダを使う方法だろうが

「沢山のビルボードを、まとめて一回のDrawIndexedPrimitive*で描画する」という基本を守っている限り、
速度誤差は0.1%にも満たないということだ。

小難しいことを考えるが面倒なら、DrawIndexedPrimitiveUP使っておくといいよ。
(レガシー関数だから嫌というこだわりがなければ。ね)
本気で速度の差はほっっっっっとんどでないから。

まぁ、流石マイクロソフト。DrawIndexedPrimitiveUPの中身もちゃんと最適化されてるんだなといったところ。

634 :デフォルトの名無しさん:2009/08/01(土) 20:11:38
>>627
>一回のDrawPrimitiveでは1000ポリくらいが適切
それは知りませんでした。

>半透明の物体を描くときは、Zバッファへの書き込みをOFFにするべき。
>そうすればこの現象は起きないよ
そうですよね、なるほど!

>>630
>書き換えたほうが速い。
>というのも、DrawIndexedPrimitiveの呼び出しオーバーヘッドは遅いので。
そうなのですか。

>>631
Lockして書き込む際のD3DLOCKの種類のことですよね?
ここはよくわかっていませんでした。
D3DLOCK_NOSYSLOCKを指定していました。
Lockの際に、D3DLOCK_DISCARDを指定すれば動的頂点バッファになるということですね。
CreateVertexBufferの第二引数はD3DUSAGE_WRITEONLYでOKですか?

いろいろやり方が見えてきたので早速試してみたいと思います。
ありがとうございました。

635 :デフォルトの名無しさん:2009/08/01(土) 20:55:13
WRITEONLYが適切。
だけどこのスレで「間違えて読み込みしてて、性能だだ落ちしてた」ってのが実例としてあったから気をつけるこった。

636 :デフォルトの名無しさん:2009/08/01(土) 21:10:38
質問です。
2D描画時のテクスチャー矩形転送のお約束として、
転送先座標を-0.5fするというのがありますよね。

あれの意義はわかりますし、そうやっているので普段は良いのですが、
拡大転送する際「テクスチャーの参照の際、隣のドットの色が影響してしまう」現象が起きるようです。
これを回避する方法はないでしょうか?

LINEARを使わず、NEARPOINTでやればいいのでしょうが、拡大の粗が見えてしまいますので・・・。

637 :デフォルトの名無しさん:2009/08/01(土) 21:19:08
一枚のテクスチャの中で別パーツと混ざるのが嫌なケース?
そりゃ周囲には1ピクセルずつ余白を置くとかじゃね。

昔の2Dゲームのような32x32のチップをぎっしり敷き詰められたデータなら、諦めるか、34x34で置き直すとか。



638 :デフォルトの名無しさん:2009/08/01(土) 21:36:52
はい、そのケースです。
やっぱり余白しかないですか・・・。

縮小ならわかるのですが、拡大でも周りを参照しちゃうのがちょっと納得いかないところなんですが・・・

639 :デフォルトの名無しさん:2009/08/01(土) 21:39:12
状況が許すなら、まず拡大しないブリットでチップを
レンダーターゲットのテクスチャに敷き詰めて
そのテクスチャを拡大するって手はある


640 :デフォルトの名無しさん:2009/08/01(土) 21:46:51
>転送先座標を-0.5fするというのがありますよね。
そのやり方は正しいと思えないんだが。
むしろUVを半ピクセルずらすのが正しいやり方だろ?
UVをそのままで表示座標を変えてごまかしたりするから、表示倍率を変えると狂っちゃうわけで。
UVマッピングの詳細はMSDNにちゃんと書いてあるので確認すること。
ちゃんとやったらチップを画面いっぱいに並べようが拡大しようが、ずれたりすることはないよ。
現に手元で動いてる。

641 :デフォルトの名無しさん:2009/08/01(土) 22:03:18
>>640
0.5ずらすのは

「バイリニアフィルタを適用している時に」
「頂点座標をスクリーン座標に直接マッピングすると」

ピクセルがテクセルの中心にマッピングしてしまい、拡大してなくてもぼやけてしまうのを防ぐためでしょ。
だから表示倍率を変えると云々はそもそも文脈としておかしいんだが。

642 :641:2009/08/01(土) 22:06:18
うん、俺の文もおかしい。

x テクセルの中心
o 4テクセルの中心

643 :デフォルトの名無しさん:2009/08/01(土) 22:16:46
>>641-642
オレの言ってることと君の言ってることはほとんど同じような気がするんだが、どうだろうか。
当倍表示の場合は636でも640でもいいが、拡大表示したら636ではおかしくなる。
そういうことだろ?

というか、そんな細かい処理をするときはフィルタはNoneにしたほうがいいと思うんだが。
拡大・縮小はきたなくなるけどな!

644 :デフォルトの名無しさん:2009/08/01(土) 22:20:30
>>640
一応
ttp://msdn.microsoft.com/ja-jp/library/bb219690(VS.85).aspx
これには目を通しています
これでも、ほかのサイトでも、転送先座標を + xy(-0.5f, -0.5f) するように思えます

640さんの方法は、拡大しても隣の色を巻き込んだりしないのでしょうか?
一応「座標はそのままに、UVを半ピクセルプラスする」方法でもやってみましたが、やはり拡大時には隣の色を巻き込んでしまうようです。

645 :641:2009/08/01(土) 22:29:42
>>643
拡大するとおかしくなるんじゃなくて隣の色を拾うんだから
アルゴリズム上は正確な挙動だよ。
てゆーか言ってるのはテクスチャ座標を0.5テクセル分ずらす方法だよね?
言い忘れてたけど、その方法だと拡大はせずに反転した時に
完全なミラーにならずに一ピクセル分表示がずれちゃうよ。

そっち方法で隣の色を巻き込まないってのは、うーん、
手元で試せないので「そんな馬鹿な」としか言いようが・・・

646 :デフォルトの名無しさん:2009/08/01(土) 23:11:12
FFT式に回転させるとそんな苦労も水の泡だぜ

647 :デフォルトの名無しさん:2009/08/01(土) 23:29:58
周りからそんなに反論されると、なんか自分も自信がなくなってきた。

まあそれはともかくとして、
表示を10倍くらいに拡大すると、もはや直角二等辺三角形2つを並べたテクスチャの斜めの辺の挙動が無視できなくなるな。
大体10x10にならんでるけどところどころ9になったり11になったりする。
それに斜めにずれているところがあることに気づく。ちょうどポリゴンを斜めに並べたところだ。

なんだかどうにもならないことのような気がしてくる。
頂点を共有せずに微妙に1ピクセル分ずらしたりの調整が必要になってくるのかも。

648 :デフォルトの名無しさん:2009/08/02(日) 00:21:13
とりあえず軽く実験してみたが、
転送先スクリーン座標を-0.5f, -0.5f しただけでは、拡大転送時に周りの1ドットの影響を受けてしまうな

649 :デフォルトの名無しさん:2009/08/02(日) 00:33:43
>>648
そうだなぁ。例えば10倍拡大したときは0.1f、0.1fくらいでちょうどいいようだ。
微妙に9倍や11倍されてるピクセルがあるようだが、
こんなに拡大されたCGを凝視するようなことはないだろうから実用上は問題ないだろう。

2D表示における倍率に指定すべきUVオフセットが影響を受けるのかもしれない。
しかしGPUの機種の差異もありそうだしなぁ。

650 :デフォルトの名無しさん:2009/08/02(日) 14:36:23
>>641が言っているように、0.5ずらしは
本現象とは何の関係もない。

D3DTEXF_LINEARが、2x2エリアをサンプルするのが原因。
一応、UV座標を半テクセル分内側にずらすことで回避出来る。

float texture_width = 512;
float texture_height = 512;
float wh = 1.0/(texture_width*2);
float hh = 1.0/(texture_height*2);
float uv_quad = { u0 + wh, v0 + hh, u1 - wh, v1 - hh };

ただし、ずらす分マップするエリアが狭まるので注意。

651 :デフォルトの名無しさん:2009/08/02(日) 15:24:25
状況や描画させ方によるので
唯一これが最速だという答えは出せません。

ゲーム、あるいはエンジンに合わせて最適化がそれぞれ必要です。

652 :デフォルトの名無しさん:2009/08/02(日) 15:28:10
それでも、Direct3D9で2D等倍表示をするときだけしか正しくない「頂点座標を0,5ずらす」を
後生大事に信じ込むのは馬鹿だろう

653 :デフォルトの名無しさん:2009/08/02(日) 15:40:27
基本的な質問で申し訳ないんだが、
GPUの機種によって描画できる場合と描画できない場合ができていて困っている。
原因は何が考えられるだろう?

動作条件は
・DirectX 9使用
・Vertex/PixelShader使用
・FVFはPosition|DiffUse|UV
・空間座標変換はCPU側で事前に合成してから単一の4x4行列としてID3DXEffectに入力。

現行のプログラムでRADEON HD4850だと正常にポリゴンが描画できるが、
Intel GMA950では描画されない。Device->Clear()は動いてる。
また、FVFがPositionRhw|DiffUse|UV のときは描画できることも確認している。(座標変換が利かなくなるが)

シェーダー使ってなかったころのプログラムやシェーダーを使ってる
サンプルプログラムでは描画できてるから、ハードウェアのせいではない。

654 :デフォルトの名無しさん:2009/08/02(日) 15:45:16
きわめて一般的な描画方法だからどこかおかしいんと違う?

655 :デフォルトの名無しさん:2009/08/02(日) 17:51:26
>>653
それだけの情報で分かるわけないだろう。
デバッグランタイムも何も文句言わないの?

656 :デフォルトの名無しさん:2009/08/02(日) 19:32:40
>>655
デバッグランタイムは動かしたことないな。試してみる。

開発マシンじゃなくてテストマシンだったからDirectX SDKは入れてないので。
vs/ps3.0を指定してたら描画結果が真っ白になってしまったことはあったけど、
今回はそんなわかりやすい現象じゃないからなぁ。

657 :デフォルトの名無しさん:2009/08/02(日) 23:00:15
http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.html
Stencil Routed K-BufferってDirectX9では出来ないんでしょうか?
マルチサンプルへのアクセスが必要でDirectX9では出来ない、というようなことが書いてありますが
マルチサンプル使わずに出来たりはしないんでしょうか。

658 :デフォルトの名無しさん:2009/08/03(月) 00:21:35
ここで質問していいのか微妙な内容なのですが
スレ違いでしたらスルーしてください。

DirectXを使用するとどうしても気になってくるんですが
プログラムで使用されているVRAMの消費量を調べる方法はありませんか?
メモリ使用量を調べるような関数があるのかと思ったのですが見つけられず…

よろしくお願いします。

659 :デフォルトの名無しさん:2009/08/03(月) 02:01:17
DeviceCaps取得すれば
VRAM容量わかるお

660 :デフォルトの名無しさん:2009/08/03(月) 13:27:18
nai

661 :デフォルトの名無しさん:2009/08/03(月) 13:27:58
このスレにいる人レベル高いなぁ
多分大学生が多いだろうから、大手狙いなんだろうなぁ……負けないように何か作るか

662 :デフォルトの名無しさん:2009/08/03(月) 14:04:14
Zバッファがうまく動かないんですが

環境
WindowsXP VisualStudio2005 MFC Geforce9600GT

初期化

m_d3dPP.EnableAutoDepthStencil = TRUE;
m_d3dPP.AutoDepthStencilFormat = D3DFMT_D16;

LINE_VERTEX line[6] = {
{-1 , 0, 0, 0xFF00FF00},
{1 , 0, 0, 0xFF00FF00},

{0 , 0 , 0 , 0xFFFF0000} ,
{0 , 1 , 0 , 0xFFFF0000},

{0 , 0 , -1 , 0xFF0000FF} ,
{0 , 0 , 1 , 0xFF0000FF}
};
CreateVertexで書き込み

663 :デフォルトの名無しさん:2009/08/03(月) 14:06:11
視点の初期化(マウスで回転した時も)

D3DXMatrixLookAtLH(&d3dm , &D3DXVECTOR3(0, 0, 6) ,
&D3DXVECTOR3(0, 0, 0) , &D3DXVECTOR3(0 , 1 , 0));
m_pDeviceD3D->SetTransform(D3DTS_VIEW , &d3dm);

D3DXMatrixPerspectiveFovLH(&d3dm , D3DXToRadian(45.0) ,
(float)rect.right / (float)rect.bottom , 0 , 1000);

m_pDeviceD3D->SetTransform(D3DTS_PROJECTION , &d3dm);

D3DXMatrixRotationYawPitchRoll(&Rot, D3DXToRadian(m_AngleY), D3DXToRadian(m_AngleX), D3DXToRadian(0.0f));
m_pDeviceD3D->SetTransform(D3DTS_WORLDMATRIX(0) , &Rot);


m_pDeviceD3D->SetRenderState(D3DRS_CULLMODE , D3DCULL_NONE);
m_pDeviceD3D->SetRenderState(D3DRS_LIGHTING , FALSE);
m_pDeviceD3D->SetRenderState(D3DRS_ZENABLE, TRUE);
m_pDeviceD3D->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

664 :デフォルトの名無しさん:2009/08/03(月) 14:09:05
描画

m_pDeviceD3D->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(20,0,50),1.0f, 0);
m_pDeviceD3D->BeginScene();

m_pDeviceD3D->SetStreamSource( 0, g_pVB, 0, sizeof(LINE_VERTEX) );
m_pDeviceD3D->SetFVF( D3DFVF_XYZ|D3DFVF_DIFFUSE );
for(int i=0; i<3; i++)
m_pDeviceD3D->DrawPrimitive( D3DPT_LINELIST, i*2, 1);

XYZの軸を引いてマウスで回転させてるだけなんだけど
角度によって後ろの線が前に出てきたりZバッファが機能してないみたいなんだけど
どこが間違ってるんでしょう?

665 :デフォルトの名無しさん:2009/08/03(月) 15:40:38
D3DXMatrixPerspectiveFovLHの第4引数(znear)が0になってますがな

666 :デフォルトの名無しさん:2009/08/03(月) 19:40:54
>665
ゼロからじゃだめなんですか?

667 :デフォルトの名無しさん:2009/08/03(月) 20:22:40
だめ。
視錐台の前面が面積0になってしまう。

668 :デフォルトの名無しさん:2009/08/03(月) 20:49:46
>>665
ありがとう、とりあえずそこを1.0にしてみたら出来たけど
いまいち原理が良くわからないから調べますわ

669 :デフォルトの名無しさん:2009/08/03(月) 23:17:36
質問です。
川瀬式MGFを実装しようと思い、ここを参考にしながら
http://journal.mycom.co.jp/column/graphics/050/index.html
やってみたのですが、うまくいきません。

低解像度テクスチャに書き出し拡大しても
こんな風に●の中心を中心に、拡大されたようにならないんですが
何かご存知のであればアドバイスをいただきたいです。

670 :デフォルトの名無しさん:2009/08/03(月) 23:33:29
きみがやってみて失敗した結果の画像をどこかのアプロダに張れないか

671 :デフォルトの名無しさん:2009/08/03(月) 23:35:04
ちょっと待っててください

672 :デフォルトの名無しさん:2009/08/04(火) 01:58:54
 そして>670は待ち続けた。
 雨が降ろうと、風が吹こうと、雪が積もろうと、>671が帰ってくるのをずっと
待ち続けた。
 スレの主人はそんな>670を不憫に思い、毎晩、スレを畳む時間になると、残り
物のレスをそっと脇に置いて帰ったが、翌朝までに手をつけられていたことは、
一度も無かった。>670は、ただひたすら一つのレスを見続けていた。
 結局、>671が帰ってくることは、二度と無かったのだ。
 なぜなら、>671は

673 :デフォルトの名無しさん:2009/08/04(火) 08:48:32
(続き) なぜなら、>671は>672だったからなのだ。

674 :デフォルトの名無しさん:2009/08/04(火) 10:00:36
UV値を入れずにポリゴンを書くとテクスチャを指定しても表示されないんだけど
大きさを可変にしたいからタイルパターンでテクスチャを貼り付けたい時はどうすればいいの?

675 :デフォルトの名無しさん:2009/08/04(火) 10:03:27
そういうふうにUVを指定しろ

676 :デフォルトの名無しさん:2009/08/04(火) 17:30:35
>674
テクスチャ画像を作る段階でタイルパターンの画像にしておけば良いのでは?

677 :デフォルトの名無しさん:2009/08/04(火) 17:36:42
シェーダー使えば可能だろ

678 :デフォルトの名無しさん:2009/08/04(火) 17:51:34
いろいろあるよ

679 :デフォルトの名無しさん:2009/08/04(火) 18:17:51
2Dを扱う場合、高速で描画できる方法を教えてください。

一応自分なりに調べて、描画をさせてみたのですが
DXライブラリというライブラリを使った場合と比べるとかなり差が出てしまい
原因を探しています。

描画方法は、頂点バッファを使いDrawPrimitiveで画像を1つずつ描写しています。
よろしくお願いします。


680 :デフォルトの名無しさん:2009/08/04(火) 18:26:04
頂点バッファを使い1回のDrawPrimitiveで全部の画像を描画すると速いと思うよ
必要な絵全部を1枚のテクスチャに詰め込んでおくと良い

681 :デフォルトの名無しさん:2009/08/04(火) 18:44:55
>>頂点バッファを使い1回のDrawPrimitiveで全部の画像を描画すると速いと思うよ
このやりかたが分からず…方法の載っているサイトなどありましたらおねがいします。
DirectXによる2Dゲーム制作サイトなど見たのですが、1フレーム分描画するのに何度もDrawPrimitiveしているものばかりでした

682 :デフォルトの名無しさん:2009/08/04(火) 19:00:41
画像数×6個の頂点が入る大きさの頂点バッファを作って、
全部の頂点を書き込んで、DrawPrimitiveするだけ

683 :デフォルトの名無しさん:2009/08/04(火) 19:15:58
頂点バッファを一つにまとめて、テクスチャも一つにし
それを一度にDrawPrimitiveすればいいってことですよね…

つまりDrawPrimitiveの呼び出し回数が描画速度に関わってるって
ことですか…


複数のテクスチャを扱っているので、できるだけ呼び出し回数を減らしてみます。

684 :デフォルトの名無しさん:2009/08/04(火) 19:25:00
>>683
↓まだ読んでないなら、読んでおくといい
http://msdn.microsoft.com/ja-jp/library/bb147263(VS.85).aspx

685 :684:2009/08/04(火) 19:47:36
>>684
ありがとうございます。複数のテクスチャを扱うときは
グループ化すれば、描写速度があがるんですね。非常に勉強になりました。

686 :683:2009/08/04(火) 19:51:33
>>685は名前ミスです。
早速、現状と比べてきます。

687 :デフォルトの名無しさん:2009/08/05(水) 01:40:39
表示中のモデルに直接色を塗りたいんだけど
爆発で黒く焦げたりとかしたい
決まった場所じゃないし、同じモデルがいっぱいあるから
テクスチャをいじるわけにもいかないし
どうすればいいんですか?

688 :デフォルトの名無しさん:2009/08/05(水) 05:35:12
頂点カラーを使うとか

689 :デフォルトの名無しさん:2009/08/05(水) 07:36:02
マルチテクスチャで加工用のを重ねる。
洋ゲーでキャラを血まみれにするので使ってた実例もなんかあったはず

690 :デフォルトの名無しさん:2009/08/05(水) 09:51:18
質問です。
>>684でもあがっているこの最適化ページに
>できるだけ正方形テクスチャーを使用します。ディメンジョンが 256 × 256 のテクスチャーが最速です
とあるのですが、
今までパーティクルに使うテクスチャは32x32くらいのなるべく小さいものにしていました。
もしかして256x256のほうが良いのでしょうか?

691 :デフォルトの名無しさん:2009/08/05(水) 10:07:16
色々な環境で実測してから言え

692 :デフォルトの名無しさん:2009/08/05(水) 10:18:23
32x32のテクスチャをたくさん使ってるなら256x256の1枚だけにまとめた方がいいかもしれないが、
32x32のテクスチャをひとつしか使ってないならそのままでよい

693 :デフォルトの名無しさん:2009/08/05(水) 10:45:30
>>691
お前何しにこのスレ来てんの?

694 :デフォルトの名無しさん:2009/08/05(水) 11:06:40
>>690
どうでもいいが、DirectXヘルプでよく出てくるこの「ディメンジョン」という訳が気持ち悪い。
dimensionの発音はディメンションだし、寸法という適切な日本語もあるのに。

695 :デフォルトの名無しさん:2009/08/05(水) 11:56:10
>>694
昔、FORTRANの時代にSIONをTIONと間違わないためにあえてディメンジョンと言ってた名残かと

696 :デフォルトの名無しさん:2009/08/05(水) 13:31:59
ディメンジョンが何を指しているのかもよくわからんしな。

>できるだけ正方形テクスチャーを使用します。ディメンジョンが 256 × 256 のテクスチャーが最速です
画像サイズが。という意味でいいんだろうかw
X軸とY軸のことをディメンジョンと呼んでいるような気はするんだがw

697 :デフォルトの名無しさん:2009/08/05(水) 13:36:26
>>696
>>694 がいってる、寸法っていうのがしっくり来るな。

698 :デフォルトの名無しさん:2009/08/05(水) 13:48:54
日本人にとってはdimensionというと数学用語の「次元」のほうが馴染みがあるけど、
英和辞典で最初に出てくるのは「寸法」だね。

699 :デフォルトの名無しさん:2009/08/05(水) 13:49:46
訳した人がよくわからなかっただけじゃねえの?

700 :デフォルトの名無しさん:2009/08/05(水) 15:30:30
マイクロソフトの翻訳が糞なのは仕様
surfaceの正確な発音はサーフィスだけど
サーフェイスと書いてあったり

701 :デフォルトの名無しさん:2009/08/05(水) 15:33:21
それって翻訳なのか?

702 :デフォルトの名無しさん:2009/08/05(水) 15:44:19
>>700
まあまあ。最近は歴史学でも用語発音の厳密化の流れはあるけど、
『サーフェイス』か『サーフェス』、『サーフィス』かというのは和製英語のレベルだよ。
(両方でググると引っかかる結果が違って興味深い)

英語的に考えると『サー』の部分も『フィ』の部分もむかつき音だから
「セーフェス」のほうがむしろ近いわけだが、読んでも意味がわからなくなる。

個人的にはサーフェスくらいかな。でもサーフェイスで覚えてしまってる。

703 :デフォルトの名無しさん:2009/08/05(水) 16:11:46
"むかつき音"の検索結果 2 件
http://www.google.co.jp/search?q=%22%E3%82%80%E3%81%8B%E3%81%A4%E3%81%8D%E9%9F%B3%22

704 :デフォルトの名無しさん:2009/08/05(水) 16:19:28
そもそもMSDNの翻訳って、機械翻訳じゃなかったっけ?

705 :デフォルトの名無しさん:2009/08/05(水) 16:25:06
MSの機械翻訳はそこまで優秀じゃないよ
少なくともDirectX部分に関してはMSKKの川西さんが最終的な監修をしているはず

706 :デフォルトの名無しさん:2009/08/05(水) 17:02:58
やってる奴が、有能か無能か、業務か無料奉仕かなんて関係無く
機械翻訳にしか見え無いとは酷い話だ

707 :デフォルトの名無しさん:2009/08/05(水) 17:05:05
くだらねえ

708 :デフォルトの名無しさん:2009/08/05(水) 20:52:40
初心者のばかな言動を叱り付けると爽やかな気持ちでプログラミングに励むことができます

709 :デフォルトの名無しさん:2009/08/06(木) 14:46:35
RPG風なダメージを表現しようとして敵が表示されているときのみ数字を表示って考えてるんだが
if D3DXVec3Dot( &敵, &カメラ )>0
ってやるとカメラを回転させたときに数字が出ずに困ってる。
方向ベクトルの符号を変えればよいっぽいんだが変えるタイミングがわからない。

710 :デフォルトの名無しさん:2009/08/06(木) 15:17:27
数字の表示を独立するんじゃなくて
敵の表示処理のときに一緒に処理すればいいんじゃないの?


711 :デフォルトの名無しさん:2009/08/06(木) 15:45:35
質問させて下さい。
固定機能パイプラインのディフューズ、インデックスバッファを使用して
描画しているのですが、頂点に設定した色で面の色は補間されてしまいます。
頂点毎の色ではなくて面毎に色を設定したい場合は頂点シェーダを
使用するしかないのでしょうか?

712 :デフォルトの名無しさん:2009/08/06(木) 16:02:59
>>711
D3DRS_SHADEMODEをD3DSHADE_FLATにすると、最初の頂点の色で
面が塗られる。

713 :デフォルトの名無しさん:2009/08/06(木) 16:17:44
>>712
ぬおおお!!本当だ!!知らなかった!!
本にも載ってなかった、ありがとうございます!!

714 :デフォルトの名無しさん:2009/08/06(木) 17:26:22
その本を捨てるか
俺のチンコをしゃぶるか
選べ

715 :デフォルトの名無しさん:2009/08/07(金) 08:52:57
>>714 氏ね
プリミティブ数より頂点数が少ない場合、
(インデックスバッファを使用して頂点を共有しまくってる場合)
どうすればいいんですかね?
こういう場合はFLATでのシェーディングは不可能という事ですか。

716 :デフォルトの名無しさん:2009/08/07(金) 10:34:40
>>715
そんなにFLATにこだわるならポリゴンごとに頂点を分割したらいいんじゃないの?
何をそんなにこだわってるんだか。

717 :デフォルトの名無しさん:2009/08/07(金) 10:51:09
>>716
こだわってるはモデラー的なものを作りいんですよ。
モデラーってスムージング角度を指定して、FLATかスムースになりますよね。
頂点数がどれくらい多くなるか分からないので、
効率考えてインデックスバッファは使いたいんですが、
今のやり方ではDirectXの仕様的に無理そうな感じですね。

718 :デフォルトの名無しさん:2009/08/07(金) 10:52:02
面ごとの色を決めて描画という方法は無い。
少なくとも頂点カラーは使えない。

やるならマテリアルわけするしかあるまい。
俺も昔OpenGLで同じことをやりたくて探したが、OpenGLにもDirect3Dにもなかった。
頂点カラーならぬ、面カラーがあるに違いないと思っていたが、幻想だったよ。

719 :デフォルトの名無しさん:2009/08/07(金) 11:03:07
質問です。

テクスチャに対して、マルチサンプリングを行っての描画をしたいのですが、可能でしょうか?

以下のことは調べました。
・CreateTextureしたテクスチャからGetSurfaceLevelし、それをSetRenderTargetして描画
マルチサンプリングは効きませんが、描画がちゃんとできるのを確認しました。

・CreateRenderTarget したサーフェイスをSetRenderTargetして描画
描画後、LockRectなどで描画が確かに行われているこを確認しました。
マルチサンプリングも効いています。


後者で描画した後、LockRectして手に入れた内容を、テクスチャーに転送する。
という手段でとりあえずは可能なのですが、いかにも周り道です。
ダイレクトにテクスチャにマルチサンプリング描画を行うにはどうしたらよいのでしょうか?

720 :デフォルトの名無しさん:2009/08/07(金) 11:03:58
シェーダーを使えば可能

721 :デフォルトの名無しさん:2009/08/07(金) 12:32:00
>>718
そうなんですかorz
ありがとうございました。

722 :デフォルトの名無しさん:2009/08/07(金) 17:33:45
>>718
>>720
当然じゃないか。
3Dの基本単位は頂点なのであって、
3つの頂点の配置からポリゴンの位置・大きさ・向きを判定するんだ。
面が先にあるわけじゃない。

723 :デフォルトの名無しさん:2009/08/07(金) 17:47:35
別に当然ではないだろう。
どうせ描画時には面単位で描画していくのだから。
DrawPrimitiveの引数だって、頂点数じゃなくて「プリミティブ数」じゃないか。

724 :デフォルトの名無しさん:2009/08/07(金) 23:47:44
DirectSoundってボリューム増幅させることできます?
IDirectSoundBuffer8::SetVolumeは増幅はサポートしてないって書いてあるけど

725 :デフォルトの名無しさん:2009/08/08(土) 00:44:07
アプリケーションのデフォルトを50%相当の音量にすればよい。


726 :デフォルトの名無しさん:2009/08/08(土) 18:39:50
ウィンドウモードで画面サイズが変わったらバッファをリセットするんだけど
テクスチャとバーテックスバッファを登録した状態でResetを呼び出すと失敗するんだけど
全部ReleaseしてResetして再登録しろってこと?

727 :デフォルトの名無しさん:2009/08/08(土) 18:41:59
D3DPOOL_DEFAULTは全て


728 :デフォルトの名無しさん:2009/08/08(土) 18:50:58
なるほど

729 :デフォルトの名無しさん:2009/08/08(土) 19:40:06
いつもテクスチャはD3DPOOL_MANAGEDしか使わないんだが、
RenderTargetに指定できない以外は別に問題ないよな?

730 :デフォルトの名無しさん:2009/08/08(土) 19:47:48
問題ない

731 :デフォルトの名無しさん:2009/08/08(土) 20:51:41
D3DPOOL_MANAGEDに変えたらテクスチャが真っ赤になったんだが
どういうこと?

732 :デフォルトの名無しさん:2009/08/08(土) 20:54:16
これまで初期化を怠ってきたから環境依存してる

733 :デフォルトの名無しさん:2009/08/08(土) 21:52:12
LPDIRECT3DTEXTURE9 pTex;
HRESULT hr;
hr = D3DXCreateTexture(dev, img.GetWidth(), img.GetHeight(), 1,
0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &pTex);


D3DLOCKED_RECT pLockedRect;
hr = (*pTex).LockRect(0, &pLockedRect, NULL, D3DLOCK_DISCARD);

unsigned char *dest = (unsigned char*)pLockedRect.pBits;
unsigned char *src = img.GetData(); <- imgはRGBの24bit画像データが入ったクラス

int j;
int dest_pos=0;
int src_pos=0;
for(j=0;j<img.GetWidth() * img.GetHeight();j++){
dest[dest_pos] = src[src_pos+2];
dest[dest_pos+1] = src[src_pos+1];
dest[dest_pos+2] = src[src_pos];
dest[dest_pos+3] = 0xff;
}
dest_pos+=4;
src_pos+=3;
}

hr = (*pTex).UnlockRect(0);



734 :デフォルトの名無しさん:2009/08/08(土) 21:54:32
dest[dest_pos] = src[src_pos+2];
dest[dest_pos+1] = 0xff;
dest[dest_pos+2] = 0xff;
dest[dest_pos+3] = 0xff;
こうすると真っ白

dest[dest_pos] = src[src_pos+2];
dest[dest_pos+1] = 0xff;
dest[dest_pos+2] = src[src_pos];
dest[dest_pos+3] = 0xff;
こうすると紫

dest[dest_pos] = src[src_pos+2];
dest[dest_pos+1] = src[src_pos+1];
dest[dest_pos+2] = 0xff;
dest[dest_pos+3] = 0xff;
こうすると水色

dest[dest_pos] = src[src_pos+2];
dest[dest_pos+1] = src[src_pos+1];
dest[dest_pos+2] = src[src_pos];
dest[dest_pos+3] = 0xff;
これで青

どういうこと?まじで分からない

735 :デフォルトの名無しさん:2009/08/08(土) 22:08:18
srcの中身なんだかわかんねーしよ
それはそうと、D3DFMT_A8R8G8B8であればdestのオフセットは 0=B 1=G 2=R 3=A

736 :デフォルトの名無しさん:2009/08/08(土) 22:20:35
というか、あれだけ優秀なD3DXライブラリを使わない理由がわからない。

737 :デフォルトの名無しさん:2009/08/08(土) 22:33:14
せめてビットシフトのマクロ作れよw
なんだその無様なコードは

738 :デフォルトの名無しさん:2009/08/08(土) 22:35:24
原因判明 UV座標が狂ってたw

739 :デフォルトの名無しさん:2009/08/08(土) 22:37:15
>>736
モデルファイルのコンバーターを作ってるから専用のライブラリで統合してるんだ

740 :デフォルトの名無しさん:2009/08/08(土) 22:39:31
>>737
別に無様とは思わないが?

741 :デフォルトの名無しさん:2009/08/09(日) 14:11:40
ポリゴンが透けてしまう原因として何が考えられますか・・・?
アバウトな質問ですいません。

742 :デフォルトの名無しさん:2009/08/09(日) 14:16:01
アルファブレンドの値や設定が透過するようになってるとか?

743 :デフォルトの名無しさん:2009/08/09(日) 14:33:09
>>742
アルファブレンドは使っていないんです。

744 :デフォルトの名無しさん:2009/08/09(日) 14:53:23
>>741
われわれはエスパーではないのでそんなアバウトな説明では何もわかりません。


745 :741:2009/08/09(日) 14:58:32
透けてしまうというか奥にあるはずのポリゴンが
手前に表示されてしまうという現象です。
頂点座標は間違っていないので、何故かまったく分からないです。
同じ現象にあった方が居たらと思いまして質問しました。

746 :デフォルトの名無しさん:2009/08/09(日) 15:08:36
Zバッファおかしんじゃね

747 :デフォルトの名無しさん:2009/08/09(日) 16:22:23
>>745
Zバッファが有効になってないと、前後関係無く最前面に描画されてそうなる。

748 :デフォルトの名無しさん:2009/08/09(日) 18:17:40
>>746
>>747
ご指摘の通りでした、zバッファ有効になってなかったです。
原因は視錐台の前面をゼロにしていました。
過去ログ見れば一発でしたね、お手数お掛けました。

749 :デフォルトの名無しさん:2009/08/09(日) 23:27:48
ライトがXファイルによって反映されるのとされないのがあるのはなぜですか?
アンビエントはかかるんですが・・・

750 :デフォルトの名無しさん:2009/08/09(日) 23:29:03
マテリアル関係かな

751 :デフォルトの名無しさん:2009/08/10(月) 09:45:58
法線がないんじゃあるまいか?
確かデフォルトだとオートノーマライズもOFFだし、初心者ひっかかりやすいよね

752 :デフォルトの名無しさん:2009/08/10(月) 14:09:07
それでした
ずっとアンビエントでやってたから気が付かなかった・・・

753 :デフォルトの名無しさん:2009/08/10(月) 15:34:01
オートノーマライズって何?

754 :デフォルトの名無しさん:2009/08/10(月) 15:38:53
glEnable(GL_NORMALIZE) のことでは

755 :デフォルトの名無しさん:2009/08/10(月) 15:39:35
ごめん、DirectXのスレだった・・・逝ってくる

756 :デフォルトの名無しさん:2009/08/10(月) 17:08:21
>>753
頂点の構成要素には、位置座標ベクトルや法線ベクトルがあるが
これらはレンダリングパイプライン通過時に、頂点変換行列によって変換される。
この頂点変換行列の内容によっては、法線ベクトルが単位長でなくなることもある。
パイプライン内のライティング処理は法線ベクトルを利用し計算を行うが、
そのとき法線ベクトルは単位長でないと正確な計算が出来ない。
よって、ライティング処理時、法線ベクトルを自動で正規化し単位長にするのがオートノーマライズ機能。

757 :デフォルトの名無しさん:2009/08/10(月) 18:35:44
なんだ左手系とかで面の向きが分かるから勝手に法線を生成してくれるのかと思った
自分で作らないとだめなのかな?

758 :デフォルトの名無しさん:2009/08/10(月) 18:50:39
頂点は複数の面で共有するケースもあるので、
法線を動的に生成するのは、重い割に得られるものが少ない。

759 :デフォルトの名無しさん:2009/08/10(月) 19:21:48
出来ると思うのなら、鋭角と鈍角が入り交じった立体から、
何の情報もなく法線を自動生成するプログラムを作ってみろ。

760 :デフォルトの名無しさん:2009/08/10(月) 19:29:03
何の情報も無かったら法線以前に描画出来ないだろw

761 :デフォルトの名無しさん:2009/08/10(月) 19:33:49
立体なんだから頂点情報があるのが前提だと想像できないのは、
プログラム云々以前だな。

762 :デフォルトの名無しさん:2009/08/10(月) 19:36:20
法線の生成なんて何十年も前から論文が何十本と出ていて、未だにコレという決定的な方法がない領域だからな。

763 :デフォルトの名無しさん:2009/08/10(月) 22:24:55
右回りになる方向のベクトルでいいんじゃないの?

764 :デフォルトの名無しさん:2009/08/10(月) 22:47:33
>>763
1つの頂点を共有する3つ以上のポリゴンの頂点における法線のことだろ?

765 :デフォルトの名無しさん:2009/08/10(月) 22:53:10
>>763
鈍角をどうやって認識するつもりなんだ?
体験版でもいいから、まともなモデリングソフトを使って勉強し直せ。

766 :デフォルトの名無しさん:2009/08/10(月) 22:55:58
球体を外積で出した法線で描画すればいかに間抜けなのかが分かるよ。

767 :デフォルトの名無しさん:2009/08/11(火) 00:19:26
話が噛み合ってないのか?
http://homepage1.nifty.com/t_kuji/3DCG_guide/normal_vector/normal_vector.html
こういうことじゃないの?

768 :デフォルトの名無しさん:2009/08/11(火) 02:46:04
包丁一本〜さらしに巻いて〜

769 :デフォルトの名無しさん:2009/08/11(火) 09:35:29
>>767
だからそれじゃ鈍角の法線が出ないんだよ。
かみ合っていない以前に、分かっていないのなら勉強し直せ。

770 :デフォルトの名無しさん:2009/08/11(火) 09:39:28
なんで鈍角が出ないかといえば、そこが鋭角なのか鈍角なのかを頂点座標だけでは判断できないから。

771 :デフォルトの名無しさん:2009/08/11(火) 10:12:57
鈍角の法線って何ですか?

772 :デフォルトの名無しさん:2009/08/11(火) 10:14:51
内積とれば鈍角か鋭角は判断できる。
でも鈍角だったら、なんなんだ?

773 :デフォルトの名無しさん:2009/08/11(火) 10:55:42
凹多角形の事でも言ってるんだろうか?

774 :デフォルトの名無しさん:2009/08/11(火) 11:14:06
出ないっていう奴が問題だして
出るって言ってる奴が解けば結論でる

775 :デフォルトの名無しさん:2009/08/11(火) 11:57:10
>>772
鈍角鋭角というのは角度の話じゃない。
法線を出すときに頂点座標だけでは、
周囲の頂点と平均をとるのかとらないのかが判断できないということだよ。

だから一般的な3Dフォーマットは、法線をデータとして含めるか、
頂点に対してスムージングをかけるか判断するための情報を入れるんだよ。

776 :デフォルトの名無しさん:2009/08/11(火) 12:30:56
1行目がわかりません
角度じゃない鈍角鋭角って何のことですか

777 :デフォルトの名無しさん:2009/08/11(火) 12:51:49
曲線のなす角と平面のなす角を言いたいんじゃないのか?

778 :デフォルトの名無しさん:2009/08/11(火) 13:07:02
すいません、質問したいのですが、

現在外部ファイルを読み込みたくて
APIのGetOpenFileNameを使っているのですが
この関数を使った後だと何故か

D3DXCreateTextureFromFileEx や

D3DXLoadMeshHierarchyFromX が

失敗してしまうみたいなのですが原因が分かりません…。

779 :デフォルトの名無しさん:2009/08/11(火) 13:22:57
たぶんカレントディレクトリが変更されている

780 :デフォルトの名無しさん:2009/08/11(火) 13:27:29
>>779
カレントディレクトリで検索してみたら
確かにGetOpenFileNameが成功するとディレクトリが変わってしまうそうですね。
恐らくこれが原因だと思います、ありがとうございました!

781 :デフォルトの名無しさん:2009/08/11(火) 13:28:02
現行のやつをカレントディレクトリに依存しないようにするのがいいけど、
とりあえず OFN_NOCHANGEDIR で試してみそ

782 :デフォルトの名無しさん:2009/08/11(火) 13:40:30
>>781
ちゃんと動くようになりました!
ありがとうございます、昨日ここで1日詰まってたんで助かりました^^;

普段からフルパスで書いてるほうがいいんですかね・・・?
ほとんどの場合カレントディレクトリ前提でソース書いてましたが…

783 :デフォルトの名無しさん:2009/08/11(火) 13:46:14
>>782
別にいい悪いはないが、相対アクセスをするときには常にカレントディレクトリがどこかを把握しておく必要がある。

784 :デフォルトの名無しさん:2009/08/11(火) 13:49:25
なるほど、たしかに相対する時はカレントディレクトリだとやりにくそうですね…
ありがとうございます、すごく参考になりました。

785 :デフォルトの名無しさん:2009/08/11(火) 14:04:09
>>784
老婆心ながら蛇足を描くと、
ゲームのようなデータファイルの多いソフトを開発する際は、相対アクセスの方が便利かもしれない。
VisualStudioのデバッグ時に作業ディレクトリを指定できるのでそこでカレントディレクトリを設定しておくと、
必要に応じて複数の動作環境を用意できる。
サンプルゲームが複数になってきたらそれで切り替えられる。

786 :デフォルトの名無しさん:2009/08/11(火) 14:44:23
Xファイルを別フォルダに入れて読み込んでも問題ないのに
テクスチャをXファイルと一緒に入れるとテクスチャだけ読み込まないのはなぜですか?

一応Xファイル内にはA.BMPのように書いて同じところにあるファイルを読むようにしているんですが・・・

787 :デフォルトの名無しさん:2009/08/11(火) 15:04:19
X-File内の画像のパスを画像ファイルのあるパスに設定しろ。
X-Fileを読み込むときに勝手にカレントディレクトリを移動してくれる訳じゃないぞ。

788 :デフォルトの名無しさん:2009/08/11(火) 15:09:49
やっぱりそれしかないですか・・・
わかりました

789 :デフォルトの名無しさん:2009/08/11(火) 18:01:10
やっぱりパス関連の面倒を見てくれるローダは、さっさと自分で作るべきだよな

790 :デフォルトの名無しさん:2009/08/11(火) 18:04:54
>>775
ようするにその角が丸みを帯びてるのか鋭いままなのかは計算では設定出来ないと言いたいのか?

791 :デフォルトの名無しさん:2009/08/11(火) 18:11:54
その通り

792 :デフォルトの名無しさん:2009/08/11(火) 19:19:55
どうでもいいが、頂点法線のスムージングの話で「鈍角」「鋭角」という用語を使うやつは初めて見た

793 :デフォルトの名無しさん:2009/08/11(火) 19:52:30
「どうでもいい」のにレスする意味が分からない

794 :641:2009/08/11(火) 19:59:15
なんにしろ、読み返してみれば鈍角さんがなんのことを言っているのかを
解明するだけの流れだったな。

795 :デフォルトの名無しさん:2009/08/11(火) 21:08:11
>>792
鈍角は90度を超える角で、鋭角は90度未満の角だよな、
小学校かどっかで習う範囲だと。

796 :デフォルトの名無しさん:2009/08/11(火) 22:46:42
だから誰もそんなことは問題にしてないんだって

797 :デフォルトの名無しさん:2009/08/11(火) 22:53:36
スムージングを使わずに単にポリゴン数を増やせばいいだけじゃん

798 :デフォルトの名無しさん:2009/08/11(火) 22:55:37
本当にそれでいいと思うのならそうすればいい。

799 :デフォルトの名無しさん:2009/08/12(水) 00:42:40
必要になったら実装すればいいだけで、大抵は平均化だけで十分。
というかデザイナとの相談だな。

800 :デフォルトの名無しさん:2009/08/12(水) 00:54:41
D3DXLoadMeshHierarchyFromX(

LPD3DXFRAME* ppFrameHeirarchy,
LPD3DXANIMATIONCONTROLLER* ppAnimController
この部分をXファイルじゃなくて計算で組み立てたいんだが
どっかに解説したサイトとかサンプルとかありませんかね?
この単語で検索すれば出てくるとかヒントでも

801 :デフォルトの名無しさん:2009/08/12(水) 00:56:39
平均化だけで十分って、立方体とかが悲しいことになるぞ。
相談も何も普通に法線を含めればいいだけの話だろ。

802 :デフォルトの名無しさん:2009/08/12(水) 00:59:11
>>800
自分でモデリングソフトのアニメーション部分を作るつもりなのか?
というかそれ以前にプログラム云々以前で、
アニメーションを作る工程をやったことがあるのか?

803 :デフォルトの名無しさん:2009/08/12(水) 01:02:34
>>802
モデリングソフトのようなものを作ってまして

804 :デフォルトの名無しさん:2009/08/12(水) 01:10:48
またお前か

805 :デフォルトの名無しさん:2009/08/12(水) 02:07:36
DirectXのプログラミングはすぐに次のバージョンに移れるものですか?
最近DIrectXを始めたばかり、というか 9 か 10 を勉強するかで悩んでいます。
現在使用しているPCがWindowsXPで10が扱えまないので9にしようと考えていたのですが、
今後新しいOSが普及して10以降が主流になったりすると置いてかれるような気がしまして。
そのPCも大分ガタが来たので10が対応しているPCに買い替えることも考えています。
今は10対応といえばvistaくらいでしょうが・・・
   

806 :デフォルトの名無しさん:2009/08/12(水) 05:09:57
FromX使わない方が勉強になるね
頂点情報をバイナリ化したりとか色々出来るようになるし


807 :デフォルトの名無しさん:2009/08/12(水) 05:15:28
>>805
10はシェーダ必須だから敷居が高め。
まず9をFVF使用で書けるようになってから、9のシェーダ、10のシェーダと行くのが比較的平坦な道のりだと思う。
多分言ってる意味分かんないと思うけど要するに9のチュートリアルから始めていいんじゃないかなということだ。

808 :デフォルトの名無しさん:2009/08/12(水) 08:52:28
Easy Link Libraryの他にdirectx用のライブラリってありますか?

809 :デフォルトの名無しさん:2009/08/12(水) 08:56:42
たくさんある。

810 :デフォルトの名無しさん:2009/08/12(水) 09:07:07
9でやった方が楽。
10は抽象化されていて、慣れてないと途方に暮れる。
10を改造して11にするのは難しくはなさそう。
製品を売るなら9。
趣味のライブラリなら、9&10共用。将来は10を捨てて9&11でもいい。


811 :デフォルトの名無しさん:2009/08/12(水) 09:30:14
将来を見据えるなら11オンリーだろw
Windows7が出てしばらくすればさすがにXPはかなり数が減るし
その頃にはDirectX9世代のビデオカードなんて淘汰されてるよ。
現状でさえ3世代前の代物なんだから。

812 :デフォルトの名無しさん:2009/08/12(水) 09:40:05
11は今日からプログラムに取り掛かれない

813 :デフォルトの名無しさん:2009/08/12(水) 11:20:14
>>811
>Windows7が出てしばらくすればさすがにXPはかなり数が減るし
そうかな?

814 :デフォルトの名無しさん:2009/08/12(水) 11:24:58
自分が必要だと思う環境でプログラムを組めばいい。
他人に対してどうこう言う問題じゃない。
この分野の人間は自分がやっていることを他人に押しつけたがる者が少なからずいるが、
それは誰のためにもならない。

815 :デフォルトの名無しさん:2009/08/12(水) 11:32:41
DirectX9
・情報が豊富
・今からでもプログラム可能
・ゲーム作って配布するとしても、流石にDirect9対応必須をうたっていいと思う

DirectX10
・情報そこそこ
・Vistaなら今からでもプログラム可能
・ゲームなどを売るにはつらい(XPユーザーが多いから)

DirectX11
・情報少ない
・将来的に主流になりそう
・今からプログラムするのは困難

とりあえず9で勉強して、おいおい必要に応じてうつればいいかと

816 :805:2009/08/12(水) 11:54:56
レスありがとうございます。今は9で勉強しておくことにします。

817 :デフォルトの名無しさん:2009/08/12(水) 11:59:13
おまいらってやたら詳しいけど、趣味なの?本職なの?

818 :デフォルトの名無しさん:2009/08/12(水) 12:51:59
うるせえ黙れ

819 :デフォルトの名無しさん:2009/08/12(水) 18:29:21
こんなマッチョじゃ感情移入できない
アドルは永遠の優しい夢見る少年だろう
どうみても童貞じゃないし


820 :デフォルトの名無しさん:2009/08/12(水) 21:33:17
>>813
いずれにしろDirectX10やDirectX11対応のゲームが増えてくれば
Vistaか7のどちらかにするしかないがVistaは選択肢にはいらないだろ。

どうせ2,3年もすればXPも売られなくなるし
新規でPC買えば全部Windows7化されてるだろ。

いつまでもDirectX9+XPにしがみ付いて技術的に取り残されるのも馬鹿らしい。
趣味でやる分にはDirectX9でぜんぜん問題ないと思うけどね。

821 :デフォルトの名無しさん:2009/08/12(水) 21:56:00
固定機能でお茶を濁したクズ本が消えるかと思うと
清々するわ

822 :デフォルトの名無しさん:2009/08/12(水) 22:04:30
逆に本がぜんぜんでなくなってるよな。
もうついていけてないんだろうか。

823 :デフォルトの名無しさん:2009/08/12(水) 22:06:45
ていうかゲームなんて作るのやめろ
ゲーPGなんてまったく金にならないし
本とか買ってまで作るなマジで

824 :デフォルトの名無しさん:2009/08/12(水) 23:13:49
金が目的なら株でもいじってろよw

825 :デフォルトの名無しさん:2009/08/13(木) 11:28:23
3Dゲームのエフェクトを強引にキャンセルさせてCPU負荷を下げる方法ってないですか?

826 :デフォルトの名無しさん:2009/08/13(木) 11:35:32
>>825
えーと、それは自分が作ってるゲームに関する質問?

827 :デフォルトの名無しさん:2009/08/13(木) 12:45:36
某エロゲのモザイク的な修正がパーティクルで実装されているので

828 :デフォルトの名無しさん:2009/08/13(木) 13:00:53
実行ファイルを書きかえれ

829 :デフォルトの名無しさん:2009/08/13(木) 16:10:27

工エエェェ(´д`)ェェエエ工工


830 :デフォルトの名無しさん:2009/08/13(木) 23:35:07
あそこが見たいだけじゃないのか?

831 :デフォルトの名無しさん:2009/08/13(木) 23:40:13
>>828
長門さんがこちらを見ています

832 :デフォルトの名無しさん:2009/08/14(金) 07:20:57
脳内変換だ

833 :デフォルトの名無しさん:2009/08/14(金) 11:11:36
アニメーションコントローラーを使ったアニメーションで
1ループ分のアニメーションの完了を検知したいのですが、

// if(アニメーション時間 >= 1ループかかる時間)
if(AnimationSet(AnimationID)->GetPeriodicPosition( ? ) >=
AnimationSet(AnimationID)->GetPeriod())

このような判定で合っているでしょうか?
合ってる場合、「?」の部分の引数にはなにを指定したらいいのでしょう?

msdnの解説では「アニメーションセットのローカル時間」と書いていますが、
GetPeriodicPosition()の戻り値こそがローカル時間ではないのでしょうか?

834 :デフォルトの名無しさん:2009/08/14(金) 11:34:13
なんかもう、誰も使ってない、仕様があやふやだし自分で作らない限り無間地獄から抜けられない
という結論が数年前から変わってない。


835 :デフォルトの名無しさん:2009/08/14(金) 11:56:07
いやいやDirectX使わないとXBOXやWindowsでゲーム作れないって

836 :833:2009/08/14(金) 12:32:32
自己解決(´・ω・`)
GetPeriodicPosition()はグローバルな時間をローカル時間に変換するメソッドのようで?
参照すべきだったのはトラックの方でした

837 :デフォルトの名無しさん:2009/08/14(金) 21:41:02
シェーダーで描画してるんですが
固定機能のフォグって同時に使えるんですかね?
やってみたらかからないので、
やはりピクセルシェーダーで自前でかけるんでしょうか?

838 :デフォルトの名無しさん:2009/08/14(金) 21:53:15
ピクセルシェーダを自前で書くのなら、自前でかける

839 :デフォルトの名無しさん:2009/08/16(日) 02:53:20
DirectXのプログラミングを始めようとおもうのですが
これはSDKのチュートリアルにのってる最新のもの?から勉強していって良いのでしょうか?
それとも以前のバージョンから順に勉強していくほうが良いのでしょうか?


840 :デフォルトの名無しさん:2009/08/16(日) 02:55:23
>>839
通常はそんなめんどくさいことはする必要はない。
ただしバージョンごとにできることと動かせる環境に差異があるので、
DirectXのバージョンを比較した記事をいくつか読んで、
自分の作りたいものがバージョンいくつがふさわしいか最初に決めること。

後々でバージョンを変更するのはプログラムを作り直すようなことと等しい。

841 :デフォルトの名無しさん:2009/08/16(日) 02:58:53
directxを更に使いやすくしたライブラリって通称名とかありますか?
また鉄板の物はありますか?

842 :デフォルトの名無しさん:2009/08/16(日) 03:05:53
>>841
山ほどある。
が、結局DirectX自体と直接格闘したほうが得るものが多い。
お勧めのライブラリはほかのヤツらよろしく。

843 :デフォルトの名無しさん:2009/08/16(日) 03:07:37
>>842
なるほど、ありがとうございます
ある程度作れるようになったら、改めて探してみることにします

844 :839:2009/08/16(日) 03:10:57
>>840
なるほど、勉強になりました。
ありがとうございます


845 :デフォルトの名無しさん:2009/08/16(日) 03:53:38
directx自体を理解してないとライブラリの使い方も理解出来ないからライブラリは無駄w

846 :デフォルトの名無しさん:2009/08/16(日) 03:57:10
そうそう、面法線を計算して頂点を共有する面頂点の合計を正規化したものを頂点の法線に設定してみたけど
球体の見た目はかなり綺麗に仕上がる
角度で適用するかどうか判別すれば尖った部分も表現出来るんじゃないか

847 :デフォルトの名無しさん:2009/08/16(日) 07:25:33
>>845
さすがにそれはない。
もしそうならEasyLinkLibraryはあんなに流行らなかった。

848 :デフォルトの名無しさん:2009/08/16(日) 08:04:06
>>846
モデルデータ制作者の意図のをエスパーのごとく判断するプログラムを作らない限り無理。
だったら普通に法線をデータに含めればいいだけだろ。
いったい何がしたいんだ?

849 :デフォルトの名無しさん:2009/08/16(日) 08:05:14
大抵のライブラリは自由度を優先しててただのDirectXラッパーで終わってるから意味ないんだよ
例えば視点移動とかエフェクトとかがすべて内包されてて使用者はその中から選ぶだけとか
そこまでやってあるライブラリなら意味があると思うけどないでしょ
仮に誰かが作ったとしても無料では出さないでしょ

850 :デフォルトの名無しさん:2009/08/16(日) 08:06:43
>>849
それもうライブラリじゃなくてただのツクールだから。

851 :デフォルトの名無しさん:2009/08/16(日) 08:07:12
>>848
とりあえずただの頂点データだけのメッシュをフォトリアルに表示する方法を模索してる

852 :デフォルトの名無しさん:2009/08/16(日) 08:09:38
>>851
だからなんで頂点データだけにする必要があるのかを聞いているんだが。

853 :デフォルトの名無しさん:2009/08/16(日) 08:11:10
>>849
Irrlichtとかがまさにそれじゃないか?

854 :デフォルトの名無しさん:2009/08/16(日) 08:13:38
>>852
ただのモデルビューアだから、決まったものを表示するわけじゃないので
最終的にはゲームを作りたいけど、とりあえずビューア作って勉強しつつライブラリに包括していってる
ツクールの心臓部分になるかもしれない

855 :デフォルトの名無しさん:2009/08/16(日) 08:14:47
法線がなかったらライティングしない、
あるならライティングする、が普通のモデルビューアーの挙動だと思うが

856 :デフォルトの名無しさん:2009/08/16(日) 08:17:19
だから最終目標がツクールレベルだから、法線さえ知らなくても最新ゲーム並みの画像が出せるライブラリを作ってる
自分用にw

857 :デフォルトの名無しさん:2009/08/16(日) 08:22:21
法線なしで最新ゲームなみの画像とはこれはこれは大したもんだ。
デザイナーだったら3秒で投げ捨てろって言うライブラリだな。

858 :デフォルトの名無しさん:2009/08/16(日) 08:23:54
自動生成した感じでもかなりリアルだけどな

859 :デフォルトの名無しさん:2009/08/16(日) 08:35:18
エッジの抽出をどうすんだって話じゃねえの

860 :デフォルトの名無しさん:2009/08/16(日) 09:13:15
モデリングソフトで簡単に出力できるものを、わざわざ利用しない理由の答えになっていない。

カラーで出力できるのに、わざわざモノクロ写真からカラー写真にしろと言っているのが理解できているのか?

861 :デフォルトの名無しさん:2009/08/16(日) 09:55:00
モノクロ写真をカラーにする技術は重宝されてるし、画像処理では主流の研究課題ですけど

862 :デフォルトの名無しさん:2009/08/16(日) 10:00:14
頂点法線の取り扱いについて、多少話しが振れてくれれば
得るものもあるが、デザイナとかモデリングソフトとか
得るものが何もない。

>>モデルデータ制作者の意図のをエスパーのごとく判断するプログラムを作らない限り無理。
別にモデルデータ制作者の意図を反映する必要はない。

863 :デフォルトの名無しさん:2009/08/16(日) 10:35:16
>>861
元のツールがカラーで出力できるんだからそれでいいだろって話してんだろ。

864 :デフォルトの名無しさん:2009/08/16(日) 10:36:12
>別にモデルデータ制作者の意図を反映する必要はない。
デザイナーに言ったら殴り飛ばされそうなセリフだな


865 :デフォルトの名無しさん:2009/08/16(日) 10:49:53
何小難しい討論してんだ

正確に描画したいなら法線をつけて出力する。
法線がない時は「とりあえずそれなりに描画する」ってやりたいだけだろ?

別にD3DXにだって、法線の自動生成機能はあるけど、別に批難するやつはいないだろ

866 :デフォルトの名無しさん:2009/08/16(日) 11:17:19
そもそも法線を自動化することも出来るってだけで法線入れればそっちを優先するだけだがw

867 :デフォルトの名無しさん:2009/08/16(日) 12:48:52
質問です。
DrawTextを使って計算したFPSを表示したいのですが、LPSTR型に変換すると動かなくなります。LPSTR型にうまく変換する方法はありませんか?

868 :デフォルトの名無しさん:2009/08/16(日) 12:58:51
>>867
逆だ。プログラム全体をLPWSTRで統一するんだ。(Unicodeビルドしてるなら)
オレはそれが嫌になってC++でWindowsプログラム書くのをやめた。

869 :デフォルトの名無しさん:2009/08/16(日) 13:01:04
なんでこのスレにいるの?

870 :デフォルトの名無しさん:2009/08/16(日) 15:45:23
ヒトリデモ オオク ノ ワカモノ ヲ ユニコード ノ ジゴクカラ スクイタイ

871 :デフォルトの名無しさん:2009/08/16(日) 15:47:40
時代に取り残された老人は消えるべきだ

872 :デフォルトの名無しさん:2009/08/16(日) 17:19:28
SJISがデフォルトのOS上でプロジェクト新規作成したらユニコードデフォルトとか嫌がらせ以外の何者でもない

873 :デフォルトの名無しさん:2009/08/16(日) 17:36:36
時代に取り残された老人は消えるべきだ

874 :デフォルトの名無しさん:2009/08/16(日) 17:42:06
もはやSJISがデフォルトにはなっていないが、いったいいつの時代の話をしているんだ?

875 :デフォルトの名無しさん:2009/08/16(日) 18:31:50
今時のOSはユニコードが基本ってばっちゃが言ってたけど

876 :デフォルトの名無しさん:2009/08/16(日) 19:42:12
最近のOSがどうだろうが関係ねえ。
社内のツールがすべてSJIS前提だから選択肢ねーんだよ。
という会社けっこうあるんじゃない。



877 :デフォルトの名無しさん:2009/08/16(日) 19:57:32
オープンソースのぜんぶSJISなのにどうすんの

878 :デフォルトの名無しさん:2009/08/16(日) 20:00:01
ゲームのパラメータファイルとかは、基本SJISだからなぁ
わざわざユニコで書く奴いるか?

879 :デフォルトの名無しさん:2009/08/16(日) 20:07:20
ツールが吐き出すXMLもUTF8が使われている時代に何を言ってるんだろう?

880 :デフォルトの名無しさん:2009/08/16(日) 20:18:40
XML厨のプログラマが自己満足で環境を整備しないとSJISでズルズルいくね。
そして、運用する側はタイプ総量とタイプミスが激増して精神病むの。


881 :デフォルトの名無しさん:2009/08/16(日) 21:18:14
普通XMLはUTF-8で書くだろアホか

882 :デフォルトの名無しさん:2009/08/16(日) 21:19:58
UTF-8なら何も問題ないんだが、WindowsはUTF-16LEなわけよ。

883 :デフォルトの名無しさん:2009/08/16(日) 21:28:43
3D空間で人が平面上を動き回れる状態で色々試しています。
人が2m弱として、地面を1000m四方と巨大な板を置いているのですがバンプマップが上手くかかりません。
バンプマップで凹凸を表現するには細分化しないと効果が出ないものなのでしょうか。
テクスチャスクロールだけで地面の上を動いているように見せたかったのに
同じ絵(凹凸)の部分を色んな方向から見ても大して変化せず違和感があります。

884 :デフォルトの名無しさん:2009/08/16(日) 21:36:59
>>868
unicodeは使ってないです。あと、LPCWSTRじゃ引き算とかが出来なくて困ります。他に解決方法はありませんか?

885 :デフォルトの名無しさん:2009/08/16(日) 21:42:55
色んな方向から見て変化させるのは、パララックスマッピングとかでは?
バンプマッピングなら、光源の位置と向きを変化させると、見え方が変わると思います。

886 :デフォルトの名無しさん:2009/08/16(日) 21:43:32
>>884
というか、MBCSとUTF-16は相互に変換するAPIがあるぞ?
引き算の意味するところは分からんが。

887 :デフォルトの名無しさん:2009/08/16(日) 21:52:26
>>884
fpsをLPSTRに変換するというのは、もしかしてこういうことをやってるとか?
int fps = ..... ;
LPSTR lpstr = (LPSTR) fps;
DrawText( .... );

888 :デフォルトの名無しさん:2009/08/16(日) 22:13:19
文字コードの変換すら出来ないのはDirectX以前の問題だろ。
基本からやり直せ。

889 :デフォルトの名無しさん:2009/08/16(日) 22:13:48
>>887
大体そんな感じです。INTのポインタを入れたりしてみましたがダメでした。
漢字とかに変換するのが正解なんですかね?

890 :デフォルトの名無しさん:2009/08/16(日) 22:18:00
>>889
まずはC言語の入門書から読もうな。
このスレに来るのは3ヶ月くらい早すぎた。

891 :デフォルトの名無しさん:2009/08/16(日) 22:26:21
>>888
どうか可能か不可能かだけでもご教授を…

892 :デフォルトの名無しさん:2009/08/16(日) 22:41:28


893 :デフォルトの名無しさん:2009/08/16(日) 22:41:50
これは酷い

894 :デフォルトの名無しさん:2009/08/16(日) 23:56:53
木曽がわかってないのに応用問題を解こうとして話を難しくしてる

895 :デフォルトの名無しさん:2009/08/17(月) 00:02:15
初心者は死ね
それがこのスレの掟だ

896 :デフォルトの名無しさん:2009/08/17(月) 00:07:01
それはまた、エラいスレのタイトルと矛盾する掟だな。

897 :デフォルトの名無しさん:2009/08/17(月) 00:09:14
sprintf発見!確かに論外だ。
DIRECTXは続けるので、また詰まった時はお願いします。

898 :デフォルトの名無しさん:2009/08/17(月) 00:12:04
流石にCの初心者までは扱いきれんだろw

899 :デフォルトの名無しさん:2009/08/17(月) 00:15:49
CがダメならC#を使えばいいじゃない

900 :デフォルトの名無しさん:2009/08/17(月) 04:04:17
メッシュコンテナ(D3DXMESHCONTAINER 構造体)から面ごとのマテリアル対応情報を取りだそうとしてるんだけど、
pMesh->GetAttributeTable()メソッドで取り出した、属性テーブル(D3DXATTRIBUTERANGE 構造体)の中の「AttribId」ってのは
pMaterials[i]の添え字(i)に対応してるんでしょうか?

同じ属性テーブル内にある「FaceStart」というのも、インデックスバッファ内の面の構成データの格納順に対応してるのか疑問です・・・

901 :デフォルトの名無しさん:2009/08/17(月) 05:41:26
プロジェクトの設定をマルチバイト文字を使用するに変更すればいいだけじゃない

902 :デフォルトの名無しさん:2009/08/17(月) 05:44:49
>>900
出なかったからたぶんマテリアルとは関係ない
メッシュをマトリックスグループみたいに分割することが出来てそのインデックス情報を格納するんじゃないかと
でDraw???って関数でそのインデックスを指定するとその面だけが描画されるという

903 :デフォルトの名無しさん:2009/08/17(月) 05:49:18
ああ、そうか
マテリアルのインデックスを入れといてSetMaterialと連動させて
その面だけを描画すればマテリアルのインデックスという意味にもなるのか
まあ、ただ数字を入れて描画グループを分割出来るだけの代物だよ

904 :デフォルトの名無しさん:2009/08/17(月) 06:36:53
うーん、pMaterials[i]の添え字(i)と頂点番号(もとい、面番号)を関連付けるデータは
メッシュコンテナ内には無いのでしょうか?
メッシュデータ内の全頂点から、あるマテリアルが適用されている頂点を特定したいのですが・・・

905 :904:2009/08/17(月) 08:19:54
多分、自己解決

ボーンコンビネーションテーブル(LPD3DXBONECOMBINATION型)に
サブセット番号からメッシュデータ(最適化後)の頂点インデックスまで全て格納されてたので
そちらを参照することにしました

906 :デフォルトの名無しさん:2009/08/17(月) 12:04:53
ttp://marupeke296.com/DXGSmp_No26_WorldTransMatrix.html
このサンプルプログラムを使って
tiny.xを読み込んでも何もアニメーションしないのですが
なぜでしょうか?
ヒントだけでもいいので後生ですから教えてください・・><!

907 :デフォルトの名無しさん:2009/08/17(月) 12:37:41
DirectXで直線を引くにはどうすれば?(´・ω・`)
ポリゴンとかXファイルとかは表示できるのに・・・

908 :デフォルトの名無しさん:2009/08/17(月) 12:50:40
DrawPrimitiveでいけるやないかアホでんねん(´・ω・`)

909 :デフォルトの名無しさん:2009/08/17(月) 13:10:51
>>906
公式ならともかく、そこのページは管理人がちゃんと質問掲示板開いてるじゃないか
そっちで質問しる・;(`ε()゙

910 :デフォルトの名無しさん:2009/08/17(月) 13:41:09
なんなんだ・・・
釣りなのか本気なのか・・・

911 :デフォルトの名無しさん:2009/08/17(月) 18:35:49
残念ながら、釣りではありません。

912 :883:2009/08/17(月) 19:09:07
>>885
ありがとうございます。
基本的にはカメラを固定した状態でも動き回るものはバンプ、
それ以外はパララックスという使い方が良さそうですね。
もちろん場合に寄りますけど。


913 :デフォルトの名無しさん:2009/08/17(月) 20:17:35
>>907
ttp://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

914 :デフォルトの名無しさん:2009/08/17(月) 21:41:59
現在DirectXを使ってゲームを作っているのですが、
ボタンが後ろに隠れてしまっています。
なので、ボタンがある位置にスプライトを使ってボタン用の画像を
表示しているのですが、時差が出来たりしてうまく機能しません。
どうすれば、ボタンそのものを前面に表示出るのでしょうか?

915 :デフォルトの名無しさん:2009/08/17(月) 21:45:23
DirectXにボタンなど無い
DirectXにスプライトなど無い

916 :デフォルトの名無しさん:2009/08/17(月) 22:07:50
「Direct3Dで作っているゲームのキャラと地形のことで質問ですが…」
「Direct3Dにキャラや地形などない」

917 :デフォルトの名無しさん:2009/08/17(月) 22:09:25
>>915
ボタンはウィンドウズの標準のもので、
スプライトはID3DXSpriteです。

918 :デフォルトの名無しさん:2009/08/17(月) 22:21:26
ID3DXSpriteを使ってボタンの画像を描画しているのなら、
そもそも標準コントロールを使う必要性がない。

919 :デフォルトの名無しさん:2009/08/17(月) 22:51:14
>>918
それもそうですね。
DirectXのサンプルに使われているボタンは
標準コントロールを基にしてるのかと思ってましたが
今調べてみたら違いますね。
ご迷惑をおかけしました。

920 :デフォルトの名無しさん:2009/08/17(月) 22:53:43
まぁ、ツールを作る際にDirectXで描画されたものとWindosのコントロール併用することがあるから
色々試しても無駄にはならないことだけどね。


921 :デフォルトの名無しさん:2009/08/18(火) 01:52:08
Vistaか7ならどっちでも同じことだが

922 :デフォルトの名無しさん:2009/08/18(火) 08:20:52
同じじゃねえよ。
どれだけ馬鹿なんだ?

923 :デフォルトの名無しさん:2009/08/18(火) 08:36:24
D3DXLoadMeshHierarchyFromX
の必要な
LPD3DXALLOCATEHIERARCHY pAlloc,がインターフェイスのポインタと
なっているのですが
COMインターフェイスってなんでしょうか?
調べてもプログラムの再利用としか出てこないので全くわかりません。

924 :デフォルトの名無しさん:2009/08/18(火) 08:42:21
COMインターフェイスで検索しろ


925 :デフォルトの名無しさん:2009/08/18(火) 09:54:49
Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite and WIC have partial support)
あたりのサンプル実装がMSから出たぞ。
http://code.msdn.microsoft.com/WindowsAPICodePack

926 :デフォルトの名無しさん:2009/08/18(火) 10:52:08
>>923
そのあたりは、とにかくまずはサンプルコピペして、動きを見て、内容を理解し、自分で改良するしかない。
マジ。
理解しないままゲームとか作ると、あと後絶対苦労するから

927 :デフォルトの名無しさん:2009/08/18(火) 15:48:21
1000に近づいてますが、質問させてください。
2D板ポリゴンの描画についてなのですが、DrawPrimitive系は重いので
1回で複数枚の板を表示するようにしてみました。

D3DXVECTOR4 vPos;
D3DCOLOR color;
D3DXVECTOR2 vTex;
上のようなメンバーを持った頂点オブジェクトの配列Vertexを作り、
for(int i = 0; i < Max; i++){
Vertex[i*4].vTex=D3DXVECTOR2(0.0f, 0.0f);
Vertex[i*4+1].vTex=D3DXVECTOR2(1.0f, 0.0f);
Vertex[i*4+2].vTex=D3DXVECTOR2(0.0, 1.0f);
Vertex[i*4+3].vTex=D3DXVECTOR2(1.0f, 1.0f);
}
とu, vを初期化。そして、描画処理が入った数だけ
Vertex[Cnt*4].vPos = D3DXVECTOR4(left, top, 0.0f, 1.0f);
Vertex[Cnt*4+1].vPos = D3DXVECTOR4(right, top, 0.0f, 1.0f);
Vertex[Cnt*4+2].vPos = D3DXVECTOR4(left, bottom, 0.0f, 1.0f);
Vertex[Cnt*4+3].vPos = D3DXVECTOR4(right, bottom, 0.0f, 1.0f);
※color省略
Cnt++;
とし、SetTextureして
DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, Cnt*2, Vertex, sizeof(VERTEX);
としたらテクスチャがあらぬ方向に伸びました。何故か正しく表示できてるものもあるのですが・・・。
どこか根本的に勘違いしてるのでしょうか?ご指摘いただけませんか・・・。

928 :デフォルトの名無しさん:2009/08/18(火) 15:51:04
TRIANGLESTRIPがどういうものか調べてくるといい

929 :デフォルトの名無しさん:2009/08/18(火) 15:56:02
>>928
さっそくのご指摘ありがとうございます。
全部プリミティブが繋がってると言うことでしょうか?
他の部分は問題ないものとしてTRIANGLELISTで実装してみます。

930 :デフォルトの名無しさん:2009/08/18(火) 16:36:00
>>928
TRIANGLELISTでできました!1枚の板に6つ頂点使ってますが、
ちゃんとu,vと対応させたらOKでした。後は頂点インデックス使ったほうがいいですかね。
どれくらいパフォーンマンスに影響するかはわかりませんが。ともあれ即レス感謝です!

931 :デフォルトの名無しさん:2009/08/18(火) 16:42:06
>>930
すぐに非効率性に気づいてTRIANGLELIST+IndexBufferに移行するだろうがな。

932 :デフォルトの名無しさん:2009/08/19(水) 00:54:18
解決したんじゃなくて先送りしただけという事に気づくんだw

933 :デフォルトの名無しさん:2009/08/19(水) 06:23:18
D3DXMATRIX mat;
D3DXVECTOR3 vec;

パターン1:
lpdevice->SetTransform( D3DTS_WORLD, &mat );
→vec(頂点)をDrawPrimitivで描画

パターン2:
vec = vec * mat;
→vec(頂点)をDrawPrimitivで描画(SetTransformしない)


この2つは同じ結果になると思ってたんですが、どうやら違うらしいです。
SetTransformをせず、パターン1と同じ結果を得るためにはどうすればいいのでしょう?

934 :933:2009/08/19(水) 07:24:03
計算ミスってました(ノ∀`)

サーセン orz

935 :デフォルトの名無しさん:2009/08/19(水) 10:33:40
>>933
SetTransformしないってのは、座標変換しないって意味じゃないぞ。

初期値として単位行列が設定されているから、起動時から一度も設定してなければ
結果的に入力と出力が同じ座標になるが。

何もセットしなけいと別の場所でSetTransformした値が残っているので、
明示的に単位行列をセットすべき。

936 :デフォルトの名無しさん:2009/08/19(水) 14:55:22
ガラスのコップみたいな透明な物体を描画するには、
テクスチャーを透過するだけでいいんだな

937 :デフォルトの名無しさん:2009/08/19(水) 15:10:03
>>966
DeffUseのαを設定する形にすれば透過率を後から変更できるけどな。
いずれにせよ描画順に制約を受けるので注意。

938 :デフォルトの名無しさん:2009/08/19(水) 15:46:26
グラスの表現は透過率の調整だけじゃ出来ねえよ
プログラム以前に最低限のモデリングを経験してからにしろ。

939 :デフォルトの名無しさん:2009/08/19(水) 17:22:15
>>937
deffuseのアルファ値か、ありがとう!

>>938
屈折の話とかかな?
ヒントサンクス!


940 :デフォルトの名無しさん:2009/08/19(水) 20:09:42
マウスの左ボタンを押しているときにprintfDx関数で"Hello C World!\n"と出力し、
押してないときはclsDx関数で消すというコードを書いたつもりなのですがうまく消えてくれません。
どうしてでしょうか?初歩的な質問ですいませんが、よろしくおねがいします。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
char Key[256];

//ループ開始
while(ProcessMessage()==0 && ClearDrawScreen()==0 && !GetHitKeyStateAll( Key )){
//↑メッセージ処理   ↑画面をクリア  
//ココ↓
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
{ // 押されている
printfDx( "Hello C World!\n" ) ;
}
else // 押されていない
{
int clsDx( void );
}
//ココ↑
ScreenFlip();
}
DxLib_End();
return 0;
}

941 :デフォルトの名無しさん:2009/08/19(水) 20:18:12
>>940
ここはDirectXのスレです。

942 :デフォルトの名無しさん:2009/08/19(水) 20:21:55
>>941
スレ違いでしたか、すいませんでした

943 :デフォルトの名無しさん:2009/08/20(木) 17:55:06
DirectX9とc++でゲームを作っているのだが、ゲーム会社に就職する
には、どれくらいの技術が必要ですか?

よく聞く基準
ライブラリを作れるとか
簡単な3Dゲームが必要とか
2Dだったら、完成度が高くないといけない

だいたいでいいから基準みたいなものはありますか?

944 :デフォルトの名無しさん:2009/08/20(木) 17:57:57
ゲーム1本作れればおkよ

945 :デフォルトの名無しさん:2009/08/20(木) 19:03:07
人事担当じゃないから詳しいことは分からないけど、DirectXでゲームとして完成度の高いものを作っても意味ないよ。
一番は表現力。HLSLでSDKのサンプル以上の何かを出来ればそれだけで十分だったりも。
小規模な企業ならそれでいいけど、中規模以上の企業であれば数学・物理が人に教えることが出来るレベルじゃないとダメ。
ハードが変わっても求めたい答えとその計算方法が分かっていれば問題ないしね。

ちなみにバンナムは数学・物理中心で、簡単なC言語ソースの問題(穴埋め)。
任天堂は数学・物理中心、あとは一般常識と発想力。
大企業になると技術力をアピールする機会がなかったり、それ以前に蹴落とされるから注意してね。

まぁ、場違いな書き込みなんですけど。


946 :デフォルトの名無しさん:2009/08/20(木) 19:38:01
板違いな奴は入れないお
レスする方もたいがいだけどな

947 :デフォルトの名無しさん:2009/08/20(木) 19:45:42
ゲームとして完成度の高いもの(笑)

948 :デフォルトの名無しさん:2009/08/20(木) 21:04:59
そもそもここは進路相談のスレじゃない

949 :デフォルトの名無しさん:2009/08/21(金) 00:03:24
>>947
面白いゲーム作れなくて、数学物理が出来ても仕方ないと思うけどな。
単なる技術のデモンストレーションみたいなゲームは嫌だろ。
ゲームとしての捻りが無ければ売れんだろうし。

ま、だからって数学物理がいらないとは言わないが。

950 :デフォルトの名無しさん:2009/08/21(金) 00:09:04
>>949
そういう人ばかりいたら駄目だろうが、当然面白いゲームを作るための人というのもまた別に雇用するだろう。

951 :デフォルトの名無しさん:2009/08/21(金) 00:23:24
ゲームが面白いかどうかなんて、グラフィックや企画、仕様による所が大きいだろーが

つーか、ここはプログラマ板だろ
プログラマ(だぶん一人)が作った、転職、就職用ゲームが面白いかどうか、
なんて言ってるのは、ロートルの分って無いオッサンにしか見えん

挙動とかタイミングなんて言うなよ?
それこそ、そのサンプルプログラムで言い訳だろ

つまり、数学物理とは言わないが
技術スキルが分るサンプルやデモで十分

採用に面白い完成したゲームとか言ってる奴は、マジで組織のお荷物ぽっい
いい年して技術が無く、技術的な問題可決もトンチレベルの発想で
結局、若い技術ある奴が残業や休日出勤でカバーとか、ねw

952 :デフォルトの名無しさん:2009/08/21(金) 00:26:00
ゲームってこれからも
どんどんどんどんどんどん
難しくなってくのかな?
昔はフォトンマップとか非線形計画問題とか考えなくても
ゲーム作れたのに。
うざい、皆死ねばいいのに。

953 :デフォルトの名無しさん:2009/08/21(金) 00:36:28
うんうん、板もわきまえずに語りだす奴は皆氏ねばいいね

954 :デフォルトの名無しさん:2009/08/21(金) 02:14:38
ツールが増えてるからむしろ簡単になってるんじゃない?

955 :デフォルトの名無しさん:2009/08/21(金) 03:28:34
Physixスレがないのだがここでいいのかな

956 :デフォルトの名無しさん:2009/08/21(金) 10:00:13
よくない

957 :デフォルトの名無しさん:2009/08/21(金) 10:00:45
>>955
綴りが違うから見つかんないんだろう。
物理エンジン AGEIA PhysX
http://pc11.2ch.net/test/read.cgi/gamedev/1192632076/

958 :デフォルトの名無しさん:2009/08/21(金) 13:15:00
D3DXFRAMEのメンバのpMeshContainer構造体を
拡張したいのですが
参考になるサイトはありますか?

959 :デフォルトの名無しさん:2009/08/21(金) 13:41:56
>>958
マイクロソフトのサンプルも拡張しているぞ
スキンメッシュ周りは、本気でサンプルが最高に良いのでしっかり見るように

960 :デフォルトの名無しさん:2009/08/21(金) 13:43:01
ポリゴンにテクスチャを貼った際、
スケールでの縮小をすると画像が壊れてしまいます。
ただし、等倍以上(拡大)だと問題がないように見えます。
何か原因になりえそうなものはありますでしょうか?
RenderState 及び TextureStageState は
チェックしましたが問題がなさそうでした。

以下が参考画像です。
ttp://imepita.jp/20090821/489720
右下へ行くほど 0.75 倍されています。

961 :デフォルトの名無しさん:2009/08/21(金) 13:59:08
>>960
テクスチャ生成時のミップマップ設定を見直してみて

962 :960:2009/08/21(金) 14:11:02
>>961
CreateTexture の引数のことですよね?
以下の通りなので、0 だと思います。
GetDevice()->CreateTexture(
m_TexWid, m_TexHei,
0, D3DUSAGE_DYNAMIC,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
ppTex, NULL );
GetLevelCount() は 9 でした。

963 :960:2009/08/21(金) 14:28:09
>>961
解決しました。
D3DUSAGE_AUTOGENMIPMAP を追加して作成したところ、
問題なく表示することができました。
ありがとうございました。

964 :デフォルトの名無しさん:2009/08/22(土) 00:02:36
こんばんわ、色々調べたんですがどうしてもわからなかったのでヒントだけでもご教授ください

[現象]
D3DXCreateTextureFromFileInMemoryExが失敗します。
エラーコードは0x8007000e(E_OUTOFMEMORY)でした。

[調べたこと]
メモリ不足かと思いましたが、エラー発生時VRAMもメモリも余裕がありました。
MSDNやグーグルでも調べてみましたが原因がわかりません

[ソース]
○ロード部分

hr = D3DXCreateTextureFromFileInMemoryEx(pDEV,pData,DataSize,D3DX_DEFAULT,-1,-1,0,
       D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,colorKey,NULL,NULL,&pTexture);

○初期化部分(抜粋)
if (pD3D==NULL) pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (FAILED(pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&dmode))) return E_FAIL;
hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING, &D3DPPWin, &pDEV);
HRESULT hr = D3DXCreateSprite(g_pDEV, &g_pSprite);
hr= g_pDEV->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&g_pBackBuffer);

何か気になる点や何かしらの手がかりだけでもよろしくお願いいたします。

965 :デフォルトの名無しさん:2009/08/22(土) 02:10:01
読もうとしてるファイルはなんだって話

966 :デフォルトの名無しさん:2009/08/22(土) 03:02:14
>>964
pDataの中身がおかしいんじゃねーの?

967 :デフォルトの名無しさん:2009/08/22(土) 09:11:54
デバッグランタイムにしてエラーログみてください
以上

968 :504:2009/08/22(土) 11:59:39
以前XFileを独自形式で読取りたいと質問した物です
あれから色々試してみたんですがどうしても最後にわからない所があるので質問します

@当然ながら親から順番に計算するとします
Aウエイトと影響するボーンは考慮してあると仮定します

最終的な頂点座標=
頂点座標×SkinWeightsの最後にある対応したオフセット行列×行列(※1)×直前の親の行列

※1…この行列はAnimationSetの項目から作成したとする
 AnimationSetのFlgは0・1・2、すなわちScall(xyz)・Rotation(xyzw)・Trans(xyz)が必ずあるとする
 Scallは D3DXMatrixScaling
 Transは D3DXMatrixTranslation
 Rotationは D3DXMatrixRotationQuaternion
 でそれぞれ行列を作成した後に
 行列= Scall行列 × Rotation行列 × Trans行列 で作成

で現在調整しているのですがうまく動きません、
どこか見逃し等があるでしょうか?

969 :デフォルトの名無しさん:2009/08/22(土) 12:26:43
影響するのは親の行列だけじゃまいか?

970 :デフォルトの名無しさん:2009/08/22(土) 14:06:11
>>506でも同じく書いたけど
スキンじゃないアニメーションXfileは
描画出来ているの?
これが出来ているのといないのでは
影響範囲が違います。

971 :504:2009/08/23(日) 08:10:36
>>969
自分の直接関係するボーンの行列は使用しないんですか?

>>970
Tボーズをしている素のMeshの事ですか?

972 :デフォルトの名無しさん:2009/08/23(日) 09:42:17
>>971
自分の直接関係するのは親だろ。
手のひらは手首が親、手首はヒジが親、ヒジは肩が親・・・みたいな感じで。
例えば2倍の大きさで表示しようとしたら、>>968のを肩から見たとしても
肩:2倍 ヒジ:2倍x直前の親の行列(2倍)=4倍 手首:2倍x直前の親の行列(4倍)=8倍 ・・・
と手が巨大になってしまうわけで。

973 :デフォルトの名無しさん:2009/08/23(日) 11:29:58
>>971
スキンメッシュじゃない、
複数のメッシュのアニメーション付きXfileのこと。
要は、アニメとフレームの実装に間違いはないんだなって
聞いてるの。

>>972
それは間違い。

974 :デフォルトの名無しさん:2009/08/23(日) 15:11:16
>>973
実装じゃなくて元データがCreate...FromXで正常に動くかどうかってことだろw

975 :デフォルトの名無しさん:2009/08/23(日) 15:15:32
元データは正しいとの前提で、実装部分の問題点を検証しているんだろ。

976 :504:2009/08/23(日) 18:01:36
元データはビュアーやskinmeshのサンプルでtiny.xと差し替えたりしましたが
正常に動作しました。

ちなみにメッシュは1Meshです

977 :デフォルトの名無しさん:2009/08/23(日) 21:19:53
CPP
無駄に分割
デスマ行き

BOOL遷移じゃ
いけないのかな?

978 :デフォルトの名無しさん:2009/08/24(月) 03:33:18
スキンメッシュのアニメーションXfileに輪郭線を表示できるエロい人いる?

979 :641:2009/08/24(月) 03:38:32
輪郭線の出し方知ってりゃ出ない質問だな

980 :デフォルトの名無しさん:2009/08/24(月) 03:43:50
輪郭線だけがアニメーションしないんだがw

981 :デフォルトの名無しさん:2009/08/24(月) 09:27:13
まさかと思ったけどエッジ検出なんだなw
その辺は画像処理スレのがレベル高いわw

982 :デフォルトの名無しさん:2009/08/24(月) 09:29:59
視点とオブジェクトを同じに動かそうと思うんだけど
なんかオブジェクトがカクカクずれるのはなんで?

983 :デフォルトの名無しさん:2009/08/24(月) 09:46:35
最新のSDK入れてるんだけど、D3DXCreateEffectFromFileが
日本語パスからの読み込みに失敗します。
前からこんなだったっけ?

984 :デフォルトの名無しさん:2009/08/24(月) 10:31:17
何人もいると思うが…
ダイレクトセックスのスレかと思った

985 :デフォルトの名無しさん:2009/08/24(月) 10:48:29
半透明の四角形を表示しようと思って、色に0x55ff00ffを指定しましたが全く透明になりません。
どうすればいいのでしょうか。
directX初心者ですがお願いします。
HRESULT creatRect(int x,int y,int w,int h)
{
CUSTOMVERTEX vertices[] =
{
{ x, y, 0.0f, 0.0f, 0x55ff00ff, },
{ x+w, y, 0.0f, 0.0f,0x55ff00ff, },
{ x, y+h, 0.0f, 0.0f,0x55ff00ff , },
{ x+w, y+h, 0.0f, 0.0f, 0x55ff00ff, },
};
if(g_pVB!=NULL)RELEASE(g_pVB);
if( FAILED( g_pD3DDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
return E_FAIL;
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
return S_OK;
}

void fillRect(int x,int y,int h,int w)
{
creatRect(x,y,h,w);
g_pD3DDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pD3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
}

986 :デフォルトの名無しさん:2009/08/24(月) 11:09:09
レンダーステートで半透明になるように設定はしたのか?

987 :デフォルトの名無しさん:2009/08/24(月) 21:03:25
>>986
レンダーステートで設定したらできました。
有難うございました。

988 :デフォルトの名無しさん:2009/08/25(火) 14:06:47
DirectX11の対応OSって、WindowsVistaと7でしょうか?
XPが再サポートされるという記事を読んだような記憶があるのですが、ぐぐっても出てきません。
私の勘違いでしょうか?

989 :デフォルトの名無しさん:2009/08/25(火) 16:38:58
アフォですか?

990 :デフォルトの名無しさん:2009/08/25(火) 17:40:49
>>988
DX11 は Win7 じゃないと使えない。
WARP10 とか Feature Level の DX9 世代 GPU サポートと勘違いしてる?
結論を言えば、XP で DX10 以上は使えない。

991 :デフォルトの名無しさん:2009/08/25(火) 18:00:17
D3DX避けようとして、シェーダコンパイラを作るはめになるんですね
わかります

992 :デフォルトの名無しさん:2009/08/25(火) 18:14:30
>>990
DX11ってVistaで動かないの?
流石にそれはないと思うが、、

993 :デフォルトの名無しさん:2009/08/25(火) 18:35:26
>>992
DirectX 11は7からの対応と発表されているが、
実際には最新版のDirectX SDKをインストールすればWindows Vistaでも動作する。

とはいえ、正式なバージョンが出るまではなんとも言えないな。

994 :デフォルトの名無しさん:2009/08/25(火) 22:24:52
SetRenderTarget()で2枚分のテクスチャにDrawSubset()で描画して
2枚のテクスチャをプログラマブルシェーダでミックスして表示させようとしたのですが
背景色が表示されるだけで肝心のDrawSubset()で描画したメッシュが表示されません。
どうすればいいんでしょうか?

995 :デフォルトの名無しさん:2009/08/25(火) 22:28:25
笑えばいいと思うよ

996 :デフォルトの名無しさん:2009/08/25(火) 22:41:38
>>993
DX11がVista以降なんてとっくにMSが発表してるだろう
なにを自信満々に・・

997 :デフォルトの名無しさん:2009/08/25(火) 22:48:30
しかしgoogleで「DirectX11」と検索しても
何もヒットしないあたり、MSやる気ないの?死ぬの?

998 :デフォルトの名無しさん:2009/08/25(火) 22:54:16
【C++】 DirectX初心者質問スレ Part25 【C】
http://pc12.2ch.net/test/read.cgi/tech/1251208220/

999 :デフォルトの名無しさん:2009/08/25(火) 22:59:10


1000 :デフォルトの名無しさん:2009/08/25(火) 23:03:20
埋め

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

264 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)