前提・実現したいこと
ディレクションライトの処理を行っているシェーダをポイントライトに書き換えています。
なんかうまくいかないのでちゃんとポイントライトを実装したいです。
該当のソースコード
hlsl
1 // ピクセルシェーダのライトをいじっている処理 2 // コメントアウトしている処理がディレクションライトで 3 // そのすぐ下の処理がポイントライトです。 4 5 if (g_vLightDir.x != 0.0f || g_vLightDir.y != 0.0f || g_vLightDir.z != 0.0f) { 6 7 // 光源の方向 8 float3 PosWorld = mul(input.Pos, g_mtxWVP); // (光源の位置?,ワールドから射影までの変換合成行列) 9 //float3 L = normalize(-g_vLightDir.xyz); // 光源へのベクトル // ライト方向? 10 float3 L = normalize(input.Pos - PosWorld); // ポイントライト、ここが違う? 11 12 float3 N = normalize(input.Normal); // 法線ベクトル 13 14 // 視点へのベクトル 15 //float3 V = normalize(g_vCameraPos.xyz - input.PosForPS);// 視点へのベクトル 16 float3 V = normalize(g_vCameraPos.xyz - PosWorld); // ポイントライト、ここが違う? 17 18 // ここから下は関係ないと思いますがつながりがわからないと思うので載せておきます。 19 float3 H = normalize(L + V); // ハーフベクトル 20 Diff = g_vLightAmbient.rgb * g_Ambient.rgb + 21 g_vLightDiffuse.rgb * Diff * saturate(dot(L, N)); // 拡散色 + 環境色 22 Spec = Spec * g_vLightSpecular.rgb * 23 pow(saturate(dot(N, H)), g_Specular.a); // 鏡面反射色 24 Diff += Spec; 25 }
試したこと
direct3d11 必携のディレクションライトとポイントライトのソースを比較して自分のプロジェクトに組み込みました。
補足情報(FW/ツールのバージョンなど)
Windows10
Visual Studio Community 2019
DirectX11
回答1件
あなたの回答
tips
プレビュー