相关疑难解决方法(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万
查看次数

着色器中的Threejs正常值设置为0

我正在尝试使用本教程,但我遇到了两个问题,其中一个问题可以在这里找到.另一个是以下.

为方便起见,这是应该工作的代码,这里是一个jsfiddle.

顶点着色器:

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
attribute vec3 position;
uniform vec3 normal;
varying vec3 vNormal;

void main() {
    test = 0.5;
    vNormal = normal;
    gl_Position = projectionMatrix *
                modelViewMatrix *
                vec4(position,1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:不同的mediump vec3 vNormal;

void main() {
    mediump vec3 light = vec3(0.5, 0.2, 1.0);

    // ensure it's normalized
    light = normalize(light);

    // calculate the dot product of
    // the light to the vertex normal
    mediump float dProd = max(0.0, dot(vNormal, …
Run Code Online (Sandbox Code Playgroud)

shader webgl vertex-shader fragment-shader three.js

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