ПрограммированиеФорумОбщее

Некорректное направление выстрела из танка

#0
19:26, 7 фев 2017

При повороте и передвижении танка направление выстрела становится некорректным.(смещается в сторону) Если поворачивать танк в точке 0;0, то направление остается правильным.
Как можно решить это проблему?

+ GIF (16 Мб)
+ Код

Функция SetDirection нормализует принимаемое значение.

#1
22:06, 7 фев 2017

Не пудри мозги, переделай свою математику поворотов, используй кватернионы и не парься )

#2
22:11, 7 фев 2017

У тебя уже как то считается поворот башни! как так можно не рассчитать этот вектор?

Лично от себя:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Геморрой тот еще желаю удачи, учитывая что ты споткнулся только в начале пути она тебе ооооооочень понадобиться.

#3
22:28, 7 фев 2017

Dronas
Кватернионами никогда не пользовался, но слышал про них. Завтра погляжу.
foxes
Ну, вот как-то так не смог. Поворачивать-то он поворачивается, но при повороте сильно уходит в сторону.

#4
1:02, 8 фев 2017

Сдаётся мне этот код писало два разных человека. И тот кто писал код поворота пушки это не ты. Потому что если бы это был ты то вопросов бы таких не задавал. Поскольку пушка у тебя и есть тот самый m_shootRay и она почему то ни куда не уходит.

Вообще ответ в вопросе!

#5
7:32, 8 фев 2017

Vlad2001_MFS, что даёт "*  glm::vec4(0.0f, 0.0f, 10.0f, 0.0f)"?

#6
12:35, 8 фев 2017

Если m_gunTransform содержит в себе абсолютную позицию и поворот орудия, то как-то так:

m_shootRay.SetOrigin(m_gunTransform * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f));
m_shootRay.SetDirection(m_gunTransform * glm::vec4(0.0f, 0.0f, 1.0f, 0.0f));
#7
14:21, 8 фев 2017

XProger
Не помог твой вариант, возможно что-то не так у меня с m_gunTransform. Задолбала эта хрень, несколько дней уже бьюсь, может где простой ошибки не вижу.

m_gunTransform = 
  glm::translate(m_pos) *
  glm::rotate(glm::radians(m_hullAngle + m_turretAngle), glm::vec3(0.0f, 1.0f, 0.0f)) *
  glm::rotate(glm::translate(m_gunPos), glm::radians(m_gunAngle), glm::vec3(1.0f, 0.0f, 0.0f)) *
  glm::translate(-m_gunPos);
ПрограммированиеФорумОбщее

Тема в архиве.