在libgdx Mesh, Color, Texture tutorial中,表示一个简单三角形的网格,其中包含每个顶点的颜色和纹理信息:
mesh = new Mesh(true, 3, 3,
new VertexAttribute(Usage.Position, 3, "a_position"),
new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoords"));
在VertexAttribute
构造函数中,整数参数是什么?该文档说明了编码信息所需的“组件数量”。
我读到每个条目使用的'vertex'数组(浮点数组)中的条目数。因此,对于第一个VertexAttribute
是3,这是有意义的(x,y和z各一个)。但是,ColorPacked属性有4但是由于颜色数据被编码为单个浮点数,这不应该是1吗?最后添加纹理坐标(得到2,它匹配每个顶点所需的两个浮点u,v坐标)。
javadoc for the VertexAttribute constructor表示此参数为:
numComponents - the number of components of this attribute, must be between 1 and 4.
请注意较旧的问题, Whats the 3rd argument in VertexAttribute() used for in libgdx?,涵盖了这个构造函数的第三个参数,所以我们只需要一个SO问题来覆盖第一个。 :)
答案 0 :(得分:5)
VertextAttribute构造函数的numComponents整数参数是gl * Pointer的“size”参数
使用ColorPacked属性将glColorPointer调用的“type”参数从GL10.GL_FLOAT更改为GL11.GL_UNSIGNED_BYTE。颜色需要4个字节,因此您需要将“numComponents”参数设置为4。
答案 1 :(得分:0)
这是着色器中的组件数量,而不是cpu边计算。当你将位置矢量传递给着色器时,4说,你的矢量被编码成着色器中的vec4。
颜色相同:您可以将打包的单个浮点值传递给着色器,但是您将在着色器中使用vec4颜色矢量。