在3D游戲中有一個(gè)共同的特征就是玩家可以更改視角,這樣就使得他(她)可以從不同的角度觀察3D世界。旋轉(zhuǎn)視角有時(shí)僅僅被認(rèn)為一個(gè)特征或者一個(gè)不錯(cuò)的效果,然而有時(shí)它卻是一個(gè)游戲的主要部分。無(wú)論你更改視角的目的是什么,實(shí)現(xiàn)這種效果的技術(shù)都并非十分難以把握。然而,采用的方式卻完全不是你期望的那一種。在3D編程中普遍采用的解決方法是旋轉(zhuǎn)和移動(dòng)你的3D模型,而照相機(jī)(譯者注:照相機(jī)相當(dāng)于觀察者)卻保持靜止不動(dòng)。并非是在重新計(jì)算你的場(chǎng)景前在3D空間中移動(dòng)和旋轉(zhuǎn)照相機(jī)到不同的位置。
在不探究任何細(xì)節(jié)的前提下,采用這種方式的主要原因就是它非常便于實(shí)際操作。假如你移動(dòng)和旋轉(zhuǎn)照相機(jī)將會(huì)需要很多3D到2D的復(fù)雜變換,然而你假如移動(dòng)和旋轉(zhuǎn)模型,這種變換將會(huì)減少很多。
注重,當(dāng)使用旋轉(zhuǎn)3D世界代替照相機(jī)時(shí),你不得不認(rèn)為這樣做有一些“落后”。照相機(jī)20度的旋轉(zhuǎn)必須通過(guò)模型的-20度的旋轉(zhuǎn)來(lái)模擬。
本文例子中的MIDlet展示了在Sony EriCSSon K700中如何使用3D引擎旋轉(zhuǎn)3D模型。這些代碼遵循一個(gè)最基礎(chǔ)的思想——應(yīng)該如何簡(jiǎn)單地操縱一個(gè)3D動(dòng)畫(huà)。例子中的3D模型和動(dòng)畫(huà)由一個(gè)3D建模工具創(chuàng)建,然后導(dǎo)出并轉(zhuǎn)化為“mbac”文件(模型)、“mtra”文件(動(dòng)畫(huà)數(shù)據(jù))和普通的“bmp”文件(紋理)。這些文件都可以很輕易被3D引擎導(dǎo)入,剩下的需要java編碼實(shí)現(xiàn)的或多或少的就是燈光的設(shè)置,當(dāng)然在這個(gè)例子中還有旋轉(zhuǎn)的邏輯。
使用操作桿(方向鍵)旋轉(zhuǎn)模型,按下fire按鈕(方向鍵中間的按鈕)改變動(dòng)畫(huà)。
通過(guò)這篇文章我們可以得到的信息并不多,下面我們共同來(lái)看一下例子中的源代碼,分析一下旋轉(zhuǎn)的實(shí)現(xiàn)過(guò)程。通過(guò)閱讀代碼我們可以發(fā)現(xiàn),實(shí)現(xiàn)旋轉(zhuǎn)效果的核心代碼其實(shí)只有下面的幾行:
d1_xtrans.rotationX (rotX); // X軸旋轉(zhuǎn)
d1_ytrans.rotationY (rotY); // Y軸旋轉(zhuǎn)
d1_ztrans.rotationZ (0); // 我們不作Z軸的旋轉(zhuǎn)
所以實(shí)現(xiàn)旋轉(zhuǎn)最重要的三個(gè)方法就是:rotationX(int)、rotationY(int)和rotationZ(int)。rotationX()方法是指在右手坐標(biāo)系中以X軸為軸心旋轉(zhuǎn),旋轉(zhuǎn)方向的定義為從X軸正方向觀察是逆時(shí)針?lè)较颍簿褪怯蒠軸向Z軸旋轉(zhuǎn),并且Y軸和Z軸(正方向)所組成的角的度數(shù)逐漸減小,如下圖所示:
方法傳入的參數(shù)是旋轉(zhuǎn)的角度,這個(gè)角度是相對(duì)于0度位置來(lái)說(shuō)的,所以要實(shí)現(xiàn)順時(shí)針旋轉(zhuǎn)時(shí),只需要本次旋轉(zhuǎn)的角度值小于上次旋轉(zhuǎn)的角度值即可,例子中通過(guò)rotX -= rotPlus實(shí)現(xiàn)。因?yàn)樵贛icro3D中將0-1范圍的值轉(zhuǎn)化為了0-4096的整數(shù),所以4096就相當(dāng)于2π。rotationY()和rotationZ()的作用和rotationX()方法類(lèi)似,所不同的就是分別是以Y軸和Z軸為旋轉(zhuǎn)軸。
請(qǐng)注重,rotation后面的是旋轉(zhuǎn)軸而不是旋轉(zhuǎn)方向,因此在X方向旋轉(zhuǎn)時(shí)就需要改變r(jià)otY的值,而在Y方向旋轉(zhuǎn)時(shí)就需要改變r(jià)otX的值。
下面是例子運(yùn)行的效果:

原文地址:點(diǎn)擊進(jìn)入
下載源碼
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注