0
我需要添加我的android项目的功能,以获取3d对象的每个名称。对象不规则,可以根据用户的手势进行旋转。我有很多关于openGL光线拾取的知识,但仍然无法弄清楚如何使它工作。我正在使用3d分钟来加载.obj文件。感谢您的提前。通过触摸使用min3d获取3d对象名称android
我需要添加我的android项目的功能,以获取3d对象的每个名称。对象不规则,可以根据用户的手势进行旋转。我有很多关于openGL光线拾取的知识,但仍然无法弄清楚如何使它工作。我正在使用3d分钟来加载.obj文件。感谢您的提前。通过触摸使用min3d获取3d对象名称android
min3d的创建者已弃用该库,并有一个名为Rajawali的更新版本,它建立在相同的原理上,您可以找到here。
如果不相同,设置您的场景/项目将非常相似。更好的表现。
至于触摸对象之后获得的3D对象的名字,这样做:
在您的主要活动;
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
mRenderer.getObjectAt(event.getX(), event.getY());
}
return super.onTouchEvent(event);
}
在您的渲染器中,您必须在initScene中注册“可选”对象;
public class Renderer extends RajawaliRenderer implements OnObjectPickedListener {
private PointLight mLight;
private BaseObject3D object1, object2;
private ObjectColorPicker mPicker;
public RajawaliObjectPickingRenderer(Context context) {
super(context);
setFrameRate(60);
}
protected void initScene() {
mPicker = new ObjectColorPicker(this);
mPicker.setOnObjectPickedListener(this);
mLight = new PointLight();
mLight.setPosition(-2, 1, 4);
mLight.setPower(1.5f);
mCamera.setPosition(0, 0, 7);
object1 = new BaseObject3D(serializedMonkey);
object1.addLight(mLight);
object1.setScale(.7f);
object1.setPosition(-1, 1, 0);
object1.setRotY(0);
addChild(object1);
object2 = object1.clone();
object2.addLight(mLight);
object2.setScale(.7f);
object2.setPosition(1, 1, 0);
object2.setRotY(45);
addChild(object2);
mPicker.registerObject(mMonkey3);
mPicker.registerObject(mMonkey4);
}
public void getObjectAt(float x, float y) {
mPicker.getObjectAt(x, y);
}
public void onObjectPicked(BaseObject3D object) {
//Do whatever you want here once the object is touched
if object.picked == mObject1{
//print line here or toast
//just an example, not legit code
}
}
}
如果您有任何问题,请随时问。 min3d创建后,我一直在使用Rajawali。 ;)
我期待着Rajawali。但是,我仍然无法得到为什么BaseObject3D无法在android studio中解析,有没有我错过的东西? – sarabrown