首页 > 解决方案 > 计算位置和旋转前面的 3D 点

问题描述

我目前正在做一个游戏项目,需要在当前玩家的视野前渲染一个点,游戏是用自定义 c++ 引擎编写的。我有当前位置 (x,y,z) 和当前旋转 (pitch,yaw,roll)。我需要将点沿已知角度向前延伸一定距离。

编辑:我用作解决方案的方法(有点偏离,但对我来说没关系)

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 };

标签: mathrotationc++-cliperspective

解决方案


如果它是基于列的,您可以从矩阵第 3 列获取玩家的前向向量,然后将其法线乘以您想要的距离,然后将结果添加到玩家位置,您将获得所需的点。


推荐阅读