トップページ > 記事閲覧
指定TriangleListのマテリアルインデックスの取得
名前:gufo 日時: 2018/04/22 12:34

いつもお世話になっております。 お忙しいところ申し訳ありませんが、モデル機能について質問があります。 現在モデルをTriangleList毎に描画するプログラムを作っていて TriangleListのマテリアルの情報を取得したいのですが 指定したTriangleListが使用しているマテリアルのインデックスを取得することは可能でしょうか? お手数おかけしますが、回答していただければ幸いです。
メンテ

Page: 1 |

Re: 指定TriangleListのマテリアルインデックスの取得 ( No.1 )
名前:管理人 日時:2018/04/23 01:28

『メッシュが使用しているマテリアル』を取得する関数と 『メッシュに含まれるトライアングルリスト』を取得する関数はありましたが 『トライアングルリストが使用しているマテリアル』を取得する関数はありませんでしたので追加しました よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 以下の関数を追加しました // 指定のトライアングルリストが使用しているマテリアルのインデックスを取得する int MV1GetTriangleListUseMaterial( int MHandle, int TListIndex ) ; よろしければお使いください m(_ _)m
メンテ
Re: 指定TriangleListのマテリアルインデックスの取得 ( No.2 )
名前:gufo(解決) 日時:2018/04/24 19:50

迅速なご対応をありがとうございます。 希望していた機能の動作を確認しました。 今後も宜しくおねがいします。
メンテ
Re: 指定TriangleListのマテリアルインデックスの取得 ( No.3 )
名前:gufo 日時:2018/04/24 23:11

申し訳ありません。(解決)を付けてしまいましたが、これに関係して気づいたことがあるので質問させてください。 DX_MV1_VERTEX_TYPE_NMAP_1FRAMEのモデルをMV1DrawModel()で描画すると視錐台外のモデルはドローコールが呼ばれませんが MV1DrawTriangleList()でTriangleList毎に描画すると視錐台外のモデルもドローコールが呼ばれます。 これは仕様通りの挙動でしょうか?(描画負荷軽減のためにMV1DrawTriangleList()でも視錐台カリングを有効にしたいです)
メンテ
Re: 指定TriangleListのマテリアルインデックスの取得 ( No.4 )
名前:管理人 日時:2018/04/25 00:13

はい、仕様となります 可視判定の情報の最小単位はフレームなので、それ以下の単位であるメッシュやトライアングルリスト単体での 描画では可視判定は行いません 申し訳ありませんが CheckCameraViewClip や CheckCameraViewClip_Box などを使用して自前で可視判定を行ってください m(_ _;m // 指定の座標がカメラの視界に入っているかどうかを判定する // ( 戻り値 TRUE:視界に入っていない FALSE:視界に入っている ) int CheckCameraViewClip( VECTOR CheckPos ) ; // 二つの座標で表されるボックスがカメラの視界に入っているかどうかを判定する // ( 戻り値 TRUE:視界に入っていない FALSE:視界に入っている ) int CheckCameraViewClip_Box( VECTOR BoxPos1, VECTOR BoxPos2 ) ; あと、負荷軽減という点ではトライアングルリスト毎に描画するより、メッシュ毎に描画したほうが高速なのですが、 何かトライアングルリスト毎で描画しなければならない事情があるのでしょうか? (・・
メンテ
Re: 指定TriangleListのマテリアルインデックスの取得 ( No.5 )
名前:gufo 日時:2018/04/29 11:34

質問への回答有り難うございます。 そして返信が遅くなり申し訳ありません。 >>あと、負荷軽減という点ではトライアングルリスト毎に描画するより、メッシュ毎に描画したほうが高速なのですが、 >>何かトライアングルリスト毎で描画しなければならない事情があるのでしょうか? (・・ 現在、モデルの移動速度を描画対象テクスチャに出力するために前フレームのローカルワールド行列を頂点シェーダに与えるというプログラムを作成しています。 そこで、頂点シェーダをVertexType毎に切り替える必要があると思ったのですが、 VertexTypeを調べる関数がMV1GetTriangleListVertexType()とTriangleList単位で取得するものだったので、 モデルのトライアングルリスト毎に頂点シェーダを切り替えながら描画するプログラムを作成しました。
メンテ
Re: 指定TriangleListのマテリアルインデックスの取得 ( No.6 )
名前:管理人 日時:2018/04/30 01:38

ご返答ありがとうございます なるほど、確かにオリジナルシェーダーを使用して描画する場合はトライアングルリスト毎に 描画を分ける必要がありますね・・・ 疑問が解消されました、ありがとうございます m(_ _)m
メンテ

Page: 1 |

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

   クッキー保存