トップページ > 記事閲覧
MV1 についてのお願い
名前:レモン 日時: 2024/10/04 22:42

お世話になります 3D で動的に幾何学的なプリミティブ( 例えばフレキシブルに頂点を配置した四角形など )を MV1 形式で生成したいのですが頂点データとインデックスデータから MV1 形式のハンドルが 得られるような関数はありますでしょうか 自分では見つけられず、現在は一度テキスト形式の x 形式に変換しメモリからMV1を生成する関数 を利用しているのですが、x 形式への変換でコストパフォーマンスが非常に悪く難儀しております MV1 ではなくポリゴンを描画する DrawPrimitiveIndexed3D_UseVertexBuffer などもありますが そちらですと MV1 でサポートされている豊富な資源( シャドウマップ等 )が利用できず 何とか MV1 に変換して使用している状態です スキンメッシュなどでのモーションは使用しないので剛体メッシュのみで構わないのですが プログラマブルメッシュを MV1 で生成できる機能をご検討いただけないでしょうか 何卒よろしくお願い致します
メンテ

Page: 1 |

Re: MV1 についてのお願い ( No.1 )
名前:管理人 日時:2024/10/05 01:43

> 頂点データとインデックスデータから MV1 形式のハンドルが > 得られるような関数はありますでしょうか 今のところありません > 自分では見つけられず、現在は一度テキスト形式の x 形式に変換しメモリからMV1を生成する関数 > を利用しているのですが、x 形式への変換でコストパフォーマンスが非常に悪く難儀しております MV1形式は xファイルより複雑なので仮に MV1の読み込み関数を作成するとなると x形式への変換より 面倒な処理を書かなければいけなくなると思いますので、x形式にした後に読み込むほうが 簡単だと思いますが、『コストパフォーマンス』とは具体的には何を指しているのでしょうか?
メンテ
Re: MV1 についてのお願い ( No.2 )
名前:レモン 日時:2024/10/06 00:02

お返事ありがとうございます また言葉が足りず申し訳ありません パフォーマンスに関してですが、 テキスト形式 の x フォーマットに変換する際 大量の頂点座標やインデックスの数値を数字( 文字列への変換 )をしておりまして そこが速度的なボトルネックになっておりまして 数値から直接 MV1 を生成できないかと x フォーマットのバイナリ形式も考慮したのですが、調べてもフォーマットが わからず、やむを得ずテキスト形式にしておりました
メンテ
Re: MV1 についてのお願い ( No.3 )
名前:管理人 日時:2024/10/07 00:11

> パフォーマンスに関してですが、 > テキスト形式 の x フォーマットに変換する際 > 大量の頂点座標やインデックスの数値を数字( 文字列への変換 )をしておりまして > そこが速度的なボトルネックになっておりまして > 数値から直接 MV1 を生成できないかと 速度という意味では仮に頂点情報などの配列から直接 MV1 を生成するための関数を用意した場合、 xファイルに変換してから MV1LoadModel で読み込むよりは高速になると思いますが 渡された頂点情報を解析して MV1 データに変換する処理もそれなりに工程がある処理なので 頂点バッファーにデータを転送した後 DrawPrimitiveIndexed3D_UseVertexBuffer で直ぐに描画できる 場合と比べるとかなり遅いという点は予めご了承ください ご要望の『剛体メッシュの情報から MV1 を生成する関数』ですが、MV1 には頂点情報の他に マテリアル情報とテクスチャー情報が必要になります そして一つの MV1 に複数のマテリアル、テクスチャー、頂点情報を含めることができるのですが、 これらを全て一つだけ渡して MV1 を生成する簡易的な関数で良いということでしょうか?
メンテ
Re: MV1 についてのお願い ( No.4 )
名前:レモン 日時:2024/10/07 00:53

ありがとうございます 速度面の件承知いたしました > ご要望の『剛体メッシュの情報から MV1 を生成する関数』ですが、MV1 には頂点情報の他に > マテリアル情報とテクスチャー情報が必要になります > そして一つの MV1 に複数のマテリアル、テクスチャー、頂点情報を含めることができるのですが、 > これらを全て一つだけ渡して MV1 を生成する簡易的な関数で良いということでしょうか? はい、そちらで問題ございません。 お手数をお掛けして大変恐縮ですがよろしくお願いできればと思います
メンテ
Re: MV1 についてのお願い ( No.5 )
名前:管理人 日時:2024/10/07 21:30

了解しました 実装してみますので、数日ほどお待ちください m(_ _)m
メンテ
Re: MV1 についてのお願い ( No.6 )
名前:管理人 日時:2024/10/09 00:22

実装が完了しましたので、よろしければこちらをダウンロードしてください 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 12 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 指定の頂点データとマテリアル情報、テクスチャを使用したシンプルな3Dモデルのハンドルを作成する // Vertex : 頂点の配列の先頭アドレス // VertexNum : 頂点の数 // Index : 頂点インデックスの配列の先頭アドレス // IndexNum : 頂点インデックスの数( 3の倍数である必要があります ) // Material : マテリアル情報 // GrHandle : テクスチャとして使用するグラフィックハンドル( テクスチャを使用しない場合は DX_NONE_GRAPH を渡します ) int MV1CreateSimpleModel( VERTEX3D *Vertex, int VertexNum, unsigned int *Index, int IndexNum, MATERIALPARAM *Material, int GrHandle ) ; 使い方については注釈の通りです 正常にMV1ハンドルが作成できた場合はMV1ハンドルの値が返ってきます( 失敗したら -1 が返ります ) よろしければお試しください m(_ _)m
メンテ
Re: MV1 についてのお願い ( No.7 )
名前:レモン 日時:2024/10/09 23:49

