1

我正在创建一个仅在横向模式下运行的应用程序。我正在尝试使用带纹理的四边形创建背景,尽管我还不会担心纹理。我一直在尝试简单地绘制一个从 drawOverlay(GL10 gl) 填充屏幕的四边形,并禁用 GL_DEPTH_TEST 但每当我这样做时,四边形都不会完全填满屏幕,我可以在底部和顶部看到 glClearColor 条屏幕。

无法使用我用于所有其他对象的模型视图矩阵来绘制它,我尝试使用 gluOrtho2D 和 glOrthof 来绘制它,但它们都不起作用。我真的不明白近和远剪裁平面如何与正交绘图一起使用。每当我尝试使用 glOrtho2D 或 glOrthof 绘制它时,根本没有绘制四边形(尽管场景的其余部分仍然被渲染)。

这是我尝试使用正交矩阵进行绘制

private void drawOverlay(GL10 gl) {
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glPushMatrix();
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl, 0f, 1f, 1f, 0f);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    background.draw(gl, 1.0f, 1.0f, 1.0f, 1.0f);
    gl.glEnable(GL10.GL_DEPTH_TEST);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glPopMatrix();
    gl.glMatrixMode(GL10.GL_MODELVIEW);
}

我从 onDrawFrame 的开头调用该函数 - 在绘制其他任何内容之前:

public void onDrawFrame(GL10 gl) {
    drawOverlay(gl);
    gl.glLoadIdentity
    //...
}

以下是“背景”的创建方式:

background = new ShapePostcard(1f, 1f);

我相当确定我无法使用普通的模型视图矩阵让四边形覆盖屏幕,但基本上我所做的只是在禁用深度测试的所有其他内容之前在 onDrawFrame 中绘制“背景”。

感谢您的支持!

4

2 回答 2

0

绘制填充屏幕的四边形最简单的方法是将投影和模型都设置为单位矩阵,然后绘制坐标为 [-1,-1] 到 [1,1] 的网格。当你看到边界时,这就是你画的吗?我是说,

 (x, y, widht, height) = (-1,-1, 2, 2)
于 2012-12-19T21:10:19.503 回答
0

OpenGL ES 不支持四边形。

http://www.songho.ca/opengl/gl_vertexarray.html

于 2012-12-19T21:12:49.613 回答