2015-01-20 2 views
1

Я пытаюсь «анимировать» высоту прямоугольника на основе ввода случайного числа. Таким образом, с каждым новым случайным числом прямоугольник перерисовывается.OpenGL rectangle animation

Как это сделать?

Мой код:

#include <time.h> 
#include <GL/freeglut.h> 
#include <GL/gl.h> 

float height; 
int i; 

/* display function - code from: 
    http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html 
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */ 
void renderFunction() 
{ 
    srand(time(NULL)); 
    height = rand() % 10; 

    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0.0, 0.0, 1.0); 
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 
    glBegin(GL_POLYGON); 
     glVertex2f(-0.5, -0.5);  // bottom left corner 
     glVertex2f(-0.5, height);  // top left corner 
     glVertex2f(-0.3, height);  // top right corner 
     glVertex2f(-0.3, -0.5);  // bottom right corner 
    glEnd(); 
    glFlush(); 
} 

/* Main method - main entry point of application 
the freeglut library does the window creation work for us, 
regardless of the platform. */ 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE); 
    glutInitWindowSize(900,600); 
    glutInitWindowPosition(100,100); 
    glutCreateWindow("OpenGL - First window demo"); 

    glutDisplayFunc(renderFunction); 
    glutIdleFunc(renderFunction); 
    glutReshapeFunc(renderFunction); 

    glutMainLoop(); 

    return 0; 
} 

Пока программа не врезаться просто рисует один прямоугольник.

ответ

0

Учитывая, что ваши размеры находятся в диапазоне 0.0 <= dimension <= 1.0 и высота рассчитать находится в диапазоне 0 <= height <= 9, вам необходимо масштабировать случайное число, как это:

height = (float)rand()/RAND_MAX; 

Также перенесите srand(time(NULL)); из renderFunction() в main() иначе ваших размерах прямоугольника будет зажат во время каждого такового конд.

0

rand()%10 возвращает целое число, которое, как правило, больше или равна 1. Таким образом, высота в основном 1, так как максимальная высота может оказать на экране 1.