我正在尝试获取 this tutorial工作,但我遇到了两个问题,其中一个是以下问题。
当我按原样运行代码时,片段着色器中出现错误:THREE.WebGLShader: gl.getShaderInfoLog() ERROR: 0:2: '' : No precision specified for (float)
.所以我所做的是为我定义的每个浮点/向量指定一个精度 varying highp vec3 vNormal
.这消除了错误,但我不明白为什么?我找不到任何其他将精度值添加到变量声明的示例。谁能解释为什么会这样?它与我的浏览器(Chrome 38)有关吗?
最佳答案
WebGL 片段着色器没有默认精度。 (高精度是顶点着色器的默认设置。)最简单的解决方案是添加
precision highp float;
到所有片段着色器,这将消除定义所有浮点向量变量的精度的需要,但通常,
precision mediump float;
对于性能而言,将是可取的。我不建议lowp;今天优秀的移动硬件甚至不再支持它,并且相当于将 lowp 类型定义为 mediump。
关于three.js - 为什么需要在 webgl 着色器中定义精度值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058064/