搜尋
首頁後端開發XML/RSS教程關於J2ME 3D圖形技術的實例詳解

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個參數,第一個不用有3個參數,第一個不用說了,是頂點的座標訊息,後兩個是用來做座標偏移等操作的,操作是這樣的數學公式:
  
  v'=v*s+b
  
#  還有一個
  
  setNormals(vertexBuffer norm)
  
  方法來設定法線。還有一個很重要的方法
  
  setTexCoords(int, VertexArray, float, float[])
  
  這個方法中參數除第一個以外,後參數後三個和
  
  setPositions(VertexBuffer v,float s,float[]b)
  
#  是一樣的,第一個參數是開始的元素編號。這樣說是不是有些抽象呢?給大家一個例子吧,好讓大家理解。
  

#
short x = 20;
  
  short y = 20;
  
  short z = 20;
  
  short fx = (short) -x;
  
  short fy = (short) -y;
  
  short fz = (short) -z;
  
  //定点坐标
  short[] vert = {x,y,z, fx,y,z, x,fy,z, fx,fy,z, //D
  
  fx,y,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, x,y,z, fx,y,z, //A
  
  x,fy,z, fx,fy,z, x,fy,fz, fx,fy,fz}; //E
  
  try{vertArray=
new
 VertexArray(vert.length/3,3,2);
  vertArray.set(0,vert.length/3,vert);
  }catch(
Exception
 e){System.out.
PRint
ln("vert");}
  
  //发线
  byte[] norm = { 0,0,127, 0,0,127, 0,0,127, 0,0,127,
  
  0,0,-127, 0,0,-127, 0,0,-127, 0,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,
  
  0,-127,0, 0,-127,0, 0,-127,0, 0,-127,0};
  
  try{normArray=new VertexArray(norm.length/3,3,1);
  normArray.set(0,norm.length/3,norm);
  }catch(Exception e){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, 0, 0, 1, 1, 0, 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);
  texArray.set(0,tex.length/2,tex);
  }catch(Exception e){System.out.println("tex");}
  
  //建立正方体
  vb=new VertexBuffer();
  vb.setPositions(vertArray,1.0f,
null
);
  vb.setNormals(normArray);
  vb.setTexCoords(0,texArray,1.0f,null);

  在上述程式碼中我建立一個立方體所需要全部頂點和麵的信息,但大家要注重這裡並沒有產生對應的模型。原因就是我們還沒有設定生成模型所以的其他信息,下面我們來看看TriangleStripArray類,該類是構成面所需要的三角面的信息類,熟悉3D製圖的人都清楚構造3D圖形是通過多個面構造一個3D實體的,而三角面是比較常用的一個方法。具體內容我這裡不具體說明了。
  
  下面我們還需要設定一些環境和材質訊息,這裡要用到的類別比較多Appearance、Texture2D、Material。先來看個例子:

  appearnce=new Appearance();
//创建帖图
  Texture2D texture=new Texture2D(image2d);
  texture.setBl
end
Color(Texture2D.FUNC_DECAL);
  texture.setWrapping(Texture2D.WRAP_REPEAT,Texture2D.WRAP_REPEAT);
  texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);
  
  material=new Material();
  material.setColor(Material.D
IF
FUSE, 0xFFFFFFFF);
  material.setColor(Material.SPECULAR, 0xFFFFFFFF);
  material.setShininess(100.0f);
  
  appearnce.setTexture(0,texture);
  appearnce.setMaterial(material);
  
  mesh=new Mesh(vb,tsa,appearnce);
  mesh.setAppearance(0,appearnce);

  我個人感覺Appearance類有些類似VertexBuffer類,同樣是多種屬性的持有者;這裡要強調一點,就是Appearance類別的設定遠不止上述給出的東西,還有很多的設定(例如FOG也就是霧的設定)。 Texture2D是帖圖類,用它來設定帖圖的信息,例如帖圖的方式是平鋪等方式。 Material物名斯意指材質,這裡你可是設定「反光度」、「顏色」等等資訊。另外這裡我還要介紹一個設定渲染參數的方法

