Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 18.10.2008
Сообщений: 11

glut & OpenGL & анимация, пару вопросов

18.10.2008, 23:21. Показов 4035. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
использую библиотеку glut при работе с opengl, создал классы:
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
enum color { white=1, black=2, green=3, red=4, yellow=5, blue=6, violet=7, gray=8, turquoise=9};
 
class draw
{
      public:
             static draw *head;
             static draw *current;
             static draw *end;
             static GLfloat value;
             static color defRGB;
             color RGB;
             bool pouring;
             void switchcolor(color RGB);
             virtual void todraw();
             friend void editcoords(int param, bool plus);
             friend void editcolor(color RGB);
             friend void editdefcolor(color RGB);
             friend void editpouring();
             char type;
             draw();
             ~draw();
     protected:
             draw *next;
             draw *prev;
};
 
class cdCircle2D : public draw 
{
      public:
             static cdCircle2D *Ccurrent;
             // окружность
             GLfloat x;
             GLfloat y;
             GLfloat radius;
             cdCircle2D();
             ~cdCircle2D();
             void todraw();
             void add();
};
class cdEllipse2D : public draw
{
      public:
             static cdEllipse2D *Ecurrent; 
             // эллипс
             GLfloat x;
             GLfloat y;
             GLfloat radius;
             GLfloat a;
             GLfloat b;
             cdEllipse2D();
             ~cdEllipse2D();
             void todraw();
             void add();
};
class cdTriangle2D : public draw
{
      public:
             static cdTriangle2D *Tcurrent;
             // треугольник
             GLfloat x1;
             GLfloat y1;
             GLfloat x2;
             GLfloat y2;
             GLfloat x3;
             GLfloat y3;
             cdTriangle2D();
             ~cdTriangle2D();
             void todraw();
             void add();
};
тобиш каждый обьект будь то окружность или треугольник рисуются отдельно - для каждого своя функция. из этих 3-х обьектов я делаю список, который затем вывожу.
мэин:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <math.h>
#include "glut.h"
#include "classes.h"
 
#pragma comment (lib, "OpenGL32.Lib")
#pragma comment (lib, "Glu32.lib")
#pragma comment (lib, "Glaux.lib")
 
draw scene;
cdCircle2D circle;
cdEllipse2D ellipse;
 
void Init () 
{
     glClearColor (0.0f, 0.0f, 0.0f, 1.0f);
     glEnable(GL_DEPTH_TEST);
}
 
void ReshapeManager(int w, int h) 
{
     glViewport(0,0,(GLsizei)w,(GLsizei)h);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
}
 
void KeyManager(unsigned char key,int x,int y) 
{
     static char k67=0;
     switch(key)
     {
            case 27: // Escape
                                    
                    editcoords(1,true); // пытаюсь поменять координату х последней добавленной в список фигуры(эллипса), не выходит визуально (
        break;          
            case 67: // 'c','C'
            done=true;  
                    break;
            default:
                    break;
     }
}
void DrawManager() 
{
// Очищаем буфер цвета
    static int i=0,j=0;
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    if(j==0)
    {
        j++;
      glTranslatef(0.0f,0.0f,-30.0f); // вот эта строчка заставляет всё изображение улетать от меня в глубь экрана до бесконечности
    }
 
    glColor3f(255,255,255);
    glBegin(GL_LINES);
    glVertex2f(0.0f,-30.0f); 
    glVertex2f(0.0f,30.0f); 
    glVertex2f(-30.0f,0.0f); 
    glVertex2f(30.0f,0.0f); 
    glEnd();
    if(i==0)  
    {
        circle.add(); // добавил в список окружность
        editcolor(red); // поставил её красный цвет
        editpouring(); // врубил заливку
        ellipse.add(); // добавил эллипс
        editcolor(blue); // синий
        editpouring(); // заливка
    }
    scene.todraw(); // рисую весь список
 
    glFinish();
    //glutPostRedisplay();
    glutSwapBuffers();
 
 
}
 
void AnimateManager()
{
    cdCircle2D::Ccurrent->radius+=0.1f; // не изменяется =( вернее может и изменяется но не влияет на картинку, пытаюсь радиус окружности увеличить
    glutPostRedisplay();
}
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
GLint windW = 800, windH = 600;
 
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(windW,windH);
glutCreateWindow("pr_drawer");
Init();
glutKeyboardFunc(KeyManager);
glutReshapeFunc(ReshapeManager);
glutDisplayFunc(DrawManager);
glutIdleFunc(AnimateManager);
glutMainLoop();
return 0;
}
застрял на том, что при нажатии клавиши добавляется к координате х последней добавленной фигуры, тобиш эллипса. они никуда не двигается :-( если использую glutPostRedisplay(); - вся картинка улетала в бесконечность из-за glTranslatef(0.0f,0.0f,-30.0f);, потом ограничил до 1 раза и снова ничего не двигается.
мне нужно осуществить передвижение эллипса с помощью клавиатуры.

п.с. ошибку нашёл. удалите тему
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2008, 23:21
Ответы с готовыми решениями:

OpenGL && 3ds max && C++
есть ли подобные уроки http://esate.ru/page/zagruzka-trehmernyh-modeley-v-opengl-1 на с++ перерыл весь гугл ничего толком не нашел( C#...

OpenGL && Visual Studio 2010
Всем доброго время суток!:) Недавно установил MSVS10,и всё как бы ничего но с ОпенГЛ`ём отказываетсо роботать,не могу понять в чём...

OpenGL & Delphi7 & Windows7
Здравствуйте. Возник вопрос следующего характера. Начал использовать Windows 7 и заметил такую вещь, что мне не доступно ни одно расширение...

1
Sinitsin Ivan
22.11.2008, 23:29
Смотри в сторону использования
glPushMatrix() и
glPopMatrix()

для запоминания и восстановления матриц, а так естественно ты каждый раз изменяешь матирцу с помощью glTranslate, поэтому объект улетает.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2008, 23:29
Помогаю со студенческими работами здесь

OpenGL && VS 2012
Здравствуйте! Подскажите, пожалуйста, как подключить и инициализировать библиотеки OpenGL в Visual Studio 2012 на С++.

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

OpenGL && C++
Решил изучить OpenGL, и соответственно мне нужен какой нибудь хороший учебник. ФАК я прочитал и как то там сильно много учебников, и...

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' &amp; ''' &amp;...

error '80020009' &Icirc;&oslash;&egrave;&aacute;&ecirc;&agrave;. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error '80020009' ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru