搜尋
首頁後端開發XML/RSS教程J2ME Mobile 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個參數,第一個不用說了,後兩者是用來做座標偏移等操作的,操作是這樣的數學公式:
  
  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
RSS文檔:他們如何提供您喜歡的內容RSS文檔:他們如何提供您喜歡的內容Apr 15, 2025 am 12:01 AM

RSS文檔的工作原理是通過XML文件發佈內容更新,用戶通過RSS閱讀器訂閱並接收通知。 1.內容髮布者創建並更新RSS文檔。 2.RSS閱讀器定期訪問並解析XML文件。 3.用戶瀏覽和閱讀更新內容。使用示例:訂閱TechCrunch的RSS源,只需複制鏈接到RSS閱讀器中即可。

用XML建造供稿:RSS的動手指南用XML建造供稿:RSS的動手指南Apr 14, 2025 am 12:17 AM

使用XML構建RSSfeed的步驟如下:1.創建根元素並設置版本;2.添加channel元素及其基本信息;3.添加條目(item)元素,包括標題、鏈接和描述;4.轉換XML結構為字符串並輸出。通過這些步驟,你可以從零開始創建一個有效的RSSfeed,並通過添加額外的元素如發布日期和作者信息來增強其功能。

創建RSS文檔:逐步教程創建RSS文檔:逐步教程Apr 13, 2025 am 12:10 AM

創建RSS文檔的步驟如下:1.使用XML格式編寫,根元素為,包含元素。 2.在內添加、、等元素描述頻道信息。 3.添加元素,每個代表一個內容條目,包含、、、等。 4.可選地添加和元素,豐富內容。 5.確保XML格式正確,使用在線工具驗證,優化性能並保持內容更新。

XML在RSS中的作用:聯合內容的基礎XML在RSS中的作用:聯合內容的基礎Apr 12, 2025 am 12:17 AM

XML在RSS中的核心作用是提供一種標準化和靈活的數據格式。 1.XML的結構和標記語言特性使其適合數據交換和存儲。 2.RSS利用XML創建標準化格式,方便內容共享。 3.XML在RSS中的應用包括定義feed內容的元素,如標題和發布日期。 4.優勢包括標準化和可擴展性,挑戰包括文件冗長和嚴格語法要求。 5.最佳實踐包括驗證XML有效性、保持簡潔、使用CDATA和定期更新。

從XML到可讀的內容:揭開RSS feed的神秘面紗從XML到可讀的內容:揭開RSS feed的神秘面紗Apr 11, 2025 am 12:03 AM

rssfeedsarexmldocuments usedforcontentAggregation and distribution.totransformthemintoreadableContent:1)parsethethexmlusinglibrarieslibrariesliblarieslikeparserinparserinpython.2)andledifferentifferentrssssssssssssssssssssssssssssssssssssssssssssssersions andpotentionparsingrorS.3)

是否有基於JSON的RSS替代方案?是否有基於JSON的RSS替代方案?Apr 10, 2025 am 09:31 AM

JSONFeed是一種基於JSON的RSS替代方案,其優勢在於簡潔性和易用性。 1)JSONFeed使用JSON格式,易於生成和解析。 2)它支持動態生成,適用於現代Web開發。 3)使用JSONFeed可以提升內容管理效率和用戶體驗。

RSS文檔工具:構建,驗證和發布提要RSS文檔工具:構建,驗證和發布提要Apr 09, 2025 am 12:10 AM

如何構建、驗證和發布RSSfeeds? 1.構建:使用Python腳本生成RSSfeed,包含標題、鏈接、描述和發布日期。 2.驗證:使用FeedValidator.org或Python腳本檢查RSSfeed是否符合RSS2.0標準。 3.發布:將RSS文件上傳到服務器,或使用Flask動態生成並發布RSSfeed。通過這些步驟,你可以有效管理和分享內容。

確保您的XML/RSS提要:全面的安全清單確保您的XML/RSS提要:全面的安全清單Apr 08, 2025 am 12:06 AM

確保XML/RSSfeeds安全性的方法包括:1.數據驗證,2.加密傳輸,3.訪問控制,4.日誌和監控。這些措施通過網絡安全協議、數據加密算法和訪問控制機制來保護數據的完整性和機密性。

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

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

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中