如何在3D空间中沿指定方向移动点?(基于俯仰、偏航、滚转角,光线步进算法)
3D空间中基于俯仰/偏航角的点方向移动实现(光线步进场景)
你已经掌握了2D空间中点沿角度方向移动的实现:
pointX += sin(angle) * movementSpeed; pointY += cos(angle) * movementSpeed;
在3D场景中(尤其是你正在做的光线步进算法),滚转角(roll)其实不需要参与方向计算——因为光线的传播方向只由俯仰角(pitch,绕X轴上下转动)和偏航角(yaw,绕Y轴左右转动)决定,滚转角是绕光线自身轴线的旋转,不会改变光线的前进方向。
具体实现步骤如下:
- 先将角度值转换为弧度(如果你的输入是角度制的话)
- 通过三角函数计算出3D方向向量的三个分量
- 用方向向量乘以移动速度,加到点的坐标上
对应的代码示例:
// 角度转弧度(如果输入是角度) float yawRad = yaw * M_PI / 180.0f; float pitchRad = pitch * M_PI / 180.0f; // 计算3D方向向量 float dirX = cos(pitchRad) * sin(yawRad); float dirY = sin(pitchRad); float dirZ = cos(pitchRad) * cos(yawRad); // 沿方向移动点 pointX += dirX * movementSpeed; pointY += dirY * movementSpeed; pointZ += dirZ * movementSpeed;
简单推导逻辑:
- 偏航角(yaw)决定了XY平面内的方向,对应2D中的
sin(angle)和cos(angle) - 俯仰角(pitch)用来调整Y轴(上下)方向的分量,而XY平面的分量需要乘以
cos(pitch)做缩放,保证方向向量的模长始终为1(如果需要单位向量的话)
内容的提问来源于stack exchange,提问作者Earthmars643
相关产品推荐
相关产品推荐

