使用 GL_POLYGON 在 OpenGL 中绘制多边形时获得意外输出
Getting unexpected output while drawing polygon in OpenGL using GL_POLYGON
我已经编写了使用 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++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 使用 GL_POLYGON 在 OpenGL 中绘制多边形时获得意外输出