パフォーマンス上の理由から、シーン内に何百もの移動四面体を表示する必要があります。そこで、カスタム シェーダーを必要とする instancedbuffergeometry を使用します。
シーンには、通常のジオメトリ (非バッファ) といくつかのライト (煮詰めたスニペットを用意しました: https://jsfiddle.net/negan/xs3k1yz4/ ) を持つオブジェクトも含まれています。
私の問題は、四面体がシェーディングされていないため、照明がシーンの残りの部分にうまく収まらないことです。その理由はおそらく、私が作成したプリミティブ シェーダーにあります。
<script id="vertexShader" type="x-shader/x-vertex">
attribute vec3 offset;
attribute vec4 color;
varying vec4 vColor;
varying vec3 vNormal;
void main() {
vColor = color;
vNormal = normalMatrix * vec3(normal);
gl_Position = projectionMatrix *
modelViewMatrix *
vec4(position*1.0+offset,1.0);
}
</script>
<script id="fragmentShader" type="x-shader/x-fragment">
varying vec4 vColor;
varying vec3 vNormal;
void main() {
float di = 0.4*dot(vNormal,normalize(vec3(1.,1.,0.)))+0.4*dot(vNormal,normalize(vec3(1.,0.,1.)));
di = di+0.2;
vec4 vColor2= vColor*vec4(1.0,1.,1.,0.2)*di;
gl_FragColor = vColor2;// adjust the alpha
}
</script>
シーンで定義したライトにカスタム シェーダを適合させる方法はありますか? シェーダーはまた、指向性のある光の印象を与えないように顔をレンダリングします。頂点から色を補間するのではなく、単一の面を均等に照らしたいのですが、それを達成できませんでした。
ポインタやヘルプをいただければ幸いです。