gpt4 book ai didi

c++ - 过剩 : blank window

转载 作者:行者123 更新时间:2023-11-27 23:19:41 27 4
gpt4 key购买 nike

我使用最新的 freeglut 成功编译了这段代码,但我不断得到一个空白窗口,其中填充了 glClearColor 函数中指定的颜色。这个简单的程序来 self 学院提供的交互式计算机图形学教科书。我逐字逐句地复制了它,但它仍然不起作用。它应该呈现 2 个正方形旋转。

我在 Windows 7 机器上使用 gcc:

$ gcc -Iinlude -Llib -o sample.exe sample.cpp -lfreeglut -lopengl32

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>

void rashape(int width, int height);
void display();
void renderScene();
void animate(int value);
void drawSquare();
int angle = 0;

int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(600, 300);
glutInitWindowPosition(0, 0);
glutCreateWindow("Primjer animacije");
glutDisplayFunc(display);
glutTimerFunc(20, animate, 0);
glutMainLoop();
}

void animate(int value) {
angle++;
if(angle >= 360) kut = 0;
glutPostRedisplay();
glutTimerFunc(20, animate, 0);
}

void display() {
glClearColor(1.0f, 0.2f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
renderScene();
glutSwapBuffers();
}

void reshape(int width, int height) {
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width-1, 0, height-1, 0, 1);
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_MODELVIEW);
}

void drawSquare() {
glBegin(GL_QUADS);
glVertex2f( 0.0f, 0.0f);
glVertex2f(100.0f, 0.0f);
glVertex2f(100.0f, 100.0f);
glVertex2f( 0.0f, 100.0f);
glEnd();
}

void renderScene() {
glPointSize(6);
glColor3f(0.3f, 1.0f, 0.3f);

glPushMatrix();
glTranslatef( 150.0f, 160.0f, 0.0f);
glScalef(1.5f, 1.5f, 1.0f);
glRotatef((float)kut, 0.0f, 0.0f, 1.0f);
glTranslatef(-50.0f, -50.0f, 0.0f);
drawSquare();
glPopMatrix();

glPushMatrix();
glTranslatef( 400.0f, 160.0f, 0.0f);
glScalef(1.5f, 1.5f, 1.0f);
glRotatef(-(float)kut, 0.0f, 0.0f, 1.0f);
glTranslatef(-50.0f, -50.0f, 0.0f);
drawSquare();
glPopMatrix();
}

最佳答案

您永远不会调用 reshape()。因此,使用默认投影矩阵,将 (0,0) 置于屏幕中心, View “半径”为 1。因此,您的正方形被渲染得很远屏幕。

在尝试渲染任何东西之前使用适当的参数调用 reshape() 应该可以。不过,您真正想要做的是将其设置为 glutReshapeFunc(),以便投影矩阵自动调整以调整大小。这很容易做到:

int main(int argc, char ** argv)
{
// ... stuff ...
glutReshapeFunc(reshape);
// ... more stuff ...
}

视口(viewport)现在应该自动调整以适应窗口大小调整。

关于c++ - 过剩 : blank window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131682/

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