首頁 後端開發 XML/RSS教程 J2ME Mobile 3D入門教學系列文章之一

J2ME Mobile 3D入門教學系列文章之一

Dec 19, 2016 pm 01:51 PM
mobile

 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,float[]b)
  
  是用來設定頂點位置的,在這個方法中你會發現有3個參數,第一個不用說了,後兩者是用來做座標偏移等操作的,操作是這樣的數學公式:
  
  v'=v*s+b
  
  〟set.方法來設定法線。還有一個很重要的方法
  
  setTexCoords(int, VertexArray, float, float[])
  
  這個方法中參數除第一個以外,後三個和🀜〜 〜〜,Fuffers(Tuffers) ] b)
  
  是一樣的,第一個參數是開始的元素編號。這樣說是不是有些抽象呢?給大家一個例子吧,好讓大家理解。
    
  short x = 20;
  
  short y = 20;
  㟎 〕  
  short fy = (short) -y;
  
  short fz = (short ) -z;
  
  //定點座標
  short[] vert = {x,y,z, fx,y,z, x,fy,z, fx,fy,z, //D
 , fz, x,y,fz, fx,fy,fz, x,fy,fz, //C
  
  fx,y,z, fx,y,fz, fx,fy,z, fx,fy,fz, / /B
  
  x,y,fz, x,y,z, x,fy,fz, x,fy,z, //F
  
  x,y,fz, fx,y,fz, xy,y, , fx,y,z, //A
  
  x,fy,z, fx,fy,z, x,fy,fz, fx,fy,fz}; //E
  .length/3,3,2);
  vertArray.set(0,vert.length/3,vert);
  }catch(Exception e){System.out.PRintln("vert");}
 『發線
byte[] norm = { 0,0,127, 0,0,127, 0,0,127, 0,0,127,
  
  0,0,-127, 0,0,-127, 0,0,127, 27,0,127, 27,0, 127,
  
  -127,0,0, -127,0,0, -127,0,0, -127,0,0,
  
  127,0,0, 127,0,0, 127,0, 0, 127,0,0,
  
  0,127,0, 0,127,0, 0,127,0, 0,127,0,
  🀜  20,1127,0,127,0,12,021, ,-127,0};
  
  try{normArray=new VertexArray(norm.length/3,3,1);
  normArray.set(0,norm.length/3,dn); {System.out.println("norm");e.printStackTrace();}
  
  //給出頂點對應圖片上的點(vert和tex數組是一一對應的)
 short[] tex = { 1, 0, 0, 0, 1, 1, 0, 1,
  
  1, 0, 0, 0, 1, 1, 0, 1,
  
 『1, 0, 1, 1, 1, 1, 1, 1,
  
  1, 0, 0, 0, 1, 1, 0, 1,
  
  1, 0, 0, 0, 1, 1, 0, 1,
  
  1, 0, 0, 0, 1, 1, 0, 1 };
  
  try{
  texArray=new VertexArray(tex.length/2,2,2);
  『 ){System.out.println("tex");}
  
  //建立正方體
  vb=new VertexBuffer();
  vb.setPositions(vertArfull);
vb.setTexCoords(0,texArray,1.0f,null);
  
  在上述程式碼中我建立一個正方體所需要全部頂點和麵的信息,但大家要注重這裡並沒有產生對應的模型。原因就是我們還沒有設定生成模型所以的其他信息,下面我們來看看TriangleStripArray類,該類是構成面所需要的三角面的信息類,熟悉3D製圖的人都清楚構造3D圖形是通過多個面構造一個3D實體的,而三角面是比較常用的一個方法。具體內容我這裡不具體說明了。
  
  下面我們還需要設定一些環境和材質訊息,這裡要用到的類別比較多Appearance、Texture2D、Material。先來看個例子:
  
  appearnce=new Appearance();
  
  //建立貼圖
  Texture2D texture=new Texture2D.
  texture.setWrapping(Texture2D.WRAP_REPEAT ,Texture2D.WRAP_REPEAT);
  texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);
  
  material=new Materialserials=newat​​k(Ferialalk也at. ;
  material.setColor(Material.SPECULAR, 0xFFFFFFFF);
  material.setShininess(100.0f);
  
  appearnce.setTexture(0,texture);
  ce.S. sa,appearnce);
  mesh.setAppearance( 0,appearnce);
  
  我個人感覺Appearance類有些類似VertexBuffer類,同樣是多種屬性的持有者;在這裡要強調一點,就是Appearance類的設定遠不止上述給出的東西,還有很多的設定(例如FOG也就是霧的設定)。 Texture2D是帖圖類,用它來設定帖圖的信息,例如帖圖的方式是平鋪等方式。 Material物名斯意指材質,這裡你可是設定「反光度」、「顏色」等等資訊。另外這裡我還要介紹一個設定渲染參數的方法
  
  //設定poly模式設定
  PolygonMode polygonMode=new PolygonMode();
  polygonMode.setSham( );
  
  //生成外貌
  appearnce=new Appearance();
  appearnce.setPolygonMode(polygonMode);
  🀜 〟〜?其實在PolygonMode中已經為我們做了很多工作。此的設定很類似3D MAX中的Poly的使用。
  
  剛才的程式碼中也給出了一個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類的對象來設定(只是可以不

 以上是J2ME Mobile 3D入門教學系列文章之一的內容,更多相關內容請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

手機XML轉PDF,轉換速度快嗎? 手機XML轉PDF,轉換速度快嗎? Apr 02, 2025 pm 10:09 PM

手機XML轉PDF的速度取決於以下因素:XML結構的複雜性手機硬件配置轉換方法(庫、算法)代碼質量優化手段(選擇高效庫、優化算法、緩存數據、利用多線程)總體而言,沒有絕對的答案,需要根據具體情況進行優化。

怎麼在手機上把XML文件轉換為PDF? 怎麼在手機上把XML文件轉換為PDF? Apr 02, 2025 pm 10:12 PM

不可能直接在手機上用單一應用完成 XML 到 PDF 的轉換。需要使用雲端服務,通過兩步走的方式實現:1. 在雲端轉換 XML 為 PDF,2. 在手機端訪問或下載轉換後的 PDF 文件。

手機上如何將XML轉換成PDF? 手機上如何將XML轉換成PDF? Apr 02, 2025 pm 10:18 PM

直接在手機上將XML轉換為PDF並不容易,但可以藉助雲端服務實現。推薦使用輕量級手機App上傳XML文件並接收生成的PDF,配合雲端API進行轉換。雲端API使用無服務器計算服務,選擇合適的平台至關重要。處理XML解析和PDF生成時需要考慮複雜性、錯誤處理、安全性和優化策略。整個過程需要前端App與後端API協同工作,需要對多種技術有所了解。

xml格式化工具推薦 xml格式化工具推薦 Apr 02, 2025 pm 09:03 PM

XML格式化工具可以將代碼按照規則排版,提高可讀性和理解性。選擇工具時,要注意自定義能力、對特殊情況的處理、性能和易用性。常用的工具類型包括在線工具、IDE插件和命令行工具。

web.xml怎麼打開 web.xml怎麼打開 Apr 03, 2025 am 06:51 AM

要打開 web.xml 文件,可以使用以下方法:使用文本編輯器(如記事本或 TextEdit)使用集成開發環境(如 Eclipse 或 NetBeans)使用命令行編輯命令(Windows:notepad web.xml;Mac/Linux:open -a TextEdit web.xml)

有什麼手機APP可以將XML轉換成PDF? 有什麼手機APP可以將XML轉換成PDF? Apr 02, 2025 pm 08:54 PM

無法找到一款將 XML 直接轉換為 PDF 的應用程序,因為它們是兩種根本不同的格式。 XML 用於存儲數據,而 PDF 用於顯示文檔。要完成轉換,可以使用編程語言和庫,例如 Python 和 ReportLab,來解析 XML 數據並生成 PDF 文檔。

xml格式怎麼打開 xml格式怎麼打開 Apr 02, 2025 pm 09:00 PM

用大多數文本編輯器即可打開XML文件;若需更直觀的樹狀展示,可使用 XML 編輯器,如 Oxygen XML Editor 或 XMLSpy;在程序中處理 XML 數據則需使用編程語言(如 Python)與 XML 庫(如 xml.etree.ElementTree)來解析。

xml在線格式化 xml在線格式化 Apr 02, 2025 pm 10:06 PM

XML 在線格式化工具可自動將混亂的 XML 代碼整理成易於閱讀和維護的格式。通過解析 XML 的語法樹並應用格式化規則,這些工具優化了代碼的結構,增強了其可維護性和團隊協作效率。

See all articles