three.js - 为什么需要在 webgl 着色器中定义精度值?

标签 three.js glsl webgl shader fragment-shader

我正在尝试获取 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/

相关文章:

canvas - 将一个 Three.js 网格导出为 OBJ 或 STL

three.js - 如何在 Three.js 中使用着色器实现平滑过渡?

javascript - 将 .casa-model 转换为 .obj

opengl 着色器 (glsl) 中的 C++ 位标志

opengl - 将矩阵传递给 glsl 是行不通的?

javascript - 加载从 THREE.js 编辑器导出的 JSON

javascript - 如何修改使用 OBJMTLLoader 加载的场景中对象的参数?

javascript - 使用 javascript + Electron + Three.js 构建游戏安全吗?

c++ - GLSL - 统一缓冲对象奇怪的行为

javascript - 基于Web的大型图形绘图库