У меня проблемы с настройкой вида Ortho для рисования 2D поверх 3D-сцены.
Я настроил свой вид следующим образом:
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();
}
и настроилмой вид Орто выглядит следующим образом:
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.Объект на экране пока ничего не рисует, так как я только начинаю с двухмерных видов Ortho.Однако объекты сцены рисуют куб.Так что все работает нормально, пока я не добавлю новый код для 2D-рисования Орто - от glPushMatrix () до glPopMatrix ().Теперь я не вижу ничего, кроме моего ясного цвета.
Так что же делает код в функции onSurfaceOrtho (), который очищает мой экран?
Я ожидаю, что было нарисованопредставление перед вызовом, чтобы настроить представление Ortho, чтобы остаться в покое.Я не вызываю никаких явных битов, но все же кажется, что что-то очищает мой взгляд - и это код в функции onSurfaceOrtho ().
Как правильно настроить 2D-представление Ortho, чтобы яможно нарисовать 2D поверх моего 3D вида?