我正在尝试从 Three.js 中的着色器访问场景的灯光。
这个问题几乎是重复的Three.js ShaderMaterial 灯光问题但对该问题的评论并不能帮助我解决问题。
这是顶点着色器:
#if NUM_DIR_LIGHTS > 0
struct DirectionalLight {
vec3 direction;
vec3 color;
int shadow;
float shadowBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
#endif
varying vec3 color;
void main() {
float r = directionalLights[0].color.r;
color = vec3(r,1.0,0.0);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position , 1.0);
}
以及相关的 ShaderMaterial:
var material = new THREE.ShaderMaterial({
uniforms: THREE.UniformsLib['lights'],
vertexShader: document.getElementById('vertexShader').innerHTML,
fragmentShader: document.getElementById('fragmentShader').innerHTML,
lights : true
});
我在这里发布了完整的示例代码:https://jsfiddle.net/zhkvcajs/
删除lights : true
呈现一个绿色的结,但它没有得到directionalLights
应该改变结颜色的信息。显然,lights : true
是必需的,但会导致错误。
如果您想使用场景灯ShaderMaterial
,你需要设置lights: true
.
var material = new THREE.ShaderMaterial( {
uniforms: uniforms,
vertexShader: document.getElementById('vertexShader').innerHTML,
fragmentShader: document.getElementById('fragmentShader').innerHTML,
lights: true
} );
三.js r.126
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)