android使用min3d引擎加载模型
标签(空格分隔): Android
添加min3D库文件
Min3D库 下载 https://code.google.com/p/min3d/
基于Android OpenGL ES 1.1
将其中有库文件和一个案例
将库文件添加到Android项目java目录下
加载3Ds模型文件
package com.svizzera.controldisplay;
import android.os.Bundle;
import android.support.v7.view.menu.MenuBuilder;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;
import min3d.core.Object3dContainer;
import min3d.core.RendererActivity;
import min3d.parser.IParser;
import min3d.parser.Parser;
import min3d.vos.Light;
public class MainActivity extends RendererActivity {
Object3dContainer mObject3d;
private TextView mTextView;
private Toolbar mToolbar;
private float angleX = 0;
private float angleY = 0;
private float angleZ = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//载入XML界面
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitle(R.string.app_name);
FrameLayout ll = (FrameLayout) findViewById(R.id.ll);
ll.addView(_glSurfaceView);
}
@Override
public void initScene() {
scene.lights().add(new Light()); //设置灯光,否则一片黑,什么都看不见
/**
* 3Ds 模型加载
* 3Ds文件放在\res\raw\
* 贴图路径\res\drawable\中
*/
IParser myParser = Parser.createParser(Parser.Type.MAX_3DS,getResources(),"com.svizzera.controldisplay:raw/mystaff",false);
myParser.parse();
mObject3d = myParser.getParsedObject();
/**
* 这个xyz设置模型的大小
*/
mObject3d.scale().x=0.04f;
mObject3d.scale().z=0.04f;
mObject3d.scale().y=0.04f;
/**
* 设置初始位置,平截头体中xyz的坐标位置
*/
mObject3d.position().x=0;//
mObject3d.position().y=0;
mObject3d.position().z=0;
scene.camera().target = mObject3d.position();
scene.addChild(mObject3d); //把模型加入到场景中,这样模型才能显示
// mObject3d.colorMaterialEnabled(false); //打开材质支持,默认关闭
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// this.getMenuInflater().inflate(R.menu.settingmenu,menu);
// return true;
// }
@Override
public void updateScene() {
}
}
模型加载就是在initScene()中实现
public void initScene() {
scene.lights().add(new Light()); //设置灯光,否则一片黑,什么都看不见
/**
* 3Ds 模型加载
* 3Ds文件放在\res\raw\
* 贴图路径\res\drawable\中
*/
IParser myParser = Parser.createParser(Parser.Type.MAX_3DS,getResources(),"com.svizzera.controldisplay:raw/mystaff",false);
myParser.parse();
mObject3d = myParser.getParsedObject();
/**
* 这个xyz设置模型的大小
*/
mObject3d.scale().x=0.04f;
mObject3d.scale().z=0.04f;
mObject3d.scale().y=0.04f;
/**
* 设置初始位置,平截头体中xyz的坐标位置
*/
mObject3d.position().x=0;//
mObject3d.position().y=0;
mObject3d.position().z=0;
scene.camera().target = mObject3d.position();
scene.addChild(mObject3d); //把模型加入到场景中,这样模型才能显示
// mObject3d.colorMaterialEnabled(false); //打开材质支持,默认关闭
}
mObject3d.colorMaterialEnabled(false); //打开材质支持,默认关闭
这个如果打开会出现一个奇怪的现象,程序在模拟器上能运行成功,到了真机运行时模型就出不来。刚开始还以为是系统的原因,然后用miui和原生系统测试还是一样的结果的。修改发现别将材质支持打开即可。
min3D感觉对3DS模型有点要求,最好用贴图包裹模型。