我在设置正交视图以绘制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?
答案 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有一些列表,可以帮助我...