gpt4 book ai didi

c++ - 三角形占据了整个窗口?

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

我正在尝试使用 GL_POLYGON 绘制一个三角形,但由于某种原因它占据了整个窗口..

...
typedef struct myTriangle {
float tx;
float ty;
} myTriangle;

std::vector<myTriangle> container;

void display() {
glClear(GL_COLOR_BUFFER_BIT);

for(int i = 0; i < (int)container.size(); ++i) {
glBegin(GL_POLYGON);
glColor3f(0.35, 0.0, 1.0);
glVertex2f(container.at(i).tx, container.at(i).ty + 20);
glVertex2f(container.at(i).tx - 20, container.at(i).ty - 20);
glVertex2f(container.at(i).tx + 20, container.at(i).ty - 20);
glEnd();
}

glutSwapBuffers();
}

...

int main(int argc, char** argv) {
myTriangle t1;
container.push_back(t1);
container.back().tx = (float)0.;
container.back().ty = (float)0.;

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE);

// initializations
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow( "Transformer" );
glClearColor(1.0, 1.0, 1.0, 1.0);

// global variable initialization
GW = GH = 200;

// callback functions
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(mouseMove);
glutKeyboardFunc(keyboard);

glutMainLoop();
}

它应该在 400x400 的窗口中以原点 (0,0) 绘制一个 40x40 的等边三角形。我做错了什么吗?

最佳答案

您似乎混淆了 3D(世界)坐标和 2D(屏幕)坐标。您传递给 glVertex2f 的坐标是 3D 坐标,需要在它们显示在您的窗口中之前进行适当的转换。窗口的大小无关紧要:您始终可以设置投影矩阵以在任何窗口中显示尽可能多的 3D 空间。

在初始化 OpenGL 后您没有设置任何转换,因此您使用的是默认矩阵,它位于 3D 空间中的原点 (0,0,0) 并且三角形就在您上方绘制。

这是一个 quick tutorial它向您展示了如何设置变换矩阵,以便您看起来像是从远处观看三角形。

关于c++ - 三角形占据了整个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877446/

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