J2ME Mobile 3D入門教程(一)

2021-06-15 18:42:45 字數 3151 閱讀 3599

3d圖形技術在各個領域已經越來越多的被應用了,當然這也包括了j2me領域。在j2me中為我們提供了jsr184這樣乙個可選包,該套api實現手機上3d圖形的程式設計。同時也伴隨著移動裝置硬體的發展,現在也出現了越來越的支援該可選包的手機了,例如sony ericsson的 k系列、s系列等等。

正巧前一段時間我簡單的學習了一下3d圖形學,所以最近開始對mobile 3d的學習,在這裡把學習到的東西拿出來與大家共享,希望能對大家有所幫助,也同時希望大家能夠一起來學習jsr184。

下面言規正傳,首先我們來想象一下在現實生活中,我們是如何觀察這個世界的。我們是通過眼睛來觀察,我們生活在乙個3維座標系構成的世界。在mobile3d中同樣的有world類讓你隨心所欲的構造你想要的世界,當然在這裡專業些,在3d製圖中我們叫它「場景」;另外還有camera類來作為你的眼睛,你可以來設定它的位置角度等引數,來顯示出不同的影象。

在mobile 3d中是如何實現3d影象的顯示呢?首先你要建立或者載入3d模型,然後根據需要設定場景中的環境、渲染方式等一系列的引數,再後生成並設定一架攝影機並且調整好你想要的光線,調整好你所需要的位置和角度。ok還需要什麼呢?按下快門,這一步就是被叫做「渲染」一切就搞定了,這聽起來似乎很簡單其實也並不難,其實這也不難。

下面我們分步驟的來講解這些步驟:

首先說模型的建立,在mobile 3d中和大多數的3d程式設計api是一樣的有兩種方式:1 及時運算生成;2 外部建模匯入。由於外部建模匯入會將環境資訊同時匯入,所以稍候給大家做詳細的介紹,這裡著重要給大家介紹「及時運算生成」的部分,這樣一來有助於大家了解mobile 3d的工作原理

在mobile 3d中為我們提供了vertexarray和vertexbuffer倆個類,這兩個類用來儲存3維模型的頂點資訊。

其中vertexarray 類用處比較多,也比較靈活,這個類最常用的用法有3個,1 儲存頂點座標資訊; 2 儲存法線資訊; 3 儲存帖圖資訊 。有人也許要問這乙個類怎麼管理3種不同的東西呢?那下面我們來分析一下該類,首先該類的構造器有3個引數:1 該例項要包括的元素的數量; 2 每個元素要包括的元素數量; 3每個子元素所佔的位元組數。這樣一來似乎清楚很多為什麼這個類能被使用到3種東西上。另外該類還有乙個比較常用的方法set(int index,int length,short array0)這個方法是用來向該類的例項物件種存放資料的,第乙個引數是指從第幾個元素開始;第二個引數是指要設定多少個;第三個引數就是實際設定的置了。

下面簡單介紹vertexbuffer類,該類才是真正儲存多邊形的框架資訊的類。改類通過設定頂點位置、發現、帖圖資訊,來建立圖形。其中setpositions(vertexbuffer v,float s,floatb)是用來設定頂點位置的,在這個方法中你會發現有3個引數,第乙個不用說了,是頂點的座標資訊,後兩個是用來做座標偏移等操作的,操作是這樣的數學公式v'=v*s+b。還有乙個setnormals(vertexbuffer norm)方法來設定法線。還有乙個非常重要的方法settexcoords(int, vertexarray, float, float)這個方法中引數除第乙個以外,後三個和setpositions(vertexbuffer v,float s,floatb)是一樣的,第乙個引數是開始的元素編號。這樣說是不是有些抽象呢?給大家乙個例子吧,好讓大家理解。

short x = 20;

short y = 20;

short z = 20;

short fx = (short) -x;

short fy = (short) -y;

short fz = (short) -z;

//定點座標

short vert = ; //e

trycatch(exception e)

//髮線

byte norm = ;

