我编写了使用OpenGL的GL_POLYGON
原始模式绘制多边形的代码。我提供输入点作为数组。这是我的代码:
#include <GL/freeglut.h>
#include <GL/gl.h>
#include <iostream>
using namespace std;
int Np;
double X[1000];
double Y[1000];
void init1()
{
glOrtho(-250.0, 250.0, -250.0, 250.0, -250.0, 250.0);
}
void func4()
{
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
for (int i = 0; i < Np; i++) {
glVertex2f(X[i], Y[i]);
}
glEnd();
glFlush();
}
int main(int argc, char ** argv)
{
cin >> Np;
for (int i = 0; i < Np; i++) {
cin >> X[i] >> Y[i];
}
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(50, 50);
glutCreateWindow("Polygon");
glutDisplayFunc(func4);
glutMainLoop();
return 0;
}
上面的代码几乎没有为每个输入提供所需的输出。代码有什么问题?
例如,我使用以下输入进行测试:
4
-100 -100
-100 0
100 100
100 -100
我希望在黑色背景上绘制一个围绕窗口中心有4个顶点的白色多边形。
答案 0 :(得分:2)
发布的代码从不调用init1()
函数,这是设置投影的位置。在调用init1()
之前添加对glutMainLoop()
的调用后,它可以正常工作。
对于x和y,OpenGL中的默认坐标系的范围为-1到1。因此,在没有任何调用应用变换的情况下,在样本输入中输入坐标的多边形将覆盖整个窗口,从而形成完全白色的窗口。
请注意,glOrtho()
通常在投影矩阵模式下调用。它在这个小例子中没有什么区别,但是一旦你使用更高级的功能,比如照明,它就很重要。 init1()
函数应如下所示:
glMatrixMode(GL_PROJECTION);
glOrtho(-250.0, 250.0, -250.0, 250.0, -250.0, 250.0);
glMatrixMode(GL_MODELVIEW);
此外,我希望您了解您在此处使用的OpenGL功能已弃用,并且在最新版本的OpenGL中不再可用。如果您刚刚开始学习,您可能需要考虑使用更现代的版本,这意味着桌面系统上的OpenGL 3.2的核心配置文件,或移动设备上的OpenGL ES 2.0或更高版本。