Chinaunix首页 | 论坛 | 博客
  • 博客访问: 550787
  • 博文数量: 179
  • 博客积分: 3845
  • 博客等级: 中校
  • 技术积分: 2003
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-16 21:25
文章分类
文章存档

2012年(74)

2011年(105)

分类:

2011-12-18 13:32:59

这几篇Android 3D游戏开发的文章原文出自一位德国人Martin在droidnova.com写的文章,有lixinso翻译为中文。

这个系列的第二部分是关于如何添加一个三角形并可以旋转它。

第一件事情是初始化需要显示的三角形。我们来在VortexRenderer类中添加一个方法initTriangle()。

OWY[QW4_`N{]V$KQ`_]ALWL

让我们从新的对象变量开始. _vertexBuffer为我们的三角形保存坐标._indexBuffer保存索引. _nrOfVertices变量定义需要多少个顶点.对于一个三角形来说,一共需要三个顶点.
      这个方法首先为这里两个buffer分配必须的内存(14-22行). 接下来我们定义一些坐标(24-28行) 后面的注释对用途给予了说明.
      在30行,我们将coords数组填充给_vertexBuffer . 同样在31行将indices数组填充给_indexBuffer 。最后将两个buffer都设置position为0.

为了防止每次都对三角形进行初始化,我们仅仅在onDrawFrame()之前的行数调用它一次。一个比较好的选择就是在onSurfaceCreated()函数中.

P(E$[6_]9G2X]P($UPYSI%P

glEnableClientState() 设置OpenGL使用vertex数组来画。这是很重要的,因为如果不这么设置OpenGL不知道如何处理我们的数据。接下来我们就要初始化我们的三角形。

为什么我们不需使用不同的buffer? 在新的onDrawFrame()方法中我们必须添加一些新的OpenGL调用。

()OKN59LP]6%R)X0BYI64ON

好,一步一步地看。
glClearColor()glClear() 在教程I部分已经提到过。在第10行使用glColor4f(red, green, blue, alpha)设置三角形为暗红色 .
在 第13行,我们使用glVertexPointer()初始化Vertex Pointer. 第一个参数是大小,也是顶点的维数。我们使用的是x,y,z三维坐标。第二个参数,GL_FLOAT定义buffer中使用的数据类型。第三个变量是0, 是因为我们的坐标是在数组中紧凑的排列的,没有使用offset。最后哦胡第四个参数顶点缓冲。
最后,glDrawElements()将所有这些元素画出来。第一个参数定义了什么样的图元将被画出来。第二个参数定义有多少个元素,第三个是indices使用的数据类型。最后一个是绘制顶点使用的索引缓冲。

当最后测试这个应用的使用,你会看到一个在屏幕中间静止的三角形。当你点击屏幕的时候,屏幕的背景颜色还是会改变。

现在往里面添加对三角形的旋转。下面的代码是写在VortexRenderer类中的.

`}@X94H0)6I~OWRAA7@2{G0

glRotatef()方法在glColor4f()之前被onDrawFrame()调用.

BN90P2[(2J3RS]N6HBGOGBU

这时候我们可以绕y轴旋转。如果需要改变只需要改变glRotate()方法中的0f。这个参数中的值表示一个向量,标志三角形绕着旋转的坐标轴。

要让它可用,我们必须在VortexView中的onTouchEvent()中添加一个调用。

LB~P_ZF4{1THZ6ACO7(7DKD

上面代码中除以10是为了减小角度变换的速度。

现在编译运行这个程序。如果你在屏幕的最左边点击,你会看到三角形轻微旋转。如果你将手指移到右边,旋转的速度就会变得很快。

Eclipse工程的源代码在这里下载(原链接): Vortex Part II

3d-part-two-triangle

3d-part-two-triangle1

3d-part-two-triangle2

阅读(488) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~