Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2009, 16:47   #1
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию Система координат в OpenGl.

Сейчас я изучаю OpenGl по книге Михаила Краснова "OpenGL Графика в проектах Delphi". В книге понятно дается описание процедур, констант и.т.д, но не объясняется работа с координатами.Например
Цитата:
Для рисования правильного шестиугольника из отдельных треугольников
код должен выглядеть так (готовую программу можете найти в подкаталоге
Ех19):

glBegin (GL_TRIANGLES);
For i := 0 to 5 do begin
glVertex2f (0, 0);
glVertex2f (0.5 * cos (2 * Pi * i / 6),
0.5 * sin (2 * Pi * i / 6));
glVertex2f (0.5 * cos (2 * Pi * (i + 1) / 6),
0.5 * sin (2 * Pi * (i + 1) / 6));
end;
glEnd;
Мне понятно все, кроме самих координат.
Почему glVertex2f (0.5 * cos (2 * Pi * i / 6), 0.5 * sin (2 * Pi * i / 6));
Зачем нужен Pi,Cos, откуда мы взяли числа 0.5,6,2
Раньше я работал координатами соответствующими пикселям на экране(Pascal,Canvas в Delphi), а здесь я вообще ничего не понимаю .
Выкладываю полный пример.
Вложения
Тип файла: rar Ex19.rar (158.3 Кб, 31 просмотров)
Вадим Буренков вне форума Ответить с цитированием
Старый 17.05.2009, 18:49   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

А вы поэкспериментируйте с координатами и сразу разберетесь.
Код:
glLoadIdentity();
    glRotated(angle,0,0,1);
    glcolor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);// Начинаем рисовать текстурированый квадрат
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glVertex3f( 1.0f,-1.0f, 0.0f);
        glVertex3f( 1.0f, 1.0f, 0.0f);
        glVertex3f(-1.0f, 1.0f, 0.0f);
    glEnd();
    glutSwapBuffers();
    angle+=1;
Можно почитать уроки от NeHe http://nehe.gamedev.net/ (статьи по программированию на c++, но имеется перевод на кучу других в том числе на Delphi)
http://pmg.org.ru/nehe/ - это перевод статей от NeHe на русском языке
Kostia вне форума Ответить с цитированием
Старый 17.05.2009, 19:29   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

набросал в паинте


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

А сама система координат зависит от того, как была настроена матрица проекции.
Kostia вне форума Ответить с цитированием
Старый 17.05.2009, 21:16   #4
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

А как в таком случае сделать движение обьекта по экрану?
Например в Canvas'е пороисходит изменение координат обьекта на несколько пикселей (Xpos:=Xpos+Xspeed), а как тут?
Вадим Буренков вне форума Ответить с цитированием
Старый 18.05.2009, 12:20   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

glTranslated(x,y,z);
Эта функция переносит систему координат в нужную точку пространства. При этом смещение происходит не от начальной системы координат, а от текущей.
Чтобы сбросить все смещения и повороты нужно использовать ф-ию
glLoadIdentity();
А для поворота объекта на угол нужно использовать ф-ию
glRotated(angle,x,y,z);
angle - угол поворота в градусах
x,y,z = вокруг какой оси крутить(0,0,1) вращение вокруг оси z

Таким образом можно описать вывод объкта на экран:
Код:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//рисуем первый квадрат
glLoadIdentity();
glRotated(angle,0,0,1);
glTranslated(x,y,z);
glColor3f(0,1,0);
glBegin(GL_QUADS);
        glVertex3f(-1.0,-1.0, 0.0);
        glVertex3f( 1.0,-1.0, 0.0);
        glVertex3f( 1.0, 1.0, 0.0);
        glVertex3f(-1.0, 1.0, 0.0);
glEnd();
рисуем второй квадрат
glLoadIdentity();//сбрасываем предыдущую систему координат
glRotated(angle,0,0,1); 
glTranslated(x,y,z); //и задаем новую
glColor3f(1,0,0);
glBegin(GL_QUADS);
        glVertex3f(-1.0,-1.0, 0.0);
        glVertex3f( 1.0,-1.0, 0.0);
        glVertex3f( 1.0, 1.0, 0.0);
        glVertex3f(-1.0, 1.0, 0.0);
