(libgdx学习)mesh的简单使用——第一个三角形
来源:互联网 发布:海文考研 知乎 编辑:程序博客网 时间:2024/06/10 16:45
1.VertexAttributes 类
如果要介绍Mesh的话,那么就必须要先讲解下VertexAttributes,他的意思是“顶点数据”,熟悉3D模型的同学,可能都了解,mesh其实不仅仅是平面2D的东西,在3D方面也是可以使用的。既然mesh是网格,那么他就需要有顶点来确定这个mesh,下面我们就来介绍下 vertexAttributes ---- 顶点数据。
PS:这个类了解就行,一般都是用他的内部类。
预定义名称:
libGDX是基于OpenGL的游戏引擎,这个mesh也是OpenGL带过来的,在OpenGL中规定我们在使用mesh的时候,必须先确定其中组成元素的属性。VertexAttributes 即顶点数据,它指定了每个顶点的各种属性数据。在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)
(4) :返回使用到Usage,中的第一个Usage类型。
findByUsage(int usage)
(5) :返回的好像是一个位置,这个土豆不是很清楚。不过,如果Mesh使用了顶点缓存(vertex buffer) ,那么这个获取的就是指定绘制的起端。
getOffset(int usage)
(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)
(5):由参数内提供的mesh,构建一个新的mesh图元。
create(boolean isStatic, Mesh[] meshes)
(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;@Overridepublic 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、20,1,2});}@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic void pause() {// TODO Auto-generated method stub}@Overridepublic void render() {Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);mesh.render(GL10.GL_TRIANGLES,0,3);}@Overridepublic void resize(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void resume() {// TODO Auto-generated method stub}}
0 0
- (libgdx学习)mesh的简单使用——第一个三角形
- 第一个OpengGL程序——三角形的显示
- 我的第一个Direct3D程序——第一个三角形
- libgdx游戏引擎——libgdx粒子系统的使用
- Libgdx的使用(13)——杂谈Libgdx
- 基于Cocos2d-x学习OpenGL ES 2.0系列——你的第一个三角形(1)
- (libgdx学习)Net的使用
- OpenGL学习(2)-第一个三角形
- OpenGL学习(三)第一个三角形
- libGDX——舞台类的使用
- libgdx——常见UI的使用
- android游戏开发框架libgdx的使用(十八)—简单的AVG游戏效果实现
- Hadoop-2.3.0学习(4)——第一个简单的mapreduce程序
- Java学习——简单的三角形类
- Cocos2d-x3.2 下 OpenGL ES 2.0 第一个简单的实例画三角形
- 1.第一个三角形
- OpenGL 第一个三角形
- ogl 第一个三角形
- ssh断开的问题
- Android Http通信
- 云存储为移动开发者带来了什么?
- owb之数据不兼容和数据不匹配的区别
- c++ 复习笔记
- (libgdx学习)mesh的简单使用——第一个三角形
- 201111621401-白乐乐-随机生成一个n bit位的长整数
- iOS 中frame 和 bounds 的区别
- Section Object
- 手动JAR打包
- windows下命令行调用R脚本
- Andriod开发历程之一
- Ubuntu安装boost和boost threadpool
- BroadcastReceiver