トップページ > 記事閲覧
遠方に3Dモデルを描画すると一部が表示されない
名前:わひこ 日時: 2021/01/22 11:43

いつもお世話になっております。 DXライブラリの3D描画について質問がございます。 DXライブラリにて作成したゲームにて遠方からmv1拡張子の3Dモデルを描画すると 一部のポリゴンが描画されなくなる症状が発生します。   参考写真1の3Dモデルの前髪が   参考写真2のとおり見えなくなります。 他のポリゴン(マフラー、後ろ髪等)は正常に表示されるため、Zバッファ(深度情報)関係の処理の不具合ではなさそうです。 3Dモデル自体も前髪のポリゴンに特殊な処理(透過)をしていなさそうです。 参考ですが3D制作ソフトのメタセコイア3.1の場合、遠方から描画しても前髪は描画されました。(参考写真3) もし原因がありましたらご教示いただけると幸いです。 よろしくお願いいたします。 ☆参考写真は以下URLをダウンロードお願いします。  ttps://firestorage.jp/download/6de69aa2050a6d93da13cbe1eb255d9bcb28f313
メンテ

Page: 1 |

Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.1 )
名前:名無三 日時:2021/01/23 16:40

(気になったのでお伺いします) mqoを直接読み込んだ場合やMV1ModelViewerで読み込んだ場合の表示はいかがでしょうか?
メンテ
Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.2 )
名前:管理人 日時:2021/01/24 02:41

恐らく現象的にZバッファの精度が足りていないのだと思いますので( デフォルトではビット深度は16ビット )、 DxLib_Init の呼び出し前に SetZBufferBitDepth( 24 ); という記述を加えて、Zバッファのビット深度を24ビットに変更して実行してみてください m(_ _)m
メンテ
Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.3 )
名前:わひこ 日時:2021/01/25 11:36

本件につきまして DxLib_Init の呼び出し前に「SetZBufferBitDepth( 24 );」の記述を加えました。 結果は以下の通りです。   SwordBout.exe    ・・・ 一部のポリゴンが描画されませんでした(変化なし)   AnimationEditor.exe ・・・ 正常に描写されました   ※(サンプルゲーム「ttps://dxlib.xsrv.jp/SwordBout/」を一部改変したexeファイルです) No1.の質問の通りMV1ModelViewerにmqoを直接読み込んでみました結果、症状の再現を確認しました。(参考資料.pngを参照ください) 一方、比較用に表示しました色違いのポリゴンはぎりぎりの距離まで近づけましたが症状は再現しませんでした。 原因はmqoのZバッファのビット深度をのみならず3Dモデルにもありそうです。 0から前髪をモデリングし直し、動作確認してみたいと思います。 もし、上記検証に間違いありましたらご指摘いただければ幸いです。 DXライブラリの問い合わせ範囲外になりもうしわけございませんが mqoでも同様の症状に心当たりありましたらご教示お願いいたします。 ☆参考写真は以下URLをダウンロードお願いします。 ttps://firestorage.jp/download/2fdb2487e22e9e33e7582ac3541a3c5e2e6d3e76
メンテ
Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.4 )
名前:管理人 日時:2021/01/26 00:01

SwordBout でしたら、裏画面には直接描画せずに MakeScreen で作成した仮画面に対して 描画を行っているので、SetZBufferBitDepth とは別に、MakeScreen で作成する仮画面の Zバッファのビット深度を設定するための関数 SetCreateDrawValidGraphZBufferBitDepth を 使用する必要があります // SetDrawScreen の引数として渡せる( 描画対象として使用できる )グラフィックハンドルに // 適用するZバッファのビット深度を設定する int SetCreateDrawValidGraphZBufferBitDepth( int BitDepth ) ; SwordBout でしたら、GameMainRender.cpp の 86行目に g_GMRData.AntialiasScreenHandle = MakeScreen( GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT, FALSE ); ↑こちらのゲーム画面を描画する仮画面を MakeScreen で作成しているので、こちらの MakeScreen の前に SetCreateDrawValidGraphZBufferBitDepth( 24 ); という記述を増やせば MakeScreen で作成する仮画面のZバッファのビット深度も 24ビットに変更することができます よろしければお試しください m(_ _)m
メンテ
Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.5 )
名前:わひこ 日時:2021/01/28 15:50

管理人様 ありがとうございます! MakeScreen の前に SetCreateDrawValidGraphZBufferBitDepth( 24 ); を増やすことで SwordBout.exeも正常に描写されることを確認できました。 SwordBoutにつきましても書籍含め、ゲーム作成の参考として大変勉強になります。 お忙しい中、回答していただきありがとうございました。 本件は以上になります、今後ともよろしくお願いいたします。
メンテ
Re: 遠方に3Dモデルを描画すると一部が表示されない ( No.6 )
名前:管理人(解決) 日時:2021/01/28 23:41

正常に描画されたようで何よりです あと SwordBout がお役に立てられているようで何よりです ( お役に立てていると直接お聞きするのは初めてです(^ ^; ) また何かありましたらお書き込みください m(_ _)m
メンテ

Page: 1 |

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

   クッキー保存