glEnd();
SwapBuffers(hDC);
т.е. сам объект не меняется, меняется только место где его нужно нарисовать

Потом, когда прочтешь про списки, будет совсем легко.

Последний раз редактировалось Kostia; 18.05.2009 в 12:28. Причина: Дополнил
Kostia вне форума Ответить с цитированием
Старый 29.05.2009, 14:48   #6
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Я немного не понимаю, почему бы не использовать Delphi + DirectX?
Так как книга М.Краснова "OpenGL Графика в проектах Delphi" 2000 года, а книга Михаила Краснова: DirectX. Графика в проектах Delphi 2005 года. А сейчас 2009 год. За это время технологии изменились.

Вот ссылка: www.delphilab.ru/content/view/98/46/

Последний раз редактировалось Pyton; 29.05.2009 в 18:35. Причина: Ошибка в высказывании
Pyton вне форума Ответить с цитированием
Старый 29.05.2009, 15:11   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
На OpenGl, конечно, можно написать игру, но это не будет первоклассной игрой
Не согласен, ведь все зависит от человека, делающего игру. Для компаний делающих серьезные 3D игры может разница и есть, а для человека учащегося делать игры это не самое важное.
Вадим Буренков вне форума Ответить с цитированием
Старый 29.05.2009, 15:34   #8
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Pyton Посмотреть сообщение
На OpenGl, конечно, можно написать игру, но это не будет первоклассной игрой, т.к. данная технология поддерживается все меньше и меньше...
Опенжеле кроссплатформенная по крайней мере. И если она поддерживается всё менее и менее, то графику и игры в никсах на чём тогда делают?
Carbon вне форума Ответить с цитированием
Старый 29.05.2009, 17:54   #9
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Цитата:
все зависит от человека, делающего игру.
Смотря какую игру ты делаешь. Если делать среднюю игру, то OpenGl лучше, т.к. он гораздо проще в обучении и его код занимает меньше места. Можно делать игру с хорошей графикой и классными спецэффектами на OpenGl, но для этого необходимо подключение специальных библиотек, в которых еще надо разобраться. Например, "Doom3" был написан на OpenGl.
Вот больше информации о "священной войне" OpenGl и DirectX:

www.compdoc.ru/prog/cpp/opengl_vs_direct3d/

Цитата:
Цитата:
Сообщение от Pyton
На OpenGl, конечно, можно написать игру, но это не будет первоклассной игрой, т.к. данная технология поддерживается все меньше и меньше...

Опенжеле кроссплатформенная по крайней мере. И если она поддерживается всё менее и менее, то графику и игры в никсах на чём тогда делают?
Я имел ввиду, что DirectX более используема для коммерческих игр на данный момент. Вообще-то я называю немного устаревшим именно учение по книге OpenGl 2000 года. Сейчас OpenGl 3 конкурирует с 10-ым Директом, тут не имею не ничего против. Сам недавно искал связку OpenGl + Delphi, но ничего хорошего не нашел. А книги по ОпенЖл были максимум 2006 года.

Последний раз редактировалось Pyton; 29.05.2009 в 18:08.
Pyton вне форума Ответить с цитированием
Старый 29.05.2009, 18:13   #10
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
На OpenGl, конечно, можно написать игру, но это не будет первоклассной игрой, т.к. данная технология поддерживается все меньше и меньше...
Эмм.
http://www.thg.ru/software/20050103/...screenshot.jpg
http://www.geeks3d.com/public/jegx/2...-engine-01.jpg
http://www.3dnews.ru/documents/2862/ozero.jpg
http://www.3dnews.ru/documents/2862/okean.jpg
???
http://ru.wikipedia.org/wiki/OpenGL#OpenGL_3.1
Цитата:
А книги по ОпенЖл были максимум 2006 года.
А толку? Хоть 2000 года, главное научиться основам, а дальше читать спецификации каждой версии и экспериментировать.

Последний раз редактировалось Kostia; 29.05.2009 в 18:27.
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование координат системы СК-42 Македонский Общие вопросы Delphi 5 09.03.2009 14:15
Преобразование координат HunterMan Общие вопросы .NET 1 22.12.2008 15:03
квадрат и система координат=) kolduev Помощь студентам 8 11.03.2008 19:11
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42