0

これが可能かどうか(または正しい質問をしているかどうか)はわかりません。頂点/インデックスがあり、DirectX 9.0 のシーンでレンダリングしています。ここで、アンビエント ライトとディフューズ ライトを追加し、各頂点の計算された最終結果のディフューズ シェードを取得したいと思います。つまり、基本的には、太陽を配置してから、別のポイント ライトを配置します。Blenderのやり方と似ていると思います。次に、各頂点の最終結果を取得し、それをファイルに静的に書き込みます (動的照明なし)。次に、頂点ごとに静的な拡散色を使用するゲームに入ります。したがって、カメラや照明には依存せず、静的な点/太陽のみに依存します。

エクスポート用の最終頂点の最終 RGB を取得できないように見えるので、DirectX ライティングを使用できないと思いますか?

アルゴリズムを持っている人はいますか?または、何らかの方法で DirectX にライトを追加して、最終結果を得る方法はありますか?

4

1 に答える 1

0

質問を完全に理解しているかどうかはわかりませんが、私が理解している方法では、点光源からの照明を頂点の色に「ベイク」したいと言っていますか?

その場合は、デフォルトの directX シェーダーが最終的な頂点カラーを計算するために使用するのと同じ計算を使用できます。出力色は通常、次のように計算されると思います。

// saturate just clamps the resulting color values between 0 and 1.

out_ambient = saturate(vtx_ambient * ambient_light)
out_diffuse = saturate(vtx_diffuse * light_diffuse * -dot(vtx_normal, light_direction))

out_color = saturate(out_ambient + out_diffuse)

ポイント ライトを使用しているため、頂点とライトの位置から light_direction を計算する必要がありますが、これを使用すると、個々の頂点の結果の色が得られると思います。

私は自分でシェーダーを広範囲に使用していないので、結果を間違って計算した可能性があります.誰かがこれが正しいかどうかを確認できますか?

于 2013-01-13T07:03:47.603 に答える