【问题标题】:get 3d objects name by touching using min3d android使用 min3d android 通过触摸获取 3d 对象名称
【发布时间】:2016-03-14 05:31:39
【问题描述】:

我需要添加我的 android 项目的功能,以获取 3d 对象的每个名称。对象是不规则的,可以根据用户的手势进行旋转。我有很多关于 openGL 光线拾取的阅读,但仍然无法弄清楚如何使其工作。我正在使用 3d min 加载 .obj 文件。感谢提前。

【问题讨论】:

    标签: android opengl-es .obj ray-picking min3d


    【解决方案1】:

    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 中解析,我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2015-06-06
    相关资源
    最近更新 更多