//设置poly模式设置
  PolygonMode polygonMode=new PolygonMode();
  polygonMode.setShading(PolygonMode.SHADE_SMOOTH);
  polygonMode.setCulling(PolygonMode.CULL_NONE);
  
  //生成外貌
  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類的對象來設定

【相關推薦】

1. XML免費影片教學

#2. XML技術手冊

3. 李炎恢XHTML影片教學

以上是關於J2ME 3D圖形技術的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
掌握良好的XML:數據交換的最佳實踐掌握良好的XML:數據交換的最佳實踐May 14, 2025 am 12:05 AM

良好形式的XMliscrucialfordAtaExchangeBecapeparsingSiturscrectparsingandSundStandingAcrossystem.1)startwithAdeClarationLike.2)確保everyveryopentingtaghasaclopingtaghasaclosingtagosingtagandelementsareproproproproproperlynested.3)

XML:它仍然使用嗎?XML:它仍然使用嗎?May 13, 2025 pm 03:13 PM

Xmlisstillusedduetoitsstructusednature,人類可讀性,以及範圍的addionindererpriseEnvormentments.1)itfacilitatesdataexchangeInsectInsectorlikeFinance(swift)andHealthCare(hl7)和hl7)

RSS文檔的解剖結構:結構和元素RSS文檔的解剖結構:結構和元素May 10, 2025 am 12:23 AM

RSS文檔的結構包括三個主要元素:1.:根元素,定義RSS版本;2.:包含頻道信息,如標題、鏈接、描述;3.:代表具體的內容條目,包含標題、鏈接、描述等。

了解RSS文檔:綜合指南了解RSS文檔:綜合指南May 09, 2025 am 12:15 AM

RSS文檔是一種簡便的訂閱機制,通過XML文件發佈內容更新。 1.RSS文檔結構由和元素組成,包含多個。 2.使用RSS閱讀器訂閱頻道,並通過解析XML提取信息。 3.高級用法包括使用feedparser庫進行過濾和排序。 4.常見錯誤包括XML解析和編碼問題,調試時需驗證XML格式和編碼。 5.性能優化建議包括緩存RSS文檔和異步解析。

RSS,XML和現代網絡:內容聯合深度潛水RSS,XML和現代網絡:內容聯合深度潛水May 08, 2025 am 12:14 AM

RSS和XML在現代Web中依然重要。 1.RSS用於發布和分發內容,用戶可通過RSS閱讀器訂閱並獲取更新。 2.XML作為標記語言,支持數據存儲和交換,RSS文件基於XML。

基礎知識超越:XML啟用的高級RSS功能基礎知識超越:XML啟用的高級RSS功能May 07, 2025 am 12:12 AM

RSS可以實現多媒體內容嵌入、條件訂閱、以及性能和安全性優化。 1)通過標籤嵌入多媒體內容,如音頻和視頻。 2)使用XML命名空間實現條件訂閱,允許訂閱者根據特定條件篩選內容。 3)通過CDATA節和XMLSchema優化RSSFeed的性能和安全性,確保穩定性和符合標準。

解碼RSS:Web開發人員的XML底漆解碼RSS:Web開發人員的XML底漆May 06, 2025 am 12:05 AM

RSS是一種基於XML的格式,用於發布常更新的數據。作為Web開發者,理解RSS能提升內容聚合和自動化更新能力。通過學習RSS結構、解析和生成方法,你將能自信地處理RSSfeeds,優化Web開發技能。

JSON與XML:為什麼RSS選擇XMLJSON與XML:為什麼RSS選擇XMLMay 05, 2025 am 12:01 AM

RSS選擇XML而不是JSON是因為:1)XML的結構化和驗證能力優於JSON,適合RSS複雜數據結構的需求;2)XML當時有廣泛的工具支持;3)RSS早期版本基於XML,已成標準。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

記事本++7.3.1

記事本++7.3.1

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。