libgdx中VertexAttribute构造函数的整数参数是什么?

时间:2011-10-26 06:28:35

标签: java libgdx

在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问题来覆盖第一个。 :)

2 个答案:

答案 0 :(得分:5)

VertextAttribute构造函数的numComponents整数参数是gl * Pointer的“size”参数

  • Usage.Position - > glVertexPointer
  • Usage.Color - > glColorPointer
  • Usage.ColorPacked - > glColorPointer
  • Usage.TextureCoordinates - > glTexCoordPointer
  • Usage.Normal - > glNormalPointer

使用ColorPacked属性将glColorPointer调用的“type”参数从GL10.GL_FLOAT更改为GL11.GL_UNSIGNED_BYTE。颜色需要4个字节,因此您需要将“numComponents”参数设置为4。

来源:VertexArray.bind()glColorPointer

答案 1 :(得分:0)

这是着色器中的组件数量,而不是cpu边计算。当你将位置矢量传递给着色器时,4说,你的矢量被编码成着色器中的vec4。

颜色相同:您可以将打包的单个浮点值传递给着色器,但是您将在着色器中使用vec4颜色矢量。