国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

旋轉(zhuǎn)你的3D世界

2019-11-18 14:59:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

        在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ù)逐漸減小,如下圖所示:
旋轉(zhuǎn)你的3D世界(圖一)

方法傳入的參數(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)行的效果:
旋轉(zhuǎn)你的3D世界(圖二)旋轉(zhuǎn)你的3D世界(圖三)

原文地址:點(diǎn)擊進(jìn)入  

下載源碼



發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 浦东新区| 巴楚县| 白城市| 保亭| 邵武市| 泰和县| 巨鹿县| 曲沃县| 绥江县| 建平县| 二手房| 东乡县| 武山县| 望江县| 万山特区| 读书| 九台市| 昌图县| 舒兰市| 静安区| 和田市| 冷水江市| 山东省| 格尔木市| 宁津县| 漠河县| 扎囊县| 安新县| 新蔡县| 杭锦后旗| 蒲江县| 盈江县| 绿春县| 合川市| 苍溪县| 乐陵市| 伊宁市| 建平县| 习水县| 新河县| 绍兴市|