我在设置用于在3D场景顶部绘制2D的正交视图时遇到麻烦。

我这样设置我的视图:

public void onSurfaceChanged( GL10 gl, int width, int height ) {
    gl.glViewport( 0, 0, width, height );
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    GLU.gluPerspective( gl, 45.0f, ( ( float )width / ( float )height ), 0.1f, 100.0f );
    gl.glMatrixMode( GL10.GL_MODELVIEW );
    gl.glLoadIdentity();
}


我像这样设置了Ortho视图:

public void onSurfaceOrtho( GL10 gl ) {
    gl.glOrthof( 0.0f, 100.0f, 100.0f, 0.0f, -0.1f, 0.1f );
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
}


然后我像这样画我的框架:

public void onDrawFrame( GL10 gl ) {
    gl.glClear( GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT );
    gl.glLoadIdentity();
    scene.onDrawFrame( gl );
    gl.glPushMatrix();
    onSurfaceOrtho( gl );
    screen.onDrawFrame( gl );
    gl.glPopMatrix();
}


场景和屏幕对象是3D和2D的图形对象。屏幕对象尚未绘制任何内容,因为我只是从2D Ortho视图开始。但是,场景对象会绘制一个立方体。因此一切正常,直到我为2D Ortho绘图添加新代码-从glPushMatrix()到glPopMatrix()。现在,除了我清晰的颜色之外,我什么都看不到。

那么onSurfaceOrtho()函数中的代码是什么清除了我的屏幕?

我希望在设置正交视图之前调用该视图所获得的内容不会被留下。我没有调用任何明确的清除位,但似乎仍然清除了我的视图-它是onSurfaceOrtho()函数中的代码。

如何正确设置2D正交视图,以便可以在3D视图的顶部绘制2D?

最佳答案

因此,我在Martinho Fernandes的一点帮助下找出了解决方法。

我设置了两个功能:

public void onSurfaceOrtho( GL10 gl ) {
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    gl.glOrthof( 0.0f, 100.0f, 0.0f, 100.0f, -0.1f, 0.1f );
    gl.glMatrixMode( GL10.GL_MODELVIEW );
    gl.glLoadIdentity();
}

public void onSurfacePerspective( GL10 gl ) {
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    GLU.gluPerspective( gl, 45.0f, aspect, 0.1f, 100.0f );
    gl.glMatrixMode( GL10.GL_MODELVIEW );
    gl.glLoadIdentity();
}


然后在绘制框架时:

public void onDrawFrame( GL10 gl ) {
    gl.glClear( GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT );
    gl.glLoadIdentity();
    onSurfacePerspective( gl );
    scene.onDrawFrame( gl );
    onSurfaceOrtho( gl );
    screen.onDrawFrame( gl );
}


因此,对于每一帧,我必须在绘制3D之前调用我的函数来设置透视图,然后在绘制2D之前调用我的正交函数。

我不确定这是否存在性能问题,或者是否可以对此做某些事情。我知道“完整” OpenGL的列表在这里可以有所帮助...

关于android - 尝试使用Ortho绘制2D,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4189137/

10-13 03:37