ActionScript Stage3D チュートリアルの例は、「そこに」かなりあります。初心者に動作するコードを提供しようとするすべての人に感謝します。そうは言っても、ウィキペディアのエントリで概説されているように、ランバート反射率を正しく処理していると思う例をまだ見つけたとは思いませんが、初心者として、おそらく実装を理解できなかっただけだと追加するのをためらっています。
これが、実装の基本的な要件であると私が考えるものです-光源の向きを比較できることです[私は意図的に、この議論を、太陽を模倣する「指向性ライト」ではなく、「指向性ライト」のより単純なケースに限定しています。スポット ライト'.] を、照らされる面の法線の向きに合わせます。
そして、ここに私が目にしている問題の核心があると思います。ほとんどの場合、オブジェクトのジオメトリが作成されているときに、面の法線の計算が実行されているということです。そのため、シェーダに渡される法線の値は、ローカル オブジェクト空間で表現されます。
この素晴らしいフォーラムの仕組みについて、CPU で使用されているセットアップ コードまたは GPU で使用されているシェーダー コードの特定の間違いを特定できるように、サンプル コードを提供することをお勧めします。私は多くの異なるフレームワークを使用してこの問題の例を見つけることができるので、私が必要としているのは、特定のコード化された解決策ではなく、写真のようにリアルなレンダリングを得るために実際に何が必要かを明確にすることだと思います.固定されたカメラの視点、移動しない光源、および鏡面反射などの考慮事項を無視するという単純な基本ケースのオブジェクト。
したがって、2 つのベクトルのドット積を実行する場合:
A. 照らされる三角形の面の法線を表す Vector3D 値は、3 つの頂点のオブジェクト空間値または変換後のワールド空間値を使用して計算する必要がありますか?
B. ワールド空間の値が必要な場合、動的に計算された通常のワークロードは、CPU または GPU の各レンダリング サイクルで実行する必要がありますか?
ありがとうございました。