1.VertexAttributes 类
如果要介绍Mesh的话,那么就必须要先讲解下
VertexAttributes,他的意思是“顶点数据”
,熟悉3D模型的同学,可能都了解,mesh其实不仅仅是平面2D的东西,在3D方面也是可以使用的。既然mesh是网格,那么他就需要有顶点来确定这个mesh,下面我们就来介绍下 vertexAttributes ---- 顶点数据。
PS:这个类了解就行,一般都是用他的内部类。
预定义名称:
libGDX是基于OpenGL的游戏引擎,这个mesh也是OpenGL带过来的,在OpenGL中规定我们在使用mesh的时候,必须先确定其中组成元素的属性。Vertex
Attributes 即顶点数据,它指定了每个顶点的各种属性数据。在OpenGL ES1.0中,顶点属性有四个预定义的名字:
position(位置), normal(法线), color(颜色), 和 texture coordinates(纹理坐标)。
在OpenGL ES2.0中,用户必须定义“顶点属性的名字”,这个也是目前0.98版本libGDX中新增加的一项。
构造方法:
VertexAttribute(
int usage, int numComponents, java.lang.String alias)
功能方法:
(这里介绍的是较为常用的
VertexAttributes的方法
)
(1) :内部类,常用,主要是其中集合了几个常用的预定义的名称,其实就是你要用它储存的数据类型,例如是位置型、颜色型等。
VertexAttributes.Usage
(2)
不常用,Object的方法,这里不赘述了。
equals (Object obj):
(3)
:不常用,获取当前索引号,这个我们在下面会讲到。
get(int index)
(6) :返回的是一个int类型,找到顶点数据的个数。
size()
VertexAttributes.Usage 类
这是一个内部类,比较常用,所以土豆这里特别拿出来讲解下。
功能方法:
(1) : 颜色数据类型.
ColorPacked
(2) :法线数据类型。(这个土豆也没用过,好像是翻译为“法线”)。
Normal
(3) :坐标数据类型,一般是定义顶点坐标,基本使用数组,常用。
Position
(4) :纹理绑定类型,通俗讲就是使用图片,绑定顶点。
TextureCoordinates
2.Mesh 类
图元的顶点是由VertexAttributes实例中所指定的各元素构成。在使用过程中VARM(帧存储器)和随机存储器mesh都是支持的。前者高性能是很优越的,如果硬件支持,它是首选。
图元用顶点和索引项来确定图形。每个顶点都拥有组成属性,比如位置,法线,颜色或纹理坐标。请注意,并非所有的这些属性必须在全部给定的。在使用OpenGL ES 2.0绘制一个Mesh的时候,每个属性都有一个别名。别名用于顶点属性和shader属性绑定。着色器源和别名的属性必须完全匹配这个工作。图元可以与任何的OpenGL ES 1.x或OpenGL ES 2.0的使用。
构造方法:
Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttributes attributes)
功能方法:
(1) :在所有索引数给定的前提下,可以将 and
bind()
VertexArray
/VertexBufferObject
IndexBufferObject
整合的方法。
(2) :根据mesh中给定的顶点创建一个新的BoundingBox实例。
calculateBoundingBox()
(3) :清除缓存。
clearAllMeshes(Application app)
(4) :复制这个图元。
copy(boolean isStatic)
(6) :获取当前索引数,得到的是一个数组。
getIndices(short[] indices)
(7) : 其中primitiveType指定绘制的形状,offset如果Mesh 使用了顶点缓存(vertex buffer) ,那么这个数就是起点,最后一个参数是指定索引的个数。
render(int primitiveType, int offset, int count)
(8) :设置mesh的索引数。
setIndices(short[] indices)
(9) :设置mesh的顶点。
setVertices(float[] vertices)
在图元mesh中,还有一些其他的方法,不过都是重复的方法,只是参数变化而已,这里土豆每个类型的方法拿出一个来讲解,大家可以根据这个,来学习其他的方法,都是顾名思义的,很简单的方法。
package com.example.groupactiontest;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Input.Peripheral;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.VertexAttribute;
import com.badlogic.gdx.graphics.VertexAttributes;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
public class MyGame implements ApplicationListener {
Mesh mesh;
@Override
public void create() {
/**
* 一个mesh可能保存一个对象的位置、颜色、纹理等方面的信息
* 这4个参数分别为:是否静态、最大顶点数、最大索引数、Vertex属性
*/
mesh = new Mesh(true, 3, 3, new VertexAttribute(Usage.Position, 3, "position"));
mesh.setVertices(new float[]{
-0.5f,-0.5f,0,//第0个定点的坐标
0.5f,-0.5f,0,//第1个顶点的坐标
0,0.5f,0//第2个顶点的坐标
});
mesh.setIndices(new short[]{//设置索引的顺序,这里制定了从第0个顶点到1、2
0,1,2
});
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
mesh.render(GL10.GL_TRIANGLES,0,3);
}
@Override
public void resize(int arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
}