trycatch(exception e)

//給出頂點們對應上的點(vert和tex陣列是一一對應的)

short tex = ;

trycatch(exception e)

剛才的**中還給出了乙個mesh類,該類材質最後我們要的模型。

建立模型後,我們要建立camera。在camera中我在這裡只簡單介紹兩個方法setparallel(float, float, float, float)和setperspective(float, float, float, float)。我們首先來看setparallel(float, float, float, float)該方法是設定camera的檢視方法為平檢視;第乙個引數是設定視角的高度,注意是高度,不是角度,因為這裡是平檢視;第二個引數是camera的寬高比例,例如我們的電視是4:3、寬銀幕電影是16:9;第

三、四引數分別是最近和最遠渲染的範圍。同樣的setperspective是設定camera為透檢視,這種檢視比較接近我們日常生活中的觀察的角度,而該方法的後三個引數和setparallel的後三個引數是一樣的,而第乙個引數是可是角度,這裡你可不要忽視這個角度問題,這個角度是在透檢視中計算投影的乙個重要引數。

似乎一切都設定好了,其實不然,到目前為止我們僅僅是把我們所需要的素材都準備好了。下面我們來看看mobile 3d的管理機制,熟悉3d製圖的人都清楚大部分3d軟體,3d api都是通過樹狀結構來管理素材的,這樣的好處是每個模型、模型組、攝像機等元素作為節點都可以設定自己的旋轉軸等等屬性,並可以按照自己所設定好的動畫資訊進行運動。在mobile 3d中為我們規定了該樹狀結構的根節點必須是world類的例項物件,其中攝影機和光線比較特殊,可以不被放置在這個樹中,而是通過graphics3d類的物件來設定(只是可以不被放到樹中,而不是必須不放到樹中)。

world=new world();

world.addchild(mesh);

記得在前面我們提到過模型可以從外部檔案匯入,這裡要介紹了,你可以通過*.m3g檔案匯入,匯入後你就可以直接獲得world的例項物件,這裡有可能包括各種模型、攝像機、燈光、環境、材質以及三角面的各種資訊。也就是說通過*.m3g檔案,我們可以直接獲得world的實力化物件。

object3d roots = loader.load(「

myworld = (world)roots[0];

希望上述的內容對你學習有幫助,有什麼問題發郵件到我的信箱[email protected]

[email protected]

ps:最後把全部**給大家吧~別嫌我羅嗦,還有一點要強調一下的,帖圖的長寬都要為2的指數例如我這裡用到的帖圖是64*64的

mobile3d入門**

J2ME 2D小遊戲入門之遊戲的框架

一 遊戲的框架 我們的遊戲需要乙個通用的遊戲框架,也方便以後的開發,但實現乙個引擎是複雜的。作為初學者如果要你考慮太多的問題,恐怕會讓你偏離主線,這裡只給出canvas的 不理解可以參看本站的另外一篇系列文章 使用midp2.0開發遊戲 public class mygamecanvas exten...

J2ME 2D小遊戲入門之控制飛機移動

三 控制飛機的移動 實在是等不及了吧?加把勁,讓我們加入遊戲的主角飛機吧。你可以將這個遊戲定位在動作遊戲,乙個動作遊戲需要不斷的從使用者端獲得輸入,基本上不間斷,所以plane需要不斷的改變位置。那麼這個基於楨的遊戲應該定在多少楨合適呢?這需要在手機中測試,在模擬器上,如果定在15 18楨左右,是比...

3D遊戲從入門到精通 2

2 1介紹遊戲 2.11.1 什麼是遊戲 在 高階漢語大詞典 中,遊戲 意為遊樂 玩耍等,遊 意為遊玩 結交 閒逛 學習等,戲 有遊戲 戲劇 角力等解釋,而 玩 則有玩耍 欣賞 投入 反覆體會等含義。從這些林林總總的含義中,我們是否可以得出這樣一些理解 遊戲具有學習的特徵 學習 投入 反覆體會。遊戲...