我开始使用OpenGL开发一个简单的GUI应用程序。绘制一个简单的背景四边形会带来很多困难,而我却无法发现我做错了什么或者什么“打破了”。以下是代码的一部分,负责绘制我的背景' quad':
static void Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.5f, 0.5f, 0.5f);
glBegin(GL_QUADS);
glVertex2f(-1.0f, -1.0f);
glVertex2f(1.0f, -1.0f);
glVertex2f(-1.0f, 1.0f);
glVertex2f(1.0f, 1.0f);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 600);
glutCreateWindow("Pro Sound");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glutDisplayFunc(Draw);
glutKeyboardFunc(keyPressed);
glutKeyboardUpFunc(keyUp);
glutMainLoop();
}
输出看起来像灰色四边形,但在它的顶部(右侧)有一个黑色三角形,中心,右上角和右下角有顶点。所以我的背景看起来像被三角形牙齿像素怪物咬伤。问题是,它最近工作正常,我甚至可以添加一些纹理,定位好等等。
答案 0 :(得分:4)
看起来您正在以错误的顺序绘制四边形顶点。默认情况下,应沿着多边形的周边以逆时针方式对顶点进行排序。
所以你拥有的是:
(-1.0f, -1.0f) Bottom-Left
( 1.0f, -1.0f) Bottom-Right
(-1.0f, 1.0f) Top-Left
( 1.0f, 1.0f) Top-Right
正在创建:
何时需要:
(-1.0f, -1.0f) Bottom-Left
( 1.0f, -1.0f) Bottom-Right
( 1.0f, 1.0f) Top-Right
(-1.0f, 1.0f) Top-Left
创建:
答案 1 :(得分:3)
不要使用GL_QUADS
并更改坐标,请保留坐标并使用GL_TRIANGLE_STRIP
。
我相当肯定GL_QUADS
已被弃用,使用GL_TRIANGLE_STRIP
或GL_TRIANGLE_FAN
似乎是一种好习惯,无论您是否正在绘制四边形。
您应该使用GL_QUADS
的唯一时间是您处于即时模式并绘制一个性能无关紧要的小程序。 (这可能是其中之一;但为了加强和衡量标准,我总是使用GL_TRIANGLE_STRIP
或GL_TRIANGLE_FAN
。)