OPENGL ES MatrixGrabber和GLU.gluUnproject()混乱

时间:2011-06-21 13:42:39

标签: android opengl-es 3d projection

[编辑]忽略这篇文章,这是一个菜鸟的错误[/编辑]

我上周开始使用Android(=我很陌生:) :)我正在解决一个问题: 我尝试执行光线投射以将对象置于屏幕的某个点下。 我发现GLU.gluUnproject方法是我所需要的,经过大量的失败后,我找到了solution

我在项目中复制了MatrixGrabber,MatrixStack和MatrixTrackingGL类,看起来很好。

我使用的方法如下:

static public Vertex unProject( float x, float y, World world )
{

world.mg = new MatrixGrabber();  
world.mg.getCurrentState(world.gl);

float[] pos = new float[4]; 

GLU.gluUnProject(   x, y, 0f, 
                    world.mg.mModelView, 0, 
                    world.mg.mProjection, 0, 
                    world.view().get_size(), 0, 
                    pos, 0);

return new Vertex(pos[0], pos[1], pos[2]);

}

Vertex是一个带有x,y,z浮点数的数据持有者

World扩展了GLSurfaceView,我在构造函数中进行GLWrapper替换: world.mg是一个MatrixGrabber()

public World( Context context )
{
super(context);
[...]
//allows matrix manipulation
setGLWrapper( new GLWrapper()  
{  
    public GL wrap(GL gl)  
    {  
        return new MatrixTrackingGL(gl);  
    }  
});
}

我确保在拨打电话时所有变量都已实现

但我仍然无法解决这个问题:应用程序在

上严重崩溃
world.mg.getCurrentState(world.gl);

呼叫。 它也会在getCurrentModelView(gl)上崩溃;和getCurrentProjection(gl);

我使用的是Android 1.5,但尝试使用其他版本最多3个。 我真的不知道OpenGLI使用的是哪个版本; GL10在任何地方都使用,我不知道它是否重要,我读过的只关注GL10“Type”。

如果有人有线索,建议,解决方法或解决方案,我会幸福快乐

无论如何,感谢阅读:)

2 个答案:

答案 0 :(得分:1)

private void getMatrix(GL10 gl, int mode, float[] mat) {
        MatrixTrackingGL gl2 = new MatrixTrackingGL(gl);
        gl2.glMatrixMode(mode);
        gl2.getMatrix(mat, 0);
    }

替换MatrixGrabber.java第一行的转换

答案 1 :(得分:0)

我的World类扩展了GLSurfaceView,并使用MatrixTrackingGL作为包装器。

问题是Viewport还扩展了GLSurfaceView并且没有使用MatrixTrackingGL ...愚蠢。

现在世界上没有任何扩展,Viewport(扩展GLSurfaceView)实现了Wrapper的改变,一切都很好。