我在设置3D场景的2D ontop时设置Ortho视图时遇到了问题。尝试使用Ortho绘制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();
}
和我建立了我的邻看法是这样的:
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()中的代码是什么清除了我的屏幕?
我希望在调用设置Ortho视图之前将视图绘制到视图中,以便独立使用。我没有调用任何明确的清除位,但仍然看起来像清除了我的视图 - 它是onSurfaceOrtho()函数中的代码。
如何正确设置2D Ortho视图,以便在3D视图上绘制2D ontop?
不是glOrtho ** bottom **和** top **的第三和第四个参数吗?如果是这样,你的价值观是不是倒置? – 2010-11-15 21:53:39
@Martinho Fernandes:如果我这样做,我会认为top/left是0,0,bottom/right是100,100。但我认为这与它不起作用有什么关系,或者? – Espen 2010-11-15 21:58:00
是的,这可能会像那样工作。但你的问题可能来自你的onSurfaceOrtho方法,因为你正在搞投影矩阵,并将其作为当前模式,然后重新绘制帧... – 2010-11-15 22:00:05