Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js lightMap导致错误WebGLRenderingContext:GL错误:GL\u无效\u操作_Three.js_Webgl - Fatal编程技术网

Three.js lightMap导致错误WebGLRenderingContext:GL错误:GL\u无效\u操作

Three.js lightMap导致错误WebGLRenderingContext:GL错误:GL\u无效\u操作,three.js,webgl,Three.js,Webgl,我正在加载灯光贴图的jpeg文件 var texture=new THREE.ImageUtils.loadTexture(“textures/metal.jpg”) 然后我将纹理应用于THREE.MeshPhongMaterial var frontMaterial = new THREE.MeshPhongMaterial( { color: 0xfade7e, specular: 0xffffff, ambient: 0xaa0000,

我正在加载灯光贴图的jpeg文件
var texture=new THREE.ImageUtils.loadTexture(“textures/metal.jpg”)
然后我将纹理应用于THREE.MeshPhongMaterial

var frontMaterial = new THREE.MeshPhongMaterial( {
         color: 0xfade7e,
         specular: 0xffffff,
         ambient: 0xaa0000,
         lightMap:texture
    } )
完整错误消息为
WebGLRenderingContext:GL错误:GL\u无效\u操作:GL抽屉元素:尝试访问属性2中超出范围的顶点


有什么不对劲吗?所有浏览器中都出现错误。Three.js r.56

正如线程中@alteredq所解释的那样,
光照贴图
需要第二组UV

光照贴图的要点是,它们可以独立于其他纹理而存在,从而使其他纹理有机会获得更高的细节。光照贴图使用自己的UV坐标集(通常由某些灯光烘焙解决方案自动生成,而不是艺术家创建的主UV集)

使用与其他所有东西具有相同UV的光照贴图没有多大意义,因为这样你就可以通过将光照贴图与颜色贴图一起烘焙(这就是Rage使用的,它看起来很棒,但需要大量纹理)以更少的纹理成本获得基本相同的结果

此外,光照贴图应该是乘法的,而不是加法的。光照贴图的主要用途是预烘焙阴影和环境光遮挡,因此您需要能够使事物变暗

因此,您的问题的答案是
geometry.faceVertexUvs[0]
包含一组常见的UV;您需要向几何体添加
几何体。faceVertexUvs[1]


three.js r.56

正如线程中@alteredq所解释的那样,
光照贴图
需要第二组UV

光照贴图的要点是,它们可以独立于其他纹理而存在,从而使其他纹理有机会获得更高的细节。光照贴图使用自己的UV坐标集(通常由某些灯光烘焙解决方案自动生成,而不是艺术家创建的主UV集)

使用与其他所有东西具有相同UV的光照贴图没有多大意义,因为这样你就可以通过将光照贴图与颜色贴图一起烘焙(这就是Rage使用的,它看起来很棒,但需要大量纹理)以更少的纹理成本获得基本相同的结果

此外,光照贴图应该是乘法的,而不是加法的。光照贴图的主要用途是预烘焙阴影和环境光遮挡,因此您需要能够使事物变暗

因此,您的问题的答案是
geometry.faceVertexUvs[0]
包含一组常见的UV;您需要向几何体添加
几何体。faceVertexUvs[1]


three.js r.56

由于three.js缓冲区已过时,因此此错误会发生。将某些纹理(贴图、凹凸贴图…)添加到网格时,必须重新组合缓冲区并更新UV,如下所示:

ob is  THREE.Mesh, mt is a Material, tex is a texture.

tex.needsUpdate = true;
mt.map = tex;
ob.material = mt;
ob.geometry.buffersNeedUpdate = true;
ob.geometry.uvsNeedUpdate = true;
mt.needsUpdate = true;
这就是所有的人

希望能有所帮助

问候


Sayris

由于三个.js缓冲区已过时,因此此错误会发生。将某些纹理(贴图、凹凸贴图…)添加到网格时,必须重新组合缓冲区并更新UV,如下所示:

ob is  THREE.Mesh, mt is a Material, tex is a texture.

tex.needsUpdate = true;
mt.map = tex;
ob.material = mt;
ob.geometry.buffersNeedUpdate = true;
ob.geometry.uvsNeedUpdate = true;
mt.needsUpdate = true;
这就是所有的人

希望能有所帮助

问候


Sayris

这是一个猜测,所以我不会把它作为答案。。还可以尝试使用法线漫反射纹理贴图。我模模糊糊地记得,当材质只有一种颜色,但没有纹理时,其他一些功能出现了问题。@yaku
MeshPhongMaterial
实际上可以与灯光贴图和漫反射纹理贴图一起正常工作。r、 这是一个猜测,所以我不会把它作为答案。。还可以尝试使用法线漫反射纹理贴图。我模模糊糊地记得,当材质只有一种颜色,但没有纹理时,其他一些功能出现了问题。@yaku
MeshPhongMaterial
实际上可以与灯光贴图和漫反射纹理贴图一起正常工作。r、 56