Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 837
1

анимация в openGL на С++

23.12.2011, 17:12. Показов 1949. Ответов 5
Метки нет (Все метки)

У кого работает на пишите пожалуйста?
C++
1
#include <GL/freeglut.h>
Предоприделим глобальными переменными место появления и размер блока:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
GLfloat x1 = 0.0f;   /// GLfloat - аналог float
GLfloat y1 = 0.0f;
GLfloat rsize = 25;
 
Скорость перемещения по OX и OY:
 
GLfloat xstep = 1.0f;
GLfloat ystep = 1.0f;
 
Как и в предидущем примере создадим две переменный для хранения размеров окна:
 
GLfloat windowWidth;
GLfloat windowHeight;
 
Прежде всего создадим функцию рендеринга:
 
void RenderScene(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f,0.0f,0.0f);  //красный
    glRectf(x1,y1,x1+rsize,y1-rsize);   /// рисуем квадрат
    glutSwapBuffers();
}
 
Приведу 2 функции без коментариев. Они к делу относятся слабо, да и сложного в них ничего нет:
 
void SetupRC(void){
    glClearColor(0.0f,0.0f,1.0f,1.0f);
}
 
void ChangeSize(GLsizei w, GLsizei h) {
    GLfloat aspectRatio;
    if (h == 0)
        h = 1;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    aspectRatio = (GLfloat)w / (GLfloat)h;
    if (w <= h){
        windowWidth = 100;
        windowHeight = 100 / aspectRatio;
        glOrtho(-100.0,100.0,-windowHeight,windowHeight,1.0,-1.0);
    } else {
        windowWidth = 100 * aspectRatio;
        windowHeight = 100;
        glOrtho(-windowWidth,windowWidth,-100.0,100.0,1.0,-1.0);
    }
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
Следующей на очереди будет функция, вызываемая таймером:
 
void TimerFunction(int value){
    if (x1 > windowWidth - rsize || x1 < -windowWidth)   /// проверка на достижение края экрана по OX
        xstep = -xstep;
 
    if (y1 > windowHeight || y1 < -windowHeight + rsize)  /// ... по OY
        ystep = -ystep;
 
    x1 += xstep;   // сдвигаем координаты на заданный шаг
    y1 += ystep;
 
    if (x1 > (windowWidth-rsize+xstep))   /// проверяем не приведёт ли это к выходу за границу экрана
        x1 = windowWidth-rsize-1;
    else if (x1 < -(windowWidth + xstep))  // с другой стороны
        x1 = -windowWidth - 1;
 
    if (y1 > (windowHeight+ystep))    ///по другим осям
        y1 = windowHeight-1;
    else if(y1 < -(windowHeight-rsize+ystep))
        y1 = -windowHeight+rsize-1;
 
    glutPostRedisplay();  // перерисовываем экран
    glutTimerFunc(33,TimerFunction,1);  //запускаем таймер заново.
}
 
Ну и функция main, которая всё это дело запустит:
 
int main(int argc,char**argv) {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutCreateWindow("Bounce");
    glutDisplayFunc(RenderScene);
    glutReshapeFunc(ChangeSize);
    glutTimerFunc(33,TimerFunction,1);  //первый запуск таймера
    SetupRC();
    glutMainLoop();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2011, 17:12
Ответы с готовыми решениями:

Анимация в OpenGL, а где собсно, анимация?
// Bounce.cpp // Demonstrates a simple animated rectangle program with GLUT // OpenGL SuperBible,...

OpenGl анимация
Всем привет. Нужно написать анимацию для вывода спрайта. Анимация заключается в замене...

Анимация куба OpenGL (C++)
У меня нарисована по граням игральная кость. Используется glEnable(GL_DEPTH_TEST) для глубины и...

Спрайтовая анимация в OpenGL
Здравствуйте. Собственно, вопрос таков: как реализовать спрайтовую (покадровую) анимацию персонажа...

__________________
5
Nequti
23.12.2011, 18:08
  #2

Не по теме:

Эм,а кому это надо?

0
32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 837
23.12.2011, 18:10  [ТС] 3
мне, хочу узнать работает у других этот код
0
Nequti
24.12.2011, 05:28
  #4

Не по теме:

Естесно ...

0
n1xan
29.12.2011, 02:22 5
у меня работает.
Linux-оид
118 / 67 / 9
Регистрация: 15.02.2011
Сообщений: 374
30.12.2011, 19:07 6
ругаеться на glutSwapBuffers();
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2011, 19:07

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

opengl - анимация сферы
Пожалуйста, помогите. хотя бы советом)). задача состоит в том, чтобы прога рисовала трехмерный...

Анимация сортировки массива на OpenGL
Задали курсовую анимация сортировки массива на OpenGL, элементы массива представляются...

Анимация идущего человечка в OpenGL (GLUT), С++
Нужно в visual studio сделать 2d человечка (стикмена), который ходит, прыгает и приседает.

glut & OpenGL & анимация, пару вопросов
использую библиотеку glut при работе с opengl, создал классы: enum color { white=1, black=2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.