相关疑难解决方法(0)

你可以使用glVertexAttribPointer将较小的向量分配给较大的向量吗?

OpenGL®ES着色语言的第5.8节(v1.00,r17)[PDF](强调我的):

赋值运算符将rvalue-expression的值存储到l值中,并返回具有lvalue-expression类型和精度的r值.lvalue-expression和rvalue-expression必须具有相同的类型.必须通过构造函数显式指定所有需要的类型转换.

所以听起来像做这样的事情是合法的:

vec3 my_vec3 = vec3(1, 2, 3);
vec4 my_vec4 = my_vec3;
Run Code Online (Sandbox Code Playgroud)

为了使其合法,第二行必须是这样的:

vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component
Run Code Online (Sandbox Code Playgroud)

我认为glVertexAttribPointer有类似的要求.也就是说,如果你指定的vec4size参数必须等于4.

然后我遇到了AndroidGLES20TriangleRenderer示例.一些相关的片段:

attribute vec4 aPosition;

maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");

GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
        TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
Run Code Online (Sandbox Code Playgroud)

所以aPosition是一个vec4,但glVertexAttribPointer用于设置它的调用有一个size3.这个代码是否正确,是GLES20TriangleRenderer依赖于未指定的行为,还是有其他我缺少的东西?

opengl-es glsl opengl-es-2.0

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

标签 统计

glsl ×1

opengl-es ×1

opengl-es-2.0 ×1