トップページ > 記事閲覧
ポリゴン描画関数について
名前:ポリ 日時: 2022/03/12 00:42

ポリゴン描画関数について3つ質問があります。 ====================================================================================== 1.ポリゴン描画関数はシェーダー版がありますが、シェーダー版を使用したほうが高速ですか? ====================================================================================== シェーダーの知識がないため今はまだ手が出せないのですが、 シェーダー版のポリゴン描画関数を使ったほうが普通のポリゴン描画関数より高速なのでしょうか? それともオリジナルシェーダーを使ってポリゴン描画も出来るよというだけの関数なのでしょうか? ======================================================================================== 2.ポリゴン描画関数に指定するテクスチャに異方性フィルタリングを設定する方法はありますか? ======================================================================================== ドローコールを減らすためにモデル描画関数ではなくバッファを使用してポリゴン描画関数で地形を描画したいのですが、 モデル描画関数にデフォルトで設定されている異方性フィルタリングをポリゴン描画関数で使用する方法がわからず、 ポリゴン描画時のテクスチャの見え方がモデル描画時と違って見えます。 MV1SetTextureSampleFilterModeでバイリニアを設定した場合のモデル描画と SetDrawModeでバイリニアを設定した状態でテクスチャを使用したポリゴン描画はほぼ同じ描画結果でした。 ポリゴン描画関数で異方性フィルタリングを設定したテクスチャを使用する方法はありますか?また、ない場合は追加出来ますか? =============================================================================================== 3.DrawPrimitiveIndexed3D_UseVertexBuffer2の引数StartVertex、UseVertexNumの意味について教えてください。 =============================================================================================== BaseVertex、StartIndex、UseIndexNumに適切な数値を指定すれば意図した描画結果が得られたのですが、 StartVertex、UseVertexNumは色々数値を入れてみたものの、何が変わったのか分かりませんでした。 この引数で何かを指定するのを諦めて2つに0を指定しても描画結果に不都合は起きていないように見えるのですが、0でも問題ないでしょうか?
メンテ

Page: 1 |

Re: ポリゴン描画関数について ( No.1 )
名前:管理人 日時:2022/03/12 12:36

> 1.ポリゴン描画関数はシェーダー版がありますが、シェーダー版を使用したほうが高速ですか? いえ、特にシェーダー版の方が高速ということはありません > それともオリジナルシェーダーを使ってポリゴン描画も出来るよというだけの関数なのでしょうか? はい、その通りです > 2.ポリゴン描画関数に指定するテクスチャに異方性フィルタリングを設定する方法はありますか? リファレンスに載っていない関数ですが、MV1LoadTexture という関数を使用して画像を読み込むと 異方性フィルタリングが適用できるグラフィックハンドルになります // 3Dモデルに貼り付けるのに向いた画像の読み込み方式で画像を読み込む // ( 戻り値 -1:エラー 0以上:グラフィックハンドル ) int MV1LoadTexture( char *FilePath ); 使い方は LoadGraph と同じです 更に、ポリゴンを描画する前に SetDrawMode( DX_DRAWMODE_ANISOTROPIC ); を実行しておくと 異方性フィルタリングが適用されたポリゴン描画となります よろしければお試しください m(_ _)m > 3.DrawPrimitiveIndexed3D_UseVertexBuffer2の引数StartVertex、UseVertexNumの意味について教えてください。 すみません、Direct3D 11 を使用する場合は StartVertex と UseVertexNum は内部では使用されず、 何の値を指定しても問題ありません StartVertex と UseVertexNum は Direct3D 9 を使用する場合には意味があって、 引数の内容は IDirect3DDevice9 のAPIである DrawIndexedPrimitive と同じになっています ( DrawIndexedPrimitive では StartVertex の名称は MinVertexIndex となっています ) <IDirect3DDevice9::DrawIndexedPrimitive method (d3d9.h)> https://docs.microsoft.com/ja-jp/windows/win32/api/d3d9/nf-d3d9-idirect3ddevice9-drawindexedprimitive StartVertex の意味は『頂点バッファ内で使用する頂点の最小番号』で UseVertexNum の意味は『最小番号から何個先の頂点まで使用するか』です 例えば頂点が 100個ある頂点バッファを使用する場合、頂点インデックスで指定する( 使用する )頂点の範囲が 20から60までだった場合( 0〜19 と 61〜99 の範囲の頂点を使用しない場合 ) StartVertex は 20 UseVertexNum は 40 となります 前述の通り Direct3D 11 ではこれらの指定をする必要が無いので StartVertex や UseVertexNum に有効な 値を指定する必要はありませんが、Direct3D 9 を使用する場合は正しい値を指定しないと、正常な描画結果が得られません ( 頂点バッファ内の頂点をすべて使用する場合は StartVertex は 0, UseVeretxNum は頂点バッファの頂点数を指定すればOKです )
メンテ
Re: ポリゴン描画関数について ( No.2 )
名前:ポリ 日時:2022/03/12 14:37

1.と3.については理解しました。ありがとうございます。 2.についても概ね理解したのですが、ついでに質問させてください。 SetMaxAnisotropyで異方性フィルタリングレベルが変更出来ると思うのですが、モデル描画関数のデフォルト値は4ですか? 3でも十分な結果が得られたのですが、テクスチャのように2の累乗にするべきですか?
メンテ
Re: ポリゴン描画関数について ( No.3 )
名前:管理人 日時:2022/03/13 04:48

> SetMaxAnisotropyで異方性フィルタリングレベルが変更出来ると思うのですが、モデル描画関数のデフォルト値は4ですか? モデル描画のデフォルト値は 16 となっています ( 値を大きくしても特に異常な負荷の上昇は見られなかったので、とりあえず最大値にしています )
メンテ
Re: ポリゴン描画関数について ( No.4 )
名前:ポリ(解決) 日時:2022/03/13 11:35

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

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存