Войти
ПрограммированиеФорумГрафика

Как рассчитать направление и полет стрелы?

#0
16:56, 8 мая 2022

Добрый день!

Как правильно рассчитать transform для стрелы?


Что есть:
Vector3 positionArrow; // мировая позиция стрелы в полете
Vector3 localRotationArrow; // локальная ротация стрелы.

Vector3 positionEnemy; // мировая позиция врага
Vector3 positionMe; // мировая позиция откуда стреляю


Переместить стрелу из positionMe до positionEnemy получается,
но стрела смотрит в одну сторону во время полета.

Как правильно рассчитать localRotationArrow чтобы стрела смотрела на цель головой вперед?

#1
17:09, 8 мая 2022

направление куда лететь:
(positionEnemy - positionMe).normalize()

расстояние:
(positionEnemy - positionMe).distance()

positionArrow  = positionMe
сам полёт:
positionArrow  = positionMe * (positionEnemy - positionArrow).normalize() * speed

каждый фрейм, проверяем : (positionEnemy - positionMe).distance() < distance_colision

если true, то стрела до летела.

Что касается направления самой стрелы, то неважно, стрела может и плашмя лететь(бой в космосе)...

#2
19:16, 8 мая 2022

look at Obj (From.pos, To.pos, UP), look at camera (From.pos, Camera.pos, -UP)
vec3 d = From.pos; vec3 c = norm(From.pos − To.pos);
vec3 a = norm(cross(up, c)); vec3 b = cross(c, a);
mat4x4 cam(
a.x, a.y, a.z, 0;
b.x, b.y, b.z, 0;
c.x, c.y, c.z, 0;
d.x, d.y, d.z, 1);

#3
(Правка: 20:10) 20:10, 8 мая 2022

manking
Направление на цель: D=(positionEnemy-positionMe).normalized()
Надо повернуть продольную ось стрелы L (вектор единичной длины) до совпадения с D
В общем случае - повернуть стрелу вокруг оси cross(L,D) на угол acos(dot(L,D)) (в радианах)

Можно упростить, если стрела изначально ориентированна например по оси Z

> Vector3 localRotationArrow; // локальная ротация стрелы.
А это что? Вращение обычно задают матрицей

#4
20:24, 8 мая 2022

Aslan
> Вращение обычно задают матрицей
здравствуй реальность. ))) В жизни, изначально, указывалось углами поворота?! ))) Матрицы, как-никак пришли позже.

#5
20:32, 8 мая 2022

Mirrel
> В жизни, изначально, указывалось углами поворота
Это плохой вариант

#6
21:32, 8 мая 2022

Aslan, ты хочешь это объяснить всему миру? )))

#7
21:47, 8 мая 2022

Mirrel
Не разводи флейм

#8
21:54, 8 мая 2022

Mirrel
> В жизни, изначально, указывалось углами поворота?!

Gimbal lock так то тоже вполне механическое явление.

#9
22:31, 8 мая 2022

Aslan
> Не разводи флейм
разве в этом суть? Тут может создаваться каждый месяц новый топик с углами поворота и везде будут использоваться углы, а не матрицы. К этому надо быть изначально готовым.
Потому изначально твои слова начало флейма (не обвинение!).

Der FlugSimulator
> Gimbal lock
если топикстартеру это поможет.

#10
8:07, 9 мая 2022

Mirrel
ok

ПрограммированиеФорумГрафика