简体   繁体   English

通过使用Min3D Android触摸获取3D对象名称

[英]get 3d objects name by touching using min3d android

i need to add features of my android project, to get each name of the 3d objects. 我需要添加我的android项目的功能,以获取3d对象的每个名称。 The objects are irregular and it can be rotate based on the user's gesture. 这些对象是不规则的,可以根据用户的手势进行旋转。 I have lots of reading on openGL ray picking but still cant figure out how to make it work. 我有很多关于openGL光线拾取的文章,但仍然不知道如何使它工作。 I am using 3d min to load the .obj file. 我正在使用3d分钟加载.obj文件。 Thanks for advance. 感谢前进。

The creator of min3d has deprecated the library and has an updated version called Rajawali built off of the same principles which you can find here . min3d的创建者已弃用该库,并基于在此找到的相同原理构建了名为Rajawali的更新版本。

Setting up your scene/project will be very similar if not the same. 如果不相同,设置场景/项目将非常相似。 Better performance too. 性能也更好。

As for getting 3d objects name after touching the object, do this: 至于触摸对象后获得3d对象名称,请执行以下操作:

In your main activity; 在您的主要活动中;

    public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN)
    {
        mRenderer.getObjectAt(event.getX(), event.getY());
    }
    return super.onTouchEvent(event);
}

In your renderer, you have to register the "selectable" objects in the initScene; 在渲染器中,您必须在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
    }
}
    }

If you have any issues, feel free to ask. 如果您有任何问题,请随时提问。 I've been using Rajawali since way back when min3d was created. 自从min3d创建以来,我就一直在使用Rajawali。 ;) ;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM