亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

精通Micro3D v3基礎技術

2019-11-18 16:14:23
字體:
來源:轉載
供稿:網友

原文地址鏈接

 

現在將帶領你使用Mascot Capsule Micro 3D v3進行3D開發,這里有十個簡單的例子將一步一步的向你介紹你必須掌握的基本技術。所有例子都基于同一個核心代碼去展示一個簡單的3D模型。下面是這些例子的基本組織和內容:

 

例1 簡單的顯示這是3D模型

例2 按下數字鍵‘2’,’8’,’4’,’6’)實現3D模型上下左右移動

例3 按下數字鍵’7’和’9’實現3D模型的縮放效果(注意:縮放模型不是讓該模型在Z軸上移動)

例4 按下”Light”鍵實現在3D場景中添加燈光效果

例5 按下”Perspective”鍵實現3D模型在平行投影和透視投影之間切換

例6 使用手機的方向鍵實現3D模型的旋轉

例7 給3D模型添加動畫效果

例8 添加兩個動畫,使用數字鍵’1’進行切換

例9 顯示多個3D模型

例10 顯示如何在屏幕上繪制一個原始模型

 

所有的例子可以通過下面的鏈接下載:

下載源代碼

 

注意:這些程序是使用的Micro3D技術,但并不是很好的編碼實踐。例如,程序并沒有編碼實現處理中斷退出該程序時正常的軟鍵,只得一直按住”back”鍵來退出程序

       大多數代碼都很容易理解,并不需要更多的解釋,不過下面還是有些要點需要論述。

 

例1 簡單的顯示這是3D模型

下面幾行是基本的3D模型和紋理的導入和設置:

figure = new Figure("/example/DemoMIDP/test_model_robo.mbac");
mainTexture = new Texture("/example/DemoMIDP/tex_001.bmp", true);
figure.setTexture(mainTexture);

下面是在Canvas里繪制3D世界

PRivate Graphics3D g3 = new Graphics3D();

protected void paint(Graphics g) {
 ...
  g3.bind(g);
   g3.renderFigure(figure, 0, 0, layout, effect);
    //Flush to screen
    g3.flush();
            //Release the Graphics 3D object
            g3.release(g);

}

例2 移動模型

AffineTrans類是用來處理所有變換的,例如:移動和旋轉。程序在X和Y軸上移動3D模型只需要改變AffineTrans矩陣的兩個變量。

affineTrans.m03 += moveX;
affineTrans.m13 += moveY;

例3 縮放模型

要實現3D模型的縮放,我們應該先用比例因數創建一個矩陣,然后添加這個矩陣到AffineTrans矩陣中。

AffineTrans scaleTrans = new AffineTrans();
scaleTrans.set(scaleX,0,0,0,0,scaleY,0,0,0,0,scaleZ,0);
// Scaling the model
affineTrans.mul(scaleTrans);

例4 添加燈光

燈光非常容易設置。一個方向向量和一個亮度值就足夠了

private Vector3D dir = new Vector3D(-3511, 731, 878); // Light vector
private final int dirIntensity = 4096; // Light intensity
private final int ambIntensity = 1755; // Ambient light intensity
...
light = new Light(dir,dirIntensity,ambIntensity);
effect = new Effect3D( light, Effect3D.NORMAL_SHADING, true, null);
g3.renderFigure(figure, 0, 0, layout, effect);
...

例5 投影

你可以3D模型上使用透視或平行投影。通過簡單的調用實現兩者間轉換。

// Camera distance
private final static int persNear = 1; // Minimum distance to the camera
private final static int persFar = 4096; // Maximum distance to the camera
private final static int persAngle = 682; // Angle
...
//Setting the projection method
if(persEnabled){
 layout.setPerspective(persNear, persFar, persAngle);
}else{
 layout.setParallelSize(800, 800);
}

例6 旋轉模型

旋轉3D模型與例3中的縮放模型是用的同樣的技術。你創建一個AffineTrans對象來控制你的旋轉數據,并把它的矩陣添加到模型的主AffineTrans里。

