OpenGL прямоугольник анимация
Я пытаюсь "оживить" высоту прямоугольника на основе ввода случайного числа. Таким образом, с каждым новым случайным числом прямоугольник перерисовывается.
Как мне это сделать?
Мой код:
#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;
}
Пока программа не падает, просто рисует один прямоугольник.
2 ответа
Учитывая, что ваши размеры находятся в диапазоне 0.0 <= dimension <= 1.0
и высота, которую вы рассчитываете, находится в диапазоне 0 <= height <= 9
вам нужно масштабировать случайное число следующим образом:
height = (float)rand() / RAND_MAX;
Также, пожалуйста, переместите srand(time(NULL));
от renderFunction()
в main()
в противном случае ваши размеры прямоугольника будут фиксироваться в течение каждой секунды.
rand()%10
возвращает целое число, которое обычно больше или равно 1. Таким образом, высота в основном равна 1, поскольку максимальная высота, которую он может отобразить на экране, равна 1.