欢迎来到天天文库
浏览记录
ID:14380305
大小:390.00 KB
页数:38页
时间:2018-07-28
《android d 游戏开发教程.》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android3D游戏开发教程–PartI-VI本帖最后由huzht于2010-4-2507:58编辑这几篇Android3D游戏开发的文章原文出自一位德国人Martin在droidnova.com写的文章,有lixinso翻译为中文。第一部分首先介绍OpenGL相关的术语,并引导你开始3D开发的第一步。这个关于3D游戏的系列的叫做Vortex.这个教程主要focus在3D编程上,其他的东西比如菜单和程序生命周期虽然是代码的一部分,但是在这里不会被提到。首先开始介绍OpenGL的术语。 顶点Vertex顶点是3D空间中的一个点,也是许多对象的基础元素。在OpenG
2、L中你可以生命少至二维坐标(X,Y),多至四维(X,Y,Z,W).w轴是可选的,默认的值是1.0.Z轴也是可选的,默认为0.在这个系列中,我们将要用到3个主要的坐标X,Y,Z,因为W一般都是被用来作为占位符。vertex的复数是vertices(这对非英语母语的人来说比较重要,因为这容易产生歧义)。所有的对象都是用vertices作为它们的点,因为点就是vertex。三角形Triangle三角形需要三个点才能创建。因此在OpenGL中,我们使用3个顶点来创建一个三角形。多边形Polygon多边形是至少有3个连接着的点组成的一个对象。三角形也是一个多边形。图元Primit
3、ives一个Primitive是一个三维的对象,使用三角形或者多边形创建。形象的说,一个有50000个顶点的非常精细的模型是一个Primitive,同样一个只有500个顶点的低模也叫做一个Primitive。现在我们可以开始变成了。创建一个工程交Vortex,activity也是这个名字。我们的工程应该大概是这个样子的:packagecom.droidnova.android.games.vortex;importandroid.app.Activity;importandroid.os.Bundle;publicclassVortexextendsActivity{
4、 privatestaticfinalStringLOG_TAG=Vortex.class.getSimpleName(); privateVortexView_vortexView; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); _vortexView=newVortexView(this); setContentView(_vortexView); }}复制代码如上图所示,我们已经添加了
5、View。让我们看一下VortexView类。packagecom.droidnova.android.games.vortex;importandroid.content.Context;importandroid.opengl.GLSurfaceView;publicclassVortexViewextendsGLSurfaceView{ privatestaticfinalStringLOG_TAG=VortexView.class.getSimpleName(); privateVortexRenderer_renderer; publicVortexVi
6、ew(Contextcontext){ super(context); _renderer=newVortexRenderer(); setRenderer(_renderer); }}复制代码如上所示,我们继承了GLSurfaceView是因为它会帮助我们画3D图像。接下来看VortexRenderer类。一个Renderer包含画一帧所必需的所有东西。引用自这儿references。Renderer负责OpenGLcall来render一个帧。来看一下这个类:packagecom.droidnova.android.games.vor
7、tex;importjavax.microedition.khronos.egl.EGLConfig;importjavax.microedition.khronos.opengles.GL10;importandroid.opengl.GLSurfaceView;publicclassVortexRendererimplementsGLSurfaceView.Renderer{privatestaticfinalStringLOG_TAG=VortexRenderer.class.getSimpleName();privatefloat
此文档下载收益归作者所有