0

私はコンピュータグラフィックスの初心者です(CGの基礎を1学期持っています)。

ImmediateRenderObjectを使用したTHREE.jsのシェーディング(フラットとスムーズの両方)に関する1つの質問:

同一平面上の三角形が、フラットシェーディングとスムーズシェーディングの両方で異なるシェーディングを行うのはなぜですか?下の写真でわかるように、三角形は正しい面の法線を持っています(つまり、三角形が置かれている平面に垂直な、すべて同じで、下の写真の青いものです)。頂点法線も正しく見えます(つまり、境界にある頂点の頂点法線、下の写真の赤い頂点を除いて、平面に垂直です)。

ひし形のジオメトリ(ImmediateRenderObjectとして)があり、そこから下部のCubeGeometryを減算します(THREE.CSGを使用)。

CSG操作の前後の両方で、面の法線は完全に正しいように見えますが、同一平面上の三角形は異なるシェーディングを取得します(頂点法線はダイヤモンドの鋭いエッジでは完全に正しいようには見えませんが、これは同一平面上のパーツに影響を与えないはずです。上部とさまざまな側面)。

なぜこれが起こるのか、そして正しいシェーディングを得るために私ができることは何ですか?助けていただければ幸いです。

前もって感謝します!:)

写真は次のとおりです。

フラットシェーディングの完全なダイヤモンド:http://i.stack.imgur.com/kWt6J.png

フラットシェーディングのカットダイヤモンドのトップ:http://i.stack.imgur.com/0OJZv.png

4

2 に答える 2

1

興味のある方のために、私の問題の解決策を見つけました:

ImmediateRenderObject を使用するとき、法線配列に頂点法線を入力しました。代わりに、面の法線でそれらを埋めて、すべてを平らにします。ただし、このソリューションでは、スムーズ シェーディングはサポートされていないようです。しかし、それは私の問題を解決します!

頑張ってね!:)

于 2012-07-03T13:12:49.570 に答える
0

それらが異なって照らされている場合は、それらが正確に同じ平面にないためです。四角形はレンダリング時に 2 つの三角形に分割され、これらの 2 つの三角形が同じ平面にない場合、異なる方法で照らされます。

于 2012-07-03T11:09:34.220 に答える