Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.02.2012, 20:08
It-s-me It-s-me вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 23
Репутация: 10
Печаль Контроль перемещения объекта

Суть проблемы - Пытаюсь реализовать перемещение объекта с помощью клавиатуры и мыши.(Как в играх от 3-го лица).
Клавиатура - движение вперед.
Мышь - изменение угла(поворот влево - вправо).
От измененного угла считаю координаты через sin и cos.
Чего-то хорошего из этого не получилось.
Каким путем можно решить эту проблему.
Ответить с цитированием
  #2  
Старый 06.02.2012, 20:41
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

А перевод з радиан в грады и наоборот пробовал? В Дельфи тригонометрические ф-ции считаются только для значений угла в радианах.
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
It-s-me (07.02.2012)
  #3  
Старый 06.02.2012, 21:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если исходить из предыдущего вопроса, то наверное ТС делает это в OpenGL. Там это выполняется командой glRotate.
Код:
  glRotatef(Angle, 1, 0, 0);
где Angle - 0°..360°, остальные 3 - X, Y, Z выставляем нужное в 1. Если требуется выставить для нескольких направлений повторяем команду:
Код:
  glRotatef(Angle, 1, 0, 0);
  glRotatef(Angle, 0, 1, 0);
  glRotatef(Angle, 0, 0, 1);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 06.02.2012, 21:53
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Для реализации камеры я использую эти функции именно в таковом порядке:

glrotatef(zangle,0,0,0.0000000001);
glrotatef(xangle,0.00000000001,0,0);
glrotatef(yangle,0,0.0000000001,0);

Как раз нормально
Ответить с цитированием
  #5  
Старый 06.02.2012, 21:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Весьма редко потребуется именно такая точность поворота. На практике, чаще бывает нужно повернуть гораздо "резче".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 06.02.2012, 21:59
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Но это не точность, это вектор оси Почему-то у меня именно при таком раскладе получилась камера как в играх. zangle я не использую, это как поворот головы вокруг луча зрения.
Ответить с цитированием
  #7  
Старый 06.02.2012, 22:06
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от YVitaliy
Но это не точность, это вектор оси
Угу, в курсе, MSDN писал. Для моих нужд хватало 1 при угле поворота 5°.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 06.02.2012, 22:12
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Сор, что не в своей теме, но вспомнил проблему: когда камера стоит по нормали к горизонтальной плоскости (XZ), тоесть угол xangle = 90, почему-то вид переносится в точку 0,0,0. Как не пробовал, исправить не могу. Даже при ~89гр то же самое. В чем может быть проблема?
Ответить с цитированием
  #9  
Старый 06.02.2012, 22:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Хм, я этой командой объект вращаю, а не камеру. Камера у меня не двигается.
Код:
  glPushMatrix;
...
  glRotatef(fRotX, 1, 0, 0);
  glRotatef(fRotY, 0, 1, 0);
...
  glPopMatrix;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 06.02.2012, 22:29
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, у меня просто действительно как камера - есть точка, растояние "глаз" от этой точки, углы поворота. С обьектами я уже давно завязал , но технически, это вращение всей сцены. Че-то типа мапэдитора. Но никак доделать не могу.
Ответить с цитированием
  #11  
Старый 06.02.2012, 22:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от YVitaliy
... но технически, это вращение всей сцены. ...
Ну не совсем всей, куча объектов и каждый двигается и поворачивается по-своему - независимо друг от друга. В твоём варианте больше похоже на игру от 1-го лица, но даже и в таком случае не всё завязано на камеру. Противник двигается и поворачивается независимо от 1-го лица (камеры).
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 06.02.2012, 22:45
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, там я уже вращаю точки самого обьекта, так мне проще. Коллизии просто просчитываю по фэйсам самого обьекта, и удобнее, когда обьект находится именно там, где должен быть А еще шейдеры, и прочее...
Ответить с цитированием
  #13  
Старый 07.02.2012, 02:35
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от It-s-me
Суть проблемы - Пытаюсь реализовать перемещение объекта с помощью клавиатуры и мыши.(Как в играх от 3-го лица).
Клавиатура - движение вперед.
Мышь - изменение угла(поворот влево - вправо).
От измененного угла считаю координаты через sin и cos.
Чего-то хорошего из этого не получилось.
Каким путем можно решить эту проблему.
Код в студию!
Ответить с цитированием
  #14  
Старый 07.02.2012, 08:49
It-s-me It-s-me вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
А перевод з радиан в грады и наоборот пробовал? В Дельфи тригонометрические ф-ции считаются только для значений угла в радианах.

Спасибо. Именно это я и не учел проблема была в градусах....
Теперь все работает.
Да делал в openGL.
Камеру реализовывал с помощью LookAt.
Ответить с цитированием
  #15  
Старый 07.02.2012, 09:01
It-s-me It-s-me вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 23
Репутация: 10
По умолчанию

Если нужно. Выложу.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025