GLUT: пустое окно

Я успешно скомпилировал этот код, используя последнюю версию freeglut, но постоянно получаю пустое окно, заполненное цветом, указанным в glClearColor функция. Эта простая программа из учебника по интерактивной компьютерной графике, предоставленного моим колледжем. Я скопировал это слово в слово, и это все еще не работает. Это должно сделать 2 квадрата вращающимся.

Я использую GCC на Windows 7 машина:

$ 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();
}

0

Решение

Ты никогда не звонишь reshape(), Таким образом, используется матрица проекции по умолчанию, которая ставит (0,0) в центре экрана и имеет «радиус» вида 1. В результате ваши квадраты отображаются далеко от экрана.

призвание reshape() с соответствующими параметрами, прежде чем пытаться что-то сделать, должно работать. То, что вы действительно хотите сделать, это установить его как glutReshapeFunc() так что матрица проекции автоматически подстраивается под изменение размера. Это легко сделать:

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

Окно просмотра теперь должно автоматически адаптироваться к изменению размера окна.

4

Другие решения

Классической ловушкой является выбраковка задней поверхности. Не уверен, относится ли это к вашему делу, но попробуйте позвонить

glDisable( GL_CULL_FACE );

перед рисованием и посмотреть, если имеет значение.

0

По вопросам рекламы [email protected]