作者:mydeman 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=803
在3D游戏中有一个共同的特征就是玩家可以更改视角,这样就使得他(她)可以从不同的角度观察3D世界。旋转视角有时仅仅被认为一个特征或者一个不错的效果,然而有时它却是一个游戏的主要部分。无论你更改视角的目的是什么,实现这种效果的技术都并非十分难以掌握。然而,采用的方式却完全不是你期望的那一种。在3D编程中普遍采用的解决方法是旋转和移动你的3D模型,而照相机(译者注:照相机相当于观察者)却保持静止不动。并非是在重新计算你的场景前在3D空间中移动和旋转照相机到不同的位置。
在不探究任何细节的前提下,采用这种方式的主要原因就是它非常便于实际操作。如果你移动和旋转照相机将会需要很多3D到2D的复杂变换,然而你如果移动和旋转模型,这种变换将会减少很多。
注意,当使用旋转3D世界代替照相机时,你不得不认为这样做有一些“落后”。照相机20度的旋转必须通过模型的-20度的旋转来模拟。
本文例子中的MIDlet展示了在Sony Ericsson K700中如何使用3D引擎旋转3D模型。这些代码遵循一个最基础的思想——应该如何简单地操纵一个3D动画。例子中的3D模型和动画由一个3D建模工具创建,然后导出并转化为“mbac”文件(模型)、“mtra”文件(动画数据)和普通的“bmp”文件(纹理)。这些文件都可以很容易被3D引擎导入,剩下的需要Java编码实现的或多或少的就是灯光的设置,当然在这个例子中还有旋转的逻辑。
使用操作杆(方向键)旋转模型,按下fire按钮(方向键中间的按钮)改变动画。
通过这篇文章我们可以得到的信息并不多,下面我们共同来看一下例子中的源代码,分析一下旋转的实现过程。通过阅读代码我们可以发现,实现旋转效果的核心代码其实只有下面的几行:
d1_xtrans.rotationX (rotX);// X轴旋转
d1_ytrans.rotationY (rotY); // Y轴旋转
d1_ztrans.rotationZ (0);// 我们不作Z轴的旋转
所以实现旋转最重要的三个方法就是:rotationX(int)、rotationY(int)和rotationZ(int)。rotationX()方法是指在右手坐标系中以X轴为轴心旋转,旋转方向的定义为从X轴正方向观察是逆时针方向,也就是由Y轴向Z轴旋转,并且Y轴和Z轴(正方向)所组成的角的度数逐渐减小,如下图所示:
方法传入的参数是旋转的角度,这个角度是相对于0度位置来说的,所以要实现顺时针旋转时,只需要本次旋转的角度值小于上次旋转的角度值即可,例子中通过rotX -= rotPlus实现。因为在Micro3D中将0-1范围的值转化为了0-4096的整数,所以4096就相当于2π。rotationY()和rotationZ()的作用和rotationX()方法类似,所不同的就是分别是以Y轴和Z轴为旋转轴。
请注意,rotation后面的是旋转轴而不是旋转方向,因此在X方向旋转时就需要改变rotY的值,而在Y方向旋转时就需要改变rotX的值。
下面是例子运行的效果:
原文地址:点击进入
下载源码
分享到:
相关推荐
在计算机图形学中,3D指的是三维空间,与我们生活中的物理世界相对应。在编程和软件开发中,3D技术允许开发者创建具有深度、宽度和高度的对象和场景,使得视觉效果更加立体和真实。3D渲染引擎如Unity和Unreal Engine...
3. **旋转(rotation)**:结合rotateX, rotateY和rotateZ,我们可以让球体围绕各个轴线进行旋转,模拟真实世界的3D旋转。 4. **多图排列**:为了实现“多图3d球形旋转”,我们需要将多个图片作为子元素嵌套在球体...
在DirectX中,你需要使用Direct3D接口直接操纵顶点缓冲区,通过设置世界、视图和投影矩阵来完成3D渲染,旋转操作同样通过矩阵运算实现。 对于“Sprites_demo”这个文件,可能是一个3D精灵(Sprite)的示例代码,3D...
这是一个可视化展示照片的方式,模拟真实世界中的3D物体,如墙壁上挂满照片,这些照片看起来像是从平面中突出,随着视角变化而产生深度感。在WPF中,我们可以通过使用`Viewport3D`控件和`Model3D`对象来创建这样的3D...
要实现一个3D旋转的Tween动画,你需要创建一个Three.js的场景,添加一个模型(例如汽车),设置初始和目标旋转角度,然后使用Tween.js的`to()`方法来定义动画过程: ```javascript var car = new THREE.Mesh...
"旋转的3D立方体 程序演示"是一个展示3D图形编程概念的应用,其中包含了相机控制和物体旋转的核心要素。在这个程序中,用户可以看到一个3D立方体位于场景中央,而相机则可以围绕这个立方体进行旋转,从而提供不同的...
在3D世界中,这个过程被数字化,允许设计师以更高效的方式创建精细的3D模型。 TurningKit正是这样一个工具,它集成于Unity3D环境中,提供了直观的界面和一系列工具,使得3D设计师可以轻松地对物体进行旋转切割。...
1. **设置视图投影**:在OpenGL中,我们需要定义相机视图和投影矩阵,这决定了用户从哪个角度观察3D世界以及3D物体在2D屏幕上的投影方式。 2. **加载纹理**:立体图片通常由两部分组成,对应人眼的左眼和右眼,以...
Unity3D实现鼠标控制旋转转盘 Unity3D实现鼠标控制旋转转盘是 Unity3D 游戏开发中的一项重要功能。该功能可以让用户通过鼠标控制旋转转盘,实现更加真实的操作体验。在培训模拟考试软件中,这种功能尤其重要,让...
我们可以设置Canvas的Render Mode为Screen Space - Camera或World Space,前者将UI绘制在屏幕空间上,而后者则将其放置在3D世界中,允许UI元素与3D对象交互。 接下来,我们关注 RectTransform组件。RectTransform...
【3D正方体可旋转Demo 源代码】是一个基于Visual C++和OpenGL技术实现的项目,旨在帮助开发者理解并掌握3D图形编程的基本原理和技巧。OpenGL是一个跨语言、跨平台的图形库,用于渲染2D、3D矢量图形,广泛应用于游戏...
3D旋转是计算机图形学中的一个重要概念,用于模拟真实世界中的物体转动效果。在易语言中,我们通常会用到向量、矩阵和四元数等数学工具来实现这一功能。3D旋转通常包括绕X轴、Y轴和Z轴的旋转,也可以通过欧拉角或者...
《HTML+CSS构建3D旋转相册:一个浪漫的表白技术指南》 在网页设计的世界里,创新和个性化是吸引用户的重要...无论你是前端新手还是有经验的开发者,这个3D旋转相册都能为你提供宝贵的实践机会,进一步提升你的技能。
Unity3D使用鼠标旋转缩放平移视角是 Unity3D游戏引擎中的一项重要功能,旨在提供一个灵活的视角控制系统,使玩家可以更加方便地浏览游戏的世界。本文将详细介绍如何使用鼠标旋转缩放平移视角,实现一个灵活的视角...
通过JavaScript控制,可以实现各种动态效果,如在这个例子中的3D地球仪旋转。 2. **CSS3**: "style.css"文件中可能包含了用于布局和美化页面的CSS3样式规则。CSS3引入了许多新特性,如3D变换、过渡(transitions)...
通过学习并实践这个"3d旋转相册"案例,你不仅能够掌握CSS3的高级特性,还能提升自己的前端开发能力,为你的作品集增添一项炫酷的展示。而提供的"3d旋转相册.html"文件则是你动手实践的起点,从中你可以分析代码,...
在Unity中,对3D模型进行缩放和旋转是基本的操控方式,能够帮助开发者构建动态且交互性强的游戏场景。本文将深入探讨Unity 3D如何实现模型的缩放和旋转功能。 一、模型缩放 在Unity中,缩放模型通常通过修改...
属性用于保持子元素的3D空间,让整个相册在旋转时保持整体的3D结构。 然而,仅靠HTML和CSS3无法实现交互性,这就需要JavaScript的参与。JavaScript负责处理用户的交互事件,如鼠标悬停、点击等,来触发3D旋转。...
Nehe教程可能会教你怎么响应键盘和鼠标输入,以控制3D世界的导航。这涉及到事件处理和OpenGL的状态管理。 总之,《Nehe第10课3D世界》涵盖了3D图形编程的基础,包括3D模型加载、视图控制、纹理映射、光照处理以及...
**WPF 3D旋转木马** 在Windows Presentation Foundation(WPF)中,3D图形渲染是一个强大且灵活的功能,允许开发者创建出引人入胜的用户体验。"WPF 3D旋转木马"是一个利用这项技术实现的创新图片查看器,它带给用户...