Opengl es 您可以使用GLVERTEXAttributePointer将较小的向量指定给较大的向量吗?
根据第5.8节(重点矿山): 赋值运算符将右值表达式的值存储到l值中,并返回具有左值表达式类型和精度的r值左值表达式和右值表达式必须具有相同的类型。所有需要的类型转换必须通过构造函数显式指定。 所以听起来这样做是不合法的:Opengl es 您可以使用GLVERTEXAttributePointer将较小的向量指定给较大的向量吗?,opengl-es,glsl,opengl-es-2.0,Opengl Es,Glsl,Opengl Es 2.0,根据第5.8节(重点矿山): 赋值运算符将右值表达式的值存储到l值中,并返回具有左值表达式类型和精度的r值左值表达式和右值表达式必须具有相同的类型。所有需要的类型转换必须通过构造函数显式指定。 所以听起来这样做是不合法的: vec3 my_vec3 = vec3(1, 2, 3); vec4 my_vec4 = my_vec3; 要使其合法化,第二行必须是: vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component 我认为他们也有类似的要求。
vec3 my_vec3 = vec3(1, 2, 3);
vec4 my_vec4 = my_vec3;
要使其合法化,第二行必须是:
vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component
我认为他们也有类似的要求。也就是说,如果将vec4
指定给size
参数,则该参数必须等于4
然后,我遇到了一个问题。一些相关片段:
attribute vec4 aPosition;
maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
因此
aPosition
是一个vec4
,但是用于设置它的glvertexattributepointer
调用的大小为3。此代码正确吗?GLES20TriangleRenderer
依赖于未指定的行为,还是缺少其他内容?传递到着色器的属性数据的大小不必与该着色器中属性的大小匹配。您可以将两个值(从glvertexattributepointer
)传递给定义为vec4
的属性;剩余的两个值为零,除了W分量为1。同样,您可以将4个值传递给vec2
属性;多余的值将被丢弃
因此,您可以根据需要将顶点属性与上载的值混合匹配。有趣。这种行为在什么地方有记录吗?@LaurenceGonsalves:它在OpenGL ES规范中有记录。我希望有更具体的东西。:-)为了记录在案,本规范第2.8节“顶点阵列”在标题“传输阵列元素”下对此进行了记录。