- 说明: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 }
这里可以看到一个正方体,顺着XYZ三个轴的方向翻滚,看起来不是很舒服。但框架出来了,后面再美化吧。顺便说一句,min3d引擎支持MPL协议(做商业用途也免费,声明一下使用了这个模块即可),从功能上说,是支持 导入3DS和OBJ模型的最小引擎。只是纹理映射有点麻烦,后面会讲到。