Android平台3D引擎研究2

來源:互聯網
上載者:User

在上一篇文章中,我們看到可以通過很少的代碼,就可以在螢幕上顯示出一個立方體,相當於min3d中的Hello World程式。但是,對於OpenGL ES編程來說,我們通常需要處理的資料是三角片,可惜使用min3d這樣的引擎把這些細節給隱藏了。在這裡我們自己手動產生一個放在原點上的立方體,給出頂點、三角片、法向量,然後由min3d引擎來顯示,這樣可以更深入理解OpenGL ES的工作原理。具體實現如下代碼所示:

public MgnavObject(boolean useUvs, boolean useNormals, boolean useVertexColors) {
super(4*6, 2*6, useUvs, useNormals,useVertexColors);
float width = 1.0f / 2;
float height = 1.0f / 2;
float deepth = 1.0f / 2;
float textureU = 0.0f;
float textureV = 0.0f;
float normalX = 0.0f;
float normalY = 0.0f;
float normalZ = 0.0f;
short colorR = 0;
short colorG = 0;
short colorB = 0;
short colorA = 0;
// 顯示正對的立方體:
// 面編號:從前面開始,面編號為1(前)、2(右)、3(後)、4(左)、5(上)、6(下)
// 頂點編號:前面從左上方點開始,順時針1、2、3、4;後面與前面編號規則相同即4對5,2對6,3對7,4對8
// 如頂點1在前面時編號為:f1p1,對與上面時f5p1,參與左面時f4p1
// 1. front
normalX = 0f;
normalY = 0f;
normalZ = 1.0f;
// 1.1. 加入前面右上部三角片
short f1p1Idx = vertices().addVertex(-width, height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f1p3Idx = vertices().addVertex(width, -height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f1p2Idx = vertices().addVertex(width, height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f1p1Idx, f1p3Idx, f1p2Idx);
// 1.2. 加入前面的左下部三角片
short f1p4Idx = vertices().addVertex(-width, -height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f1p1Idx, f1p4Idx, f1p3Idx);
// 2. 加右面
normalX = 1.0f;
normalY = 0.0f;
normalZ = 0.0f;
// 2.1. 加三角片2,3,7
short f2p2Idx = vertices().addVertex(width, height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f2p3Idx = vertices().addVertex(width, -height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f2p7Idx = vertices().addVertex(width, -height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f2p2Idx, f2p3Idx, f2p7Idx);
// 2.2. 加三角片2,7,5
short f2p5Idx = vertices().addVertex(width, height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f2p2Idx, f2p7Idx, f2p5Idx);
// 3. 加後面
normalX = 0.0f;
normalY = 0.0f;
normalZ = -1.0f;
// 3.1. 加三角片6,7,8
short f3p6Idx = vertices().addVertex(width, height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f3p7Idx = vertices().addVertex(width, -height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
short f3p8Idx = vertices().addVertex(-width, -height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f3p6Idx, f3p7Idx, f3p8Idx);
// 3.2. 加三角片6,8,5
short f3p5Idx = vertices().addVertex(-width, height, -deepth,
textureU, textureV,
normalX, normalY, normalZ,

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.