- 說明:min3d引擎,是一個體積只有幾百KB的框架。基於opengl es 1.x,對應open gl 1.x + 2;需要繼承RenderActivity,在initScene()裏面初始化,在updateScene()更新姿態。有兩種方式顯示,第一種是整個屏幕都用來顯示3D,效率高。 另一種是在FrameLayout或者TextrueView等小範圍內,獲取到對象後,加入到_glSurfaceView裏面顯示。這種方式控制隨意,但顯示效率不高,經過測試,顯示1MB之內的導入模型,運行流暢度高(2GB運行內存)
- 下載:谷歌min3d包 不方便翻牆的同學,自己在CSDN裏面下載,也可以在百度雲min3d包下載,導入後可以使用。需要使用的是這些包
![]()
- 初步使用:如果工程直接編譯通過。可以看看包裏的例程。如果編譯通不過,沒關係。把上圖中那些包,複製到一個新的工程。
public class MainActivity extends RendererActivity {
//繼承RendererActivity,如果還有其他需要集成的,可以在RendererActivity.java裏面繼承。
Object3dContainer faceObject3D; //3D對象
float x, y, z;
String str = "";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout ll = (FrameLayout) this.findViewById(R.id.frame_3d);//在xml中,指定顯示的控件,這裏是一個FrameLayout。
ll.addView(_glSurfaceView);//加入到_glSurfaceView中顯示。
Toast.makeText(MainActivity.this, "執行正常", Toast.LENGTH_SHORT).show();
}
//在繼承了RendererActivity之後,會提示你 重寫initScene,updateScene方法。
public void initScene() {
scene.backgroundColor().setAll(0x0);//設置場景底色
scene.lights().add(new Light()); //設置燈光,否則一片黑,看不見
faceObject3D = new Box(1,1,1);//新建一個立方體,大小是長寬高各一個單位
faceObject3D.position().x =0;//設置初始位置,平截頭體中xyz的座標位置
faceObject3D.position().y =0;
faceObject3D.position().z =0;
scene.addChild(faceObject3D);//把模型加入到場景,這樣模型才能顯示,還可以在faceObject3D中加入新模型,同步顯示。
//這樣這個函數的基本功能就寫完了多個模型需要多個 3D對象,天空盒是SkyBox,還有橢圓,紋理,初始化的部分,都在這個方法裏面實現。
}
public void updateScene() {
faceObject3D.rotation().x++;//圍繞着X軸旋轉,正數爲順時針,速度由X的數值變化決定
faceObject3D.rotation().y++;//可以單獨圍繞着Y軸(或XZ)旋轉,這個任意,根據外部傳感器同步姿態也可以。
faceObject3D.rotation().z++;//旋轉在飛行器上的參數,對應的是pitch,roll,yaw
}