2014-02-06 26 views
0

在两种情况下,我有一个THREE.ShaderMaterial,它没有正确渲染对象,省略了它的纹理。 在这两个例子中,中间对象是一个基本的THREE.MeshPhongMaterial错误的bindTexture(TEXTURE_2D,null);调用还是不好的着色器? Texture with three.ShaderMaterial

例1:http://jsfiddle.net/sG9MP/4/这是最靠近屏幕从未展示对象。 在这一个,它适用于renderer.render(...)但不composer.render(...)。

renderer.render(scene, camera); 
//composer.render(); 

例2:http://jsfiddle.net/sG9MP/5/在这里,我试图复制MeshPhongMaterial着色器作为基础,所以我可以修改它。我试图完美地复制它。我复制了uniform,vert,frag,并复制了对象中的内容。我看不出有什么不同,所以我不明白为什么它不像标准的Three.js phong着色器那样工作。

所以这是两种情况,我使用THREE.ShaderMaterial,它不正确渲染着色器,我不明白为什么。在第二个例子中(这是我真正需要修复的例子,第一个例子是一个旧的测试),在webGL检查器中,我发现场景通常看起来很好,直到出现“bindTexture(TEXTURE_2D,null);”通过three.js调用它。虽然有时它只是没有它而画画。在第一个例子中,它总是绘制没有它。

我觉得我必须错过渲染器或作曲者或某事中的某种标志。或者在我的第二个示例中,我试图复制Three.js phong着色器,也许我没有完美地复制某些内容。

这里的目标只是复制phong着色器,所以我可以修改它的uniform,vert和frag。可悲的是,我不能简单地.clone()它,因为vert和frag在编译后不能被修改。

回答

0

看起来像设置ShaderMaterial.map时,ShaderMaterial.uniforms.map.value未被一致地设置。

虽然我真的不明白这一点。在某些情况下,我有问题没有在ShaderMaterial下设置顶层。其他情况下我没有设置制服的问题。

在我的材料,我只是去,并将此:

for(var k in phongMat){ 
     if(typeof phongMat.uniforms[k] != 'undefined'){ 
      phongMat.uniforms[k].value = phongMat[k]; 
     } 
    }