トップページ > 過去ログ > 記事閲覧
モデルの描画結果について
名前:Aquid 日時: 2011/01/31 03:55

3Dモデル描画において一部の環境において、 描画結果が大きく異なってしまった事を報告いたします。 下記URLのモデルを用いて描画したところ、以下のような結果が得られました。 ttp://www.aquafactory.x0.com/download/p1ship.x ・WindowsXP + GeForce 8400GS ・Windows7 + Intel GMA4500 モデルの色の設定通りに描画される。 ・WindowsVista + Intel GMA 950 真っ白のモデルが描画される。 #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } //ライティング無効 SetUseLighting(FALSE); // 3Dモデルの読み込み int ModelHandle = MV1LoadModel( "p1ship.x" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetScale( ModelHandle, VGet( 50.0f, 50.0f, 50.0f ) ) ; MV1SetRotationXYZ( ModelHandle, VGet( PHI_F/2.0f, PHI_F, 0.0f) ) ; MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } なお、環境は以前報告した以下の件と同一です。 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1372

Page: 1 |

Re: モデルの描画結果について ( No.1 )
名前:管理人 日時:2011/02/05 23:23

ご報告ありがとうございます シェーダーモデル2.0が使用できない環境でライティングを無効にした状態で描画すると 今回ご報告いただいた現象が発生するようになっていました 修正版をアップしましたので、よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
Re: モデルの描画結果について ( No.2 )
名前:Aquid 日時:2011/02/09 04:02

更新した所、「WindowsXP + GeForce 8400GS」環境下においてモデルの色が適用されなくなりました。 「WindowsVista + Intel GMA 950」環境下においては変化無しです。 3Dにおいて、ライティングを使用しない場合、モデルに色をつけることは不可能なのでしょうか?
Re: モデルの描画結果について ( No.3 )
名前:管理人 日時:2011/02/13 19:12

> 3Dにおいて、ライティングを使用しない場合、モデルに色をつけることは不可能なのでしょうか? いえ、ライティングをしなくてもモデルに色をつけることは可能です ただ、状況が悪化してしまったということで・・・ うーん・・・謎です とりあえず私の環境でAquidさんが最初のお書き込みに載せられたサンプルプログラムを コンパイルしてみましたので、よろしければ実行ファイルと同じフォルダに p1ship.x を置いて実行してみていただけないでしょうか? https://dxlib.xsrv.jp/file/LightingOffDrawTest.zip
Re: モデルの描画結果について ( No.4 )
名前:Aquid 日時:2011/02/13 21:37

すいません、こちらで確認する際にxファイルを 古いバージョンのモデルビューアーで変換したmv1ファイルを使ってました。 改めてxファイルそのものを開いてみたところ、色が適応されておりました。 最新のモデルビューアーで保存しなおしたmv1ファイルにて、色が適応されることも確認しました。 ただ、この件とは別の事になってしまうのですが、 ライティングがオフの際にモデルの色を変更する為に、 マテリアルのライティングを書き換えを行っていたのですが、 これらが使われなくなってしまった(常にモデルの色になってしまう)事の代替手段は無いでしょうか?
Re: モデルの描画結果について ( No.5 )
名前:管理人 日時:

ご返信が遅くなり申し訳ありません Direct3D の固定機能パイプラインの仕様の関係で、ライティングをOFFにするとマテリアルの値は無視され、 頂点カラーの値がそのまま描画に使用されます なのでDXライブラリでは頂点カラーの無いモデルについては頂点カラーをモデルを読み込んだときの マテリアルカラー( ディフューズカラー )にすることでライティングがOFFになっている場合でも 一見マテリアルに設定されている値が使われているかのように見えるようになっています ただ、ライティングがOFFの場合は実際はマテリアルの色は使われていないので、読み込んだ後に MV1SetMaterialDifColor を使用してマテリアルの色を変更しても描画結果には反映されません この場合モデルの頂点カラーを変更するしかないのですが、適当な手段が無かったので機能を追加しました よろしければこちらのバージョンをダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 追加した関数は以下の二つの関数です // モデルの頂点カラーを現在設定されているマテリアルのディフューズカラーにする int MV1RefreshVertColorFromMaterial( int MHandle ) ; // 指定のモデルをモデル基本データも含め複製する // ( MV1DuplicateModel はモデルの基本データは共有しますが、こちらは複製元のモデルとは一切共有データの無いモデルハンドルを作成します ) // 戻り値 -1:エラー 0以上:モデルハンドル int MV1CreateCloneModel( int SrcMHandle ) ; MV1RefreshVertColorFromMaterial は頂点カラーをそのときモデルに設定されているマテリアルの ディフューズカラーにする関数です MV1CreateCloneModel はモデルの基本データ( 頂点、テクスチャ、フレーム、アニメーション )などの 情報も含めて複製する関数です 似た関数で MV1DuplicateModel というのもがありますが、こちらはモデルの基本データは派生元のモデルハンドルと共有 しているので、頂点

Page: 1 |