1

I have some code using android 3dmin library. What I want to achieve, is draw my 3dObject in touch finger point. Basic functionality is already done, but I have problem which perspective projection. My 3dObject is drawn to far/to close from center. Here is my code:

    private float X = 0;
    private float Y = 0;
    private int width;
    private int height;

    private void calculateCoordinates(float x, float y)
    {
        
        Log.d("touch", "x: "+Float.toString(((x-width/2)/5*0.01f)) +" " +
                " y: "+Float.toString(y));
        objModel.position().x=((x-width/2)/5*0.01f);
        objModel.position().y=-((y-height/2)/5*0.01f);
        
    \\convert 2d toch point to Number3d 3dObject point. 5 is a objModel.position().z,
         \\0.01 is a constant. With setting scale at 0.09f and this constant at 0.03f i 
        \\achived desired effect, but why?
    
    }
    
    @Override
    public void initScene() {

        width= getResources().getDisplayMetrics().widthPixels;
        height = getResources().getDisplayMetrics().heightPixels;
        
       
        scene.lights().add(new Light());
        scene.lights().add(new Light());

        IParser parser = Parser.createParser(Parser.Type.OBJ, getResources(),
                "com.example.min3dtest:raw/face_cube_obj", true);
        parser.parse();

        scene.lightingEnabled(true);
    
        objModel = parser.getParsedObject();
        objModel.scale().x = objModel.scale().y = objModel.scale().z = 0.03f;
        objModel.colorMaterialEnabled(true);
        objModel.texturesEnabled(true);
        scene.addChild(objModel);
        
        Log.d(TAG, "camera z = "+Float.toString(scene.camera().position.z));
        

        this.glSurfaceView().setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                int a = event.getAction();

                switch (a) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:{
                
                    X = event.getX();
                    Y = event.getY();
                    calculateCoordinates(X,Y);
                    
                    
                    Log.d("sdfs", "down");
                }
                    break;
                
                }

                return true;
            }
        });
    }

    @Override
    public void updateScene() {

        objModel.rotation().x++;
        objModel.rotation().y++;
        objModel.rotation().z++;
    

    }

}

It somehow depends on scale I think. But I can't figure out why and find good equation.

Jason Aller
  • 3,541
  • 28
  • 38
  • 38

0 Answers0