讲完了基本的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是老格式,用的人少。