2015-12-09 63 views
0

我需要添加我的android項目的功能,以獲取3d對象的每個名稱。對象不規則,可以根據用戶的手勢進行旋轉。我有很多關於openGL光線拾取的知識,但仍然無法弄清楚如何使它工作。我正在使用3d分鐘來加載.obj文件。感謝您的提前。通過觸摸使用min3d獲取3d對象名稱android

回答

0

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。 ;)

+0

我期待着Rajawali。但是,我仍然無法得到爲什麼BaseObject3D無法在android studio中解析,有沒有我錯過的東西? – sarabrown