本文源地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/07/6059650.aspx
Himi 原创, 转载请注明! 谢谢。
为什么要先构造一个立方体的例子,其实在论证概念时,立方体是一种极好的示例,当然它并不是复杂的 3D 设计的里程碑。
首先介绍构造一个3D立方体需要的步骤:(大概步骤哦)
第一:构造一个立方体的空间顶点
第二:构造一个立方体的各个面这里会用到三角形带 ,详细三角形带的解释看 @备注1
第三:构造一个摄像机
第四:绑定画笔
第五:渲染.
那么下面先上代码,都有注释的,相信都能看懂!一些备注 下文有解释!
模拟器截图:
备注1 : 这里要详细讲解下三角形带,下面引用一张图a,大家根据图示来看这个顶点数组就应该明白了!
大家看我们一开始定义的以三角带形式的顶点数组
VERTEX_POSITIONS = {-1, -1, 1, 1, -1, 1, -1,1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1 };
我们以立方体的中心为{0, 0,0},那么如果顶点 0坐标就是(-1, -1, 1) 那么顶点2是不是 {-1,1,1}了,肯定是!
这里坐标的三个点其实就是代表就是X轴 Y轴 Z轴
也就是说两个顶点0和顶点2这两个顶点都有共同的-1, 1 ,而三角形带形式就是这种重复利用重复点的形式来标识了所有的立方体的顶点!
备注2:这里咱们定义了一个偏差数组float pc[] = { 0, 0, 1 }; 为什么要以数组形式呢?其实你换种形式看看,其实是一个坐标点,
毕竟这是3D世界了 娃哈哈,其实意思就是 X轴+=0,Y轴+=0,Z轴+=1,当我们把这个偏差点传入setPositions()这个方法里以后,
也就是代表将这个立方体中心点从{0,0,0}变成了{0,0,1}这一点,如果你运行此项目当按下左右按键对其立方体进行旋转的时候,
发现立方体旋转不是围绕中心点进行的旋转了,而是以{0,0,1}这一点做的旋转;所以setPositions()其实也是对中心点的一个偏差处理。
有些同学该说为什么中心点就是{0,0,0}这一点呢,其实没人规定而是咱们一开始定义立方体数组顶点的时候就自己在心里定下了一个规定,
以{0,0,0}为中心点了。如果你一开始定义VERTEX_POSITIONS 的时候不以{0,0,0}为中心点,而是以顶点0 坐标为中心点的话,
那么顶点2这时候的顶点坐标就成了{0,2,0} ,顶点3就成了{0,2,2}那么也能写成一个三角形带形式,但是要注意你后面的颜色数组和
定义三角形带数组的时候也要以为顶点0为中心点来写噢,这点别忘了,要一一对应!
备注3:camera.setPerspective(30, (float) this.getWidth()/ (float) this.getHeight(), 1, 1000);
第一个参数指的是透视的角度!不是高度!第二个指的是屏幕宽高比例,第三个是可视范围min和max
其实这里常用还有一个方法是:camera.setParallel() 这两个方法以及备注5在后续文章
《深度缓冲与投影》的时候再向大家讲解。
备注4:Transform transform = new Transform(); 这里咱们定义了一个变换对象,其实咱们一开始定义的成员变量里也有一个
private Transform tf;但是这里要注意,transform 是为了设置摄像机的时候同时设定了相机的位置而定义的,而tf则是对渲染立方体的
候做反转、缩放、平移等操作定义的一个变化对象,等后续文章会对渲染时这个变化对象加以说明。一定要注意这两个Transform 区别!
备注5:备注3已经说明了 ,等后续文章学习《深度缓冲与投影》的时候再向大家讲解。
备注6:这里就是为了强调与备注4的Transform两个对象的区别!
备注7:这里调用releaseTarget()意思是终止渲染,大家会发现g3d.releaseTarget();这一句被写在了try catch块里,其实原因是因为
许多Graphics3D的方法都会抛出不可控异常,但绝大多数错误都是不可恢复的, 所以不管是否出现异常都要保证能终止渲染!
备注8:这里是对按键的操作,按键处理和对立方体操作(缩放、平移、旋转)会在后续学习文章中详细解释的。
最后给大家放出源码,希望大家一起相互交流。所有文章都是原创,很多地方可能存在错误希望大家多多指点。谢谢!
源码下载地址:http://download.csdn.net/source/2887681
希望大家支持下,虽然源码需要一资源分,我相信大家不会吝啬吧,大半夜的给大家分享 ,娃哈哈~
(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)
2010/12/7 02:30
分享到:
相关推荐
原文学习地址:【J2me3D系列学习文章之一】构造我们3D世界中的第一个立方体! http://blog.csdn.net/xiaominghimi/archive/2010/12/07/6059650.aspx
这个程序是在刚接触3D时做的练习,感觉还不错。虽然有点粗糙,但可以给初学者带来一起帮助。
J2ME的3D开发教程
j2me 3D CS demo
快速入门J2ME,感觉不错的学习资料,贡献!
J2me赛车游戏手机版源码!!!!!!!!!!!!!!!!!J2me赛车游戏手机版源码!!!!!!!!!!!!!!!!!
J2ME 3D手机游戏开发详解 完整版 分为3部分
J2ME3D手机游戏开发详解(随书源码),移动开发系列丛书,
我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...
J2ME 3D手机游戏开发详解 完整版 分为3部分
J2ME学习笔记J2ME学习笔记J2ME学习笔记J2ME学习笔记J2ME学习笔记J2ME学习笔记J2ME学习笔记J2ME学习笔记
J2ME 3D 游戏 黑暗之门的代码 3D入门必看
通过对手机游戏开发,MIDP 2.0,以及JSR-184(J2ME 3D技术)的研究,采用立即模式,运用深度优先遍历算法来随机生成游戏地图,并尽力模拟手机游戏的普遍性形式,实现一个操作简单,并有一定可玩性的完整3D手机迷宫...
J2ME学习之环境搭建.学习j2me首先需要搭建环境
J2ME 入门学习书籍打包下载J2ME 入门学习书籍打包下载J2ME 入门学习书籍打包下载
本教程是关于J2ME 3D技术的文章。读者最好有一定的JAVA基础,特别是J2ME基础,对MIDLET和CANVAS有详细的认识,如果有3D基础更加。
j2me 3d 源程序,一个显示和旋转3维模型的手机源程序
J2ME合金弹头游戏源代码!!!!!!!!!!J2ME合金弹头游戏源代码!!!!!!!!!!
java学习j2me