gpt4 book ai didi

c++ - 使用 GL_POLYGON 在 OpenGL 中绘制多边形时出现意外输出

转载 作者:行者123 更新时间:2023-11-28 02:40:02 25 4
gpt4 key购买 nike

我编写了使用 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 个顶点的白色多边形。

最佳答案

发布的代码从不调用 init1() 函数,这是设置投影的地方。在调用 glutMainLoop() 之前添加对 init1() 的调用后,它工作正常。

OpenGL 中默认的坐标系 x 和 y 的范围是 -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 或更高版本。

关于c++ - 使用 GL_POLYGON 在 OpenGL 中绘制多边形时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com