Форум: "Игры";
Текущий архив: 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