// Rotation value
public final static int SPIN_X_PLUS = 100; // Increase or decrease value of the rotation around X axis
public final static int SPIN_Y_PLUS = 100; // Increase or decrease value of the rotation around Y axis
private static int spinX = 0; // X axis rotation value
private static int spinY = 0; // Y axis rotation value
...
kc = getGameAction(kc);
switch (kc) {
case Canvas.UP: // roll up
  setSpinX(-SPIN_X_PLUS);
  break;
 case Canvas.DOWN: // roll down
  setSpinX(SPIN_X_PLUS);
  break;
case Canvas.LEFT: // roll left
  setSpinY(-SPIN_Y_PLUS);
  break;
 case Canvas.RIGHT: // roll right
  setSpinY(SPIN_Y_PLUS);
  break;
 default:
  break;
}
...
AffineTrans rotTrans = new AffineTrans();
//X roll
rotTrans.setIdentity();
rotTrans.setRotationX(spinX);
affineTrans.mul(rotTrans);
//Y roll
rotTrans.setIdentity();
rotTrans setRotationY(spinY);
affineTrans.mul(rotTrans);

例7 模型中的動畫效果

這個例子為你演示如何導入.mtra文件里的動畫數據并應用于你的3D模型。

action = new ActionTable("/example/DemoMIDP/action_01.mtra");
...
frame += action.getNumFrames(0)/10;
if( frame >= action.getNumFrames(0) ){
 frame = 0;
}
figure.setPosture(action, 0, frame);
g3.renderFigure(figure, 0, 0, layout, effect);

例8 模型中的多個動畫效果

使用兩個不同的動畫文件比不比使用一個動畫文件難多少。僅僅是導入兩個文件并在每次3D模型繪制時選擇其中一個。

action[0] = new ActionTable("/example/DemoMIDP/action_01.mtra");
action[1] = new ActionTable("/example/DemoMIDP/action_02.mtra");
...  
case Canvas.KEY_NUM1: // action
 actNo = 1;
 frame = 0;
 break;
...
frame += action[actNo].getNumFrames(0)/10;
if( frame >= action[actNo].getNumFrames(0) ){
frame = 0;
 actNo = 0;
}
figure.setPosture(action[actNo], 0, frame);
g3.renderFigure(figure, 0, 0, layout, effect);

例9 顯示多個3D模型

使用多個3D模型同在一個模型中使用多個動畫一樣的簡單。從新從一個新的3D模型.mbac文件去創建一個新的figure實例與創建第一個實例的方法相同。

// One Figure created from a mbac file...
figure = new Figure("/example/DemoMIDP/test_model_robo.mbac");
mainTexture = new Texture("/example/DemoMIDP/tex_001.bmp", true);
figure.setTexture(mainTexture);

//... And another Figure created from another mbac file.
figureBg = new Figure("/example/DemoMIDP/test_model_haikei.mbac");

例10 用原型繪制

即使Micro3D v3主要是使用預先建立的模型進行3D建模編程,你也可以直接從原始的數組命令來創建3D圖形。

// Use this array of commands to show a triangle with texture....
static int[] command = {
 Graphics3D.COMMAND_LIST_VERSION_1_0,
Graphics3D.PRIMITVE_TRIANGLES
 Graphics3D.PDATA_NORMAL_PER_FACE
      Graphics3D.PDATA_TEXURE_COORD
 Graphics3D.PATTR_LIGHTING
      Graphics3D.PATTR_SPHERE_MAP
Graphics3D.PATTR_BLEND_HALF
 (1<<16),   // Nbr of primitives, in this case just one triangle
 0, 0, 0,           // The triangle's ccordinates
 200, 0, 0,
 0, 200, 0,
 0, 0, 4096,            // The Normal
      0,255,255,255, 0, 0,   // The coordinates for the texture
 Graphics3D.COMMAND_END, };
