いつもお世話になっております
ライトや影などDxLibModelViewerと同じように描画したいのですがオープンソースで無いという事もあり、
全く同じ表現が難しいので質問させていただきます。
※以下にソースコードとスクリーンショットがあります
ttps://drive.google.com/open?id=11Qou4hbz9Sk62I_bYjcFzY7UF8wO66SX&usp=drive_fs
スクリーンショットのDxLibModelViewer(上)とソースコード実行(下)いずれも同じmv1ファイルを表示しているのですが、
DxLibModelViewerの方が繊細で綺麗に見えますが、ソースコードの方は少し違和感があります
お手数をお掛けしますが何卒よろしくお願いいたしますm(__)m
【環境】
DXLib 3.24e (先日共有頂いた最新バージョンです)
64bit
Windows11
i9-13900K
RAM 64GB
GPU RTX4070
Direct3DVersion DX_DIRECT3D_9 〜 DX_DIRECT3D_11 全て確認
【3Dモデルについて】
blenderで出力したfbx(ループテクスチャ+法線マップ+ラフネスマップ)
※ついでに別の質問する形になり申し訳ないですが、DxLibModelViewerでmv1に出力する際ラフネスマップが効きませんでしたが非対応でしょうか?
【DxLibModelViewerの設定】
表示->ライティング計算の使用 オン
表示->アンチエイリアシングの使用 オン
表示->ハードウェア頂点演算の使用 オン
表示->ピクセル単位のライティングを行う オン
【ソースコード内容】
//SetUseDirect3DVersion(DX_DIRECT3D_9);
//SetUseDirect3DVersion(DX_DIRECT3D_9EX);
//SetUseDirect3DVersion(DX_DIRECT3D_11);
// ウィンドウ設定
const int screenX = 1280;
const int screenY = 720;
SetFullSceneAntiAliasingMode(8, 8);
SetWindowSizeExtendRate(1.0);
ChangeWindowMode(TRUE);
SetGraphMode(screenX, screenY, 32);
SetWindowSize(screenX, screenY);
SetDoubleStartValidFlag(TRUE); // 多重起動可に設定
SetUseHardwareVertexProcessing(TRUE); // ハードウェア頂点演算の使用
// DXライブラリ初期化処理
DxLib_Init();
// 描画範囲
SetDrawArea(0, 0, screenX, screenY);
// バイニリア有効
SetDrawMode(DX_DRAWMODE_BILINEAR);
SetFullScreenScalingMode(DX_FSSCALINGMODE_BILINEAR);
//SetUseVramFlag(TRUE);
// Zバッファを有効化
SetUseZBuffer3D(TRUE);
SetWriteZBuffer3D(TRUE);
// mv1読み込み
//MV1SetLoadModelReMakeNormal(TRUE); // 法線の再計算
int model = MV1LoadModel("data/stage.mv1");
// ピクセル単位のライティングを行う
SetUsePixelLighting(TRUE);
// 点照明 (DxLibModelViewerのクリップボードから引用)
SetLightEnable(FALSE); // 標準ライトを無効にする
SetGlobalAmbientLight(GetColorF(0.0f, 0.0f, 0.0f, 0.0f));
int Light2Handle = CreatePointLightHandle(VGet(-1250.000f, 2187.500f, 0.000f), 6022.729f, 0.636f, 0.000f, 0.000f);
SetLightDifColorHandle(Light2Handle, GetColorF(1.000f, 1.000f, 1.000f, 1.000f)); // ディフェーズ(拡散光)
SetLightSpcColorHandle(Light2Handle, GetColorF(0.500f, 0.500f, 0.500f, 0.000f)); // スペキュラ(反射光)
SetLightAmbColorHandle(Light2Handle, GetColorF(0.000f, 0.000f, 0.000f, 0.000f)); // アンビエント(環境光)
// カメラのセットアップ (DxLibModelViewerのクリップボードから引用)
SetCameraPositionAndTarget_UpVecY(VGet(-0.000141f, 3839.392578f, -3233.579102f), VGet(0.000000f, 2500.000000f, 0.000000f));
SetCameraNearFar(100.000023f, 25000.003906f);
// 3Dモデルの描画
MV1DrawModel(model);
WaitKey() ; // キーの入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了