尝试使用Ortho绘制2D

时间:2010-11-15 21:47:48

标签: android opengl-es

我在设置正交视图以绘制3D场景的2D ontop时遇到了麻烦。

我设置了这样的观点:

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正交视图。但是场景对象会绘制一个立方体。所以一切正常,直到我添加2D Ortho绘图的新代码 - 从glPushMatrix()到glPopMatrix()。现在我看不到任何东西,只有我清晰的颜色。

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

我希望在设置Ortho视图的调用之前已经对视图绘制了什么内容。我没有调用任何明确的清楚位,但似乎有些东西清除了我的视图 - 它是onSurfaceOrtho()函数中的代码。

如何正确设置2D正交视图,以便在3D视图上绘制2D ontop?

1 个答案:

答案 0 :(得分:1)

所以我想知道如何处理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之前调用我的函数for orth。

我不确定这是否存在性能问题,或者我是否可以做些什么。我知道“完整的”OpenGL有一些列表,可以帮助我...