...
protected void paint(Graphics g) {
...
g3.drawCommandList( mainTexture, 0, 0, layout, effect, command);
...
}


 

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va电影大全| 亚洲一区二区三区久久| 久久亚洲国产精品| 国产精品h在线观看| 高清日韩电视剧大全免费播放在线观看| 久久综合久久88| 92看片淫黄大片看国产片| 久久99精品久久久久久青青91| 国内精品视频久久| 亚洲国产精品视频在线观看| 国产精品毛片a∨一区二区三区|国| 国产亚洲精品va在线观看| 久久成人在线视频| 亚洲电影在线看| 97国产suv精品一区二区62| 国产一区二区三区毛片| 亚洲男人av电影| 欧美在线免费看| 日韩高清人体午夜| 国产精品九九久久久久久久| 欧美视频裸体精品| 91精品国产一区| 91精品国产色综合久久不卡98| 久久99久久亚洲国产| 亚洲精品一区中文| 91在线|亚洲| 亚洲国产精品va在线观看黑人| 亚洲一区二区久久| 国产精品久久久久久中文字| 91精品国产91久久久| 中文字幕精品久久久久| 久久精品国产精品亚洲| 国产极品jizzhd欧美| 中文字幕亚洲在线| 欧美日韩色婷婷| 中文字幕亚洲一区在线观看| 日本国产一区二区三区| 欧美激情网站在线观看| 久久久成人的性感天堂| 97激碰免费视频| 国产成人精品综合| 国产有码在线一区二区视频| 91精品视频在线播放| 曰本色欧美视频在线| 成人h视频在线观看播放| 久久久久999| 欧美国产日韩二区| 欧美人与性动交a欧美精品| 欧美中文字幕在线观看| 亚洲精品在线91| 亚洲欧美日韩高清| 欧美激情在线有限公司| 午夜精品福利视频| 国产成人欧美在线观看| 亚洲精品电影久久久| 精品国偷自产在线视频| 欧美激情第三页| 亚洲高清福利视频| 亚洲理论在线a中文字幕| 成人国内精品久久久久一区| 久久成人18免费网站| 另类美女黄大片| 欧美乱大交xxxxx| 日本韩国欧美精品大片卡二| 日韩精品在线播放| 俺去亚洲欧洲欧美日韩| 国产suv精品一区二区三区88区| 久久亚洲精品中文字幕冲田杏梨| 98午夜经典影视| 欧美日韩福利在线观看| 国产aⅴ夜夜欢一区二区三区| 亚洲激情成人网| 亚洲va久久久噜噜噜| 精品国产91久久久久久| 亚洲欧美日韩一区二区在线| 久久资源免费视频| 亚洲一区二区三区成人在线视频精品| 亚洲第一网站免费视频| 亚洲一区999| 爱福利视频一区| 亚洲成人久久网| 久久人人爽亚洲精品天堂| 欧洲日韩成人av| 蜜月aⅴ免费一区二区三区| 国产成人av网址| 久久精品国产免费观看| 国产高清在线不卡| 欧美日韩国产精品| 国产精品久久久久久久久男| 宅男66日本亚洲欧美视频| 在线一区二区日韩| 欧美性生交xxxxxdddd| 国自产精品手机在线观看视频| 夜夜躁日日躁狠狠久久88av| 日韩精品免费综合视频在线播放| 亚洲理论在线a中文字幕| 久久久久久成人精品| 成人免费午夜电影| 日韩资源在线观看| 久久亚洲综合国产精品99麻豆精品福利| 福利视频导航一区| 国产精品96久久久久久又黄又硬| 国产精品视频一区二区高潮| 日韩在线视频观看正片免费网站| 久久九九亚洲综合| 欧美亚洲激情视频| 成人午夜激情免费视频| 亚洲国产成人在线视频| 欧美亚洲视频在线看网址| 一本色道久久88精品综合| 欧美体内谢she精2性欧美| 欧美巨大黑人极品精男| 亚洲女人被黑人巨大进入| 色偷偷综合社区| 色综合视频网站| 亚洲成av人影院在线观看| 日韩av中文字幕在线| 青青草原成人在线视频| 中文字幕日韩精品有码视频| 亚洲男人天堂视频| 日韩精品视频免费在线观看| 日韩欧美国产网站| 日韩网站在线观看| 亚洲影视九九影院在线观看| 中文字幕亚洲字幕| 日韩电影在线观看中文字幕| 91禁外国网站| 成人黄色av免费在线观看| 亚洲sss综合天堂久久| 欧美成人午夜影院| 欧美综合激情网| 亚洲网站在线观看| 国外日韩电影在线观看| 精品五月天久久| 亚洲精品中文字幕有码专区| 久久久国产91| 丝袜美腿亚洲一区二区| 欧美日韩中文在线| 一区二区三区在线播放欧美| 色哟哟入口国产精品| 久久香蕉频线观| 丝袜一区二区三区| 国产成人精品午夜| 日韩在线视频中文字幕| 国产91久久婷婷一区二区| 国产精品毛片a∨一区二区三区|国| 中文字幕欧美精品日韩中文字幕| 91高清视频在线免费观看| 国产精品欧美久久久| 日韩成人中文电影| 亚洲第一视频在线观看| 成人a在线观看| 日韩在线视频免费观看高清中文| 久久视频国产精品免费视频在线| 九九久久精品一区| 国产精品黄色影片导航在线观看| 色综合老司机第九色激情| 怡红院精品视频| 欧美激情免费视频| 96sao精品视频在线观看| 亚洲人成电影网站| 国产精品网站大全| 亚洲国产精品专区久久| 日韩中文字幕免费看|