Three.js:菲涅耳着色器 - 灯光:真正的问题

时间:2013-08-04 16:05:19

标签: canvas three.js webgl fragment-shader fresnel

我对three.js示例fresnel shader有一个小问题。

'lights:true' - 如果这是'true',那么我会收到以下错误:

Uncaught TypeError: Cannot set property 'value' of undefined 

我很无能为力。感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

设置ShaderMaterial.lights = true时,渲染器会为您填充着色器灯光均匀参数。

但是你必须首先确保你的着色器有必要的灯制服。

THREE.FresnelShader不使用灯光;它依赖于环境地图。因此,设置lights: true将无效。

但是如果你想这样做,并且愿意修改着色器,你必须替换

var shader = THREE.FresnelShader;
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );

var shader = THREE.FresnelShader;

var uniforms = THREE.UniformsUtils.merge( [

    THREE.UniformsLib[ "lights" ],
    shader.uniforms

] );

three.js r.59