Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

Сферические координаты в OpenGL   Найти похожие ветки 

 
istemy   (2004-05-18 17:27) [0]

Подскажите, пожалуйста, как можно использовать сферические координаты для поворота головы героя, примерно как в Quake. Не могу создать модель движения героя по сцене. И как достичь плавности движения. Если сможете пришлите исходники на мое мыло. Заранее благодарен.


 
NailMan ©   (2004-05-18 18:27) [1]

нууу это очень просто:

- условно считаем что координаты переносицы есть начало координат(локальные).
- камера у нас юзается с "конечной длиной прицела", т.е. имеется сама камера(EYE), ее точка прицеливания(TARGET) и длина(радиус сферы) между этими точками. Вобщем как в 3DSMax
(длина у нас может быть любой, так как она все равно будет в итоге единичной)
- в каждый момент времени ты имеешь 2 величины(радиус считаем постоянным):
угол по горизонтали(долгота) и угол по вертикали(широта).

Процесс задания координат точки прицеливания(ориентация взора игрока):
- Получаем координаты точки Target по уравнению сферических координат(какие я думаю объяснять не стоит) на известных в текущий момент времени Alpha(долгота), Phi(широта) и радиуса.
- Имея 2 точки EYE(0,0,0) и полученный TARGET(X,Y,Z) мы превращаем их в вектор направления, который будет вектором направления взгляда игрока(ессно нормализовав его).
Т.о. зная вектор направления и зная мировые координаты точки EYE(фактически это мировые координаты игрока на карте) ты можешь задать их камере.

Для плавности движения тебе надо приблизительно сделать так:

- Принять определенную угловую скорость(или ускорения) перемещения камеры вдоль обоих углов в секунду. Соответсвенно каждое изменение этих углов может происходить в определенный квант времени - скажем 50 раз в сек.
- Для определения величины изменения углов ты делаешь линейную интерполяцию каждого угла с нужным числом шагов(50), получаешь промежуточное(фактически конечное) значение угла. Его собсно прибавляешь/убавляешь к каждому углу в соотвествии с данными устройства ввода(+ или -). Фактически это будет твоя угловая скорость.
Для обеспечения заданной скорости вращения на любой тачке, тебе придется сделать простой синхронизатор. Т.е. замерять время пройденное с прошлого изменения углов(тика) и делить его на теоретическое время этого промежутка.
Получишь т.н. коэффициент поправки. Его надо помножать(оно будет <=1) на полученное после интерполяции значение изменения углов, т.о. на слабой тачанке будет тормоз-"пропуск тиков", а на хорошей тачке гладко.
Можно вычисление смещений производить не жестко заданных в тиках, а прямо в игровом цикле, точно также замеряя время(оно будет очень маленьким), но это пагубно может сказаться на общей производительности. Естественно ни о каких GetTickCount для получения счетчика не может быть и речи.

В общих слова так.

По части полного кода помочь не смогу, т.к. я D3D-фил. Могу только по части синхронизатора помочь с реализацией.

---
WBR, NailMan aka 2:5020/3337.13


 
Черный ферзь   (2004-05-20 00:30) [2]

эти,как их там? кватернионы используй!


 
NailMan ©   (2004-05-20 09:41) [3]

Черный ферзь
Ты хоть знаешь что это тако и для чего используются?

---
WBR, NailMan aka 2:5020/3337.13


 
istemy   (2004-05-20 12:03) [4]

А где можно достать текстуру для стен зданий и неба, земли и тд?


 
NailMan ©   (2004-05-20 12:47) [5]

Да игрушку какую-нить распотроши.

---
WBR, NailMan aka 2:5020/3337.13


 
Murkt ©   (2004-05-20 19:18) [6]

[4]
Из третьей кваки.


 
Черный ферзь   (2004-05-21 22:30) [7]

знаю! широта и долгота не катят в понастоящему трехмерной игре..



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.03 c
14-1094023938
Ломброзо
2004-09-01 11:32
2004.09.19
http://top.rbc.ru/index1.shtml


14-1093603759
SergP
2004-08-27 14:49
2004.09.19
Чем можно сделать chm?


3-1093083661
Alek
2004-08-21 14:21
2004.09.19
Инсерт


1-1093897901
Ермак
2004-08-31 00:31
2004.09.19
Индексация текста


1-1093574824
Sollo
2004-08-27 06:47
2004.09.19
motorola C330 SDK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский