相关疑难解决方法(0)

在OpenGL ES 2.0/GLSL中,您需要哪些精度说明符?

您填充值的变量是否决定了您正在使用的精度,等号的右侧?

例如,这里的精度说明符是否有任何意义上的区别:

gl_FragColor = lowp vec4(1);
Run Code Online (Sandbox Code Playgroud)

这是另一个例子:

lowp float floaty = 1. * 2.;
floaty = lowp 1. * lowp 2.;
Run Code Online (Sandbox Code Playgroud)

如果你采用一些浮点数,并从它们创建一个向量或矩阵,那么该向量或矩阵是否会采用您填充它的值的精度,或者这些值是否会转换为另一个精度级别?

我认为优化这个最好能回答这个问题:

dot(gl_LightSource[0].position.xyz, gl_NormalMatrix * gl_Normal)
Run Code Online (Sandbox Code Playgroud)

我的意思是,它是否需要走这么远,如果你想尽可能快,或者它有些无用吗?

lowp dot(lowp gl_LightSource[0].position.xyz, lowp gl_NormalMatrix * lowp gl_Normal)
Run Code Online (Sandbox Code Playgroud)

我知道你可以定义float的默认精度,并且这可以用于之后的向量和矩阵.假设为了教育的目的,我们之前已经定义了这个:

precision highp float;
Run Code Online (Sandbox Code Playgroud)

glsl opengl-es-2.0

48
推荐指数
1
解决办法
5万
查看次数

为什么有必要为片段着色器设置精度?

我学习WebGL.下一个着色器工作正常:

// vertex.shader
// precision mediump float;
attribute vec4 a_Position;
attribute float a_PointSize;

void main(){
  gl_Position = a_Position;
  gl_PointSize = a_PointSize;
}
Run Code Online (Sandbox Code Playgroud)

// fragment.shader
precision mediump float;
uniform vec4 u_FragColor;

void main(){
  gl_FragColor = u_FragColor;
}
Run Code Online (Sandbox Code Playgroud)

为什么有必要为片段着色器设置精确度?顶点着色器在没有这个的情况下工作,但片段着色器在没有此代码行的情况下不起作用(如我所见).为什么存在不同的行为?

我之前读过这篇文章,但它对我没有帮助.

precision shader opengl-es webgl

18
推荐指数
2
解决办法
1万
查看次数

标签 统计

glsl ×1

opengl-es ×1

opengl-es-2.0 ×1

precision ×1

shader ×1

webgl ×1