min3d引擎使用指南(Android)<二>
阿新 • • 發佈:2018-11-07
講完了基本的min3d模型顯示,接著講模型匯入。min3d引擎支援高效率的3ds,obj,md2等格式的匯入。但最好不要匯入大於5MB的模型,那樣會比較慢。
先來個xml檔案
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.keyshare3d.MainActivity" tools:ignore="MergeRootFrame" > <FrameLayout android:id="@+id/frame3d" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> </FrameLayout>
然後是MainActivity.java
import min3d.core.Object3dContainer; import min3d.core.RendererActivity; import min3d.parser.IParser; import min3d.parser.Parser; import min3d.vos.Light; import android.os.Bundle; import android.widget.FrameLayout; import android.widget.Toast; public class MainActivity extends RendererActivity { Object3dContainer faceObject3D; //3D物件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FrameLayout ll = (FrameLayout) this.findViewById(R.id.frame3d);//在xml中,指定顯示的控制元件,這裡是一個FrameLayout。 ll.addView(_glSurfaceView);//加入到_glSurfaceView中顯示。 Toast.makeText(MainActivity.this, "執行正常", Toast.LENGTH_SHORT).show(); } public void initScene() { //scene.backgroundColor().setAll(0xffff0000);//設定場景底色 0x0 ffff0000 scene.lights().add(new Light()); //設定燈光,否則一片黑,看不見 IParser myParser = Parser.createParser(Parser.Type.MAX_3DS, getResources(), "com.example.keyshare3d:raw/ffffff", false);/*在\res\raw\中,模型的檔名為fffff.3ds,貼圖的檔案路徑在\res\drawable\裡,是demo.jpg*/ myParser.parse(); faceObject3D = myParser.getParsedObject(); //faceObject3D = new Box(1,1,1);//新建一個立方體,大小是長寬高各一個單位 faceObject3D.scale().x = 0.007f; faceObject3D.scale().y = 0.007f; faceObject3D.scale().z = 0.007f; faceObject3D.position().x =0;//設定初始位置,平截頭體中xyz的座標位置 faceObject3D.position().y =0; faceObject3D.position().z =0; //faceObject3D.normalsEnabled(false); scene.camera().target = faceObject3D.position(); scene.addChild(faceObject3D);//把模型加入到場景,這樣模型才能顯示,還可以在faceObject3D中加入新模型,同步顯示。 // faceObject3D.colorMaterialEnabled(true); //開啟材質支援,預設是關閉的,記住函式不影響貼圖。 // scene.lightingEnabled(false); //關閉場景的光效,false關掉了啥也看不見。。。 } public void updateScene() { // faceObject3D.rotation().x++;//圍繞著X軸旋轉,正數為順時針,速度由X的數值變化決定 faceObject3D.rotation().y++;//可以單獨圍繞著Y軸(或XZ)旋轉,這個任意,根據外部感測器同步姿態也可以。 faceObject3D.rotation().z++;//旋轉在飛行器上的引數,對應的是pitch,roll,yaw } }
執行效果圖如下。。。
注意:如果是自己用3D MAX製作 .3ds檔案, 最好用UV貼圖,把整個模型包裹起來, obj格式的貼圖,樓主試了很多次,老是隻顯示模型。md2是老格式,用的人少。