[编辑]忽略这篇文章,这是一个菜鸟的错误[/编辑]
我上周开始使用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”。
如果有人有线索,建议,解决方法或解决方案,我会幸福快乐
无论如何,感谢阅读:)答案 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的改变,一切都很好。