お忙しい中での実装本当にありがとうございます さっそく使用して速度差など計測のうえご報告したいと思います
メンテ
Re: MV1 についてのお願い ( No.8 )
名前:レモン 日時:2024/10/10 01:30

速度テストのご報告 縦横に100分割した板ポリ( 三角分割 約1万頂点 )での速度計測を行いました 私の環境での結果となりますが [ デバッグモード ] x 形式への変換 280 〜 350ms MV1CreateSimpleModel での生成 35 〜 50ms [ リリースモード ] x 形式への変換 170 〜 210ms MV1CreateSimpleModel での生成 35 〜 50ms x 形式への変換と比較して劇的に高速化されました、本当にありがとうございます。 デバッグとリリースで MV1CreateSimpleModel の速度差はあまり出ない結果となりましたが これは元々がかなり最適化をしてくださった結果と思ってよいでしょうか 速度とは別になりますが、気になる点が3点ございましたので質問させてください 1点は MV1CreateSimpleModel の最後の引数を DX_NONE_GRAPH としてハンドルを生成後 MV1SetTextureGraphHandle でのテクスチャの再設定が無効となるようですがこちらは仕様と考えてよろしいでしょうか ※ あえて DX_NONE_GRAPH ではなく 0 を設定し、MV1SetTextureGraphHandle を実行したところ再設定できました 2点めは MATERIALPARAM に設定した値が反映されず、ハンドル生成後に MV1SetMaterialEmiColor などを使用して マテリアルの再設定を行っても反映されませんでした ( エミッシブを GetColorF(1,1,1,1) に設定してみても変わりませんでした ) 3点めは x形式で生成した MV1 とライティングが異なって( 全体的に暗く ) 見えているのですが、こちらもマテリアルに 関係していますでしょうか ディレクショナルライトの設定は ChangeLightTypeDir(VGet(0.0f, -1.0f, 0.0f)); としていて 立方体などは側面が真っ黒に描画されております 以上となります、よろしくお願いいたします
メンテ
Re: MV1 についてのお願い ( No.9 )
名前:管理人 日時:2024/10/11 00:42

無事高速化されたようで何よりです > デバッグとリリースで MV1CreateSimpleModel の速度差はあまり出ない結果となりましたが > これは元々がかなり最適化をしてくださった結果と思ってよいでしょうか DXライブラリはデバッグのライブラリも最適化を行っていますので、デバッグとリリースの速度差はありません > 1点は MV1CreateSimpleModel の最後の引数を DX_NONE_GRAPH としてハンドルを生成後 > MV1SetTextureGraphHandle でのテクスチャの再設定が無効となるようですがこちらは仕様と考えてよろしいでしょうか > ※ あえて DX_NONE_GRAPH ではなく 0 を設定し、MV1SetTextureGraphHandle を実行したところ再設定できました DX_NONE_GRAPH とした場合はモデルにテクスチャが一枚もない状態となりますので、MV1SetTextureGraphHandle ではなく MV1AddTextureGraphHandle を使用する必要があります // モデルで使用するテクスチャを追加する( グラフィックハンドルをテクスチャとして追加 ) // MHandle : 3Dモデルハンドル // Name : 名前 // GrHandle : グラフィックハンドル // SemiTransFlag : テクスチャに半透明のピクセルが存在するかどうか( TRUE:存在する FALSE:存在しない ) // AddressModeU, AddressModeV : テクスチャアドレスモード // FilterMode : テクスチャフィルタリングモード int MV1AddTextureGraphHandle( int MHandle, char *Name, int GrHandle, int SemiTransFlag, int AddressModeU = DX_TEXADDRESS_WRAP, int AddressModeV = DX_TEXADDRESS_WRAP, int FilterMode = DX_DRAWMODE_ANISOTROPIC ) ; また、メッシュのマテリアルにもテクスチャを使用する設定がされていない状態なので、MV1SetMaterialDifMapTexture で マテリアルが使用するテクスチャの番号を指定する必要があります なので、MV1CreateSimpleModel の内部では、GrHandle が DX_NONE_GRAPH 以外の場合は、以下のような処理を行っています MV1AddTextureGraphHandle( MHandle, _T( "Texture" ), GrHandle, FALSE ) ; MV1SetMaterialDifMapTexture( MHandle, 0, 0 ) ; > 2点めは MATERIALPARAM に設定した値が反映されず、ハンドル生成後に MV1SetMaterialEmiColor などを使用して > マテリアルの再設定を行っても反映されませんでした ( エミッシブを GetColorF(1,1,1,1) に設定してみても変わりませんでした ) >  > 3点めは x形式で生成した MV1 とライティングが異なって( 全体的に暗く ) 見えているのですが、こちらもマテリアルに > 関係していますでしょうか ディレクショナルライトの設定は ChangeLightTypeDir(VGet(0.0f, -1.0f, 0.0f)); としていて > 立方体などは側面が真っ黒に描画されております すみません、3Dモデルにマテリアルを追加する処理は書いたのですが、そのマテリアルを 『メッシュが使用するマテリアル』として指定するコードが抜けていてデフォルトマテリアルが 適用される状態となっていました… 修正版をアップしましたので、お手数で申し訳ありませんがこちらをお試しください 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 12 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: MV1 についてのお願い ( No.10 )
名前:レモン ( 解決 ) 日時:2024/10/12 10:03

修正版に差し替えたところ正常にマテリアルが適用されていることが確認できました シャドウマップ等も正常に適用されているようです 今回も本当にありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存