为了提高性能,我需要在场景中显示数百个移动的四面体。因此,我使用instancedbuffergeometry,这需要一个自定义着色器。
场景还包含具有常规几何形状(非缓冲)和一些灯光的对象(我准备了简化的代码片段:https://jsfiddle.net/negan/xs3k1yz4/)。
我的问题是,四面体的着色不符合场景的光照效果。原因可能是我构建的基本着色器。
有没有办法使自定义着色器适应我在场景中定义的灯光?该着色器还以一种不显示定向光的方式呈现面。我宁愿让单个面均匀照亮,而不是从顶点插值颜色,但我无法实现这一点。任何指针或帮助都将不胜感激。
场景还包含具有常规几何形状(非缓冲)和一些灯光的对象(我准备了简化的代码片段: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>