Расчет 3D-точки перед положением и поворотом - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я работаю над игровым проектом и мне нужно отрендерить точку перед видением текущего игрока, игра написана на пользовательском движке C ++. У меня есть текущая позиция (x, y, z) и текущее вращение (тангаж, рыскание, крен). Мне нужно продлить точку вперед под известным углом на заданное расстояние.

edit: То, что я использовал в качестве решения (немного не так, но для меня это нормально)

Vec3 LocalPos = {0,0,0};
Vec3 CurrentLocalAngle = {0,0,0};
float len   = 0.1f;
float pitch = CurrentLocalAngle.x * (M_PI / 180);
float yaw   = CurrentLocalAngle.y * (M_PI / 180);
float sp = sinf(pitch);
float cp = cosf(pitch);
float sy = sinf(yaw);
float cy = cosf(yaw);
Vec3 dir = { cp * cy, cp * sy, -sp };
LocalPos = { LocalPos.x + dir.x * len, LocalPos.y + dir.y * len,LocalPos.z + dir.z * len };

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Преобразуйте угол в вектор направления или просто получите "прямой вектор" от игрока, если он доступен в движке, который вы используете (это должно быть то же самое).

Направленные векторы нормализованы по своей природе (у них расстояние = 1), поэтому вы можете просто умножить их на желаемое расстояние, чтобы получить желаемое смещение. Умножьте этот вектор на расстояние, которое вы хотите, чтобы точка быть относительно опорной точки (камеры вектор я предполагаю игрока), а затем вы просто добавьте к другому, чтобы получить точку в мире, где принадлежит эта точка.

0 голосов
/ 17 июня 2020

Вы можете получить вектор вперед игрока из столбца матрицы 3, если он основан на столбце, затем вы умножаете его нормаль на необходимое расстояние, затем добавляете результат к позиции игрока, и вы получите нужное вам очко.

...