使用向量A的位置和方向创建向量B

时间:2019-05-22 19:20:48

标签: c++ opengl glm-math

我目前正在尝试了解如何在相对于另一个矢量的位置和方向的特定位置创建矢量。例如,我有此插图,它可能有助于解释我要完成的工作:

enter image description here

A包含属性:glm::vec3 positionglm::vec3 direction。现在,让我说点B要在A前面2个单位。是否可以使用glm确定B的位置来数学解决此问题?

2 个答案:

答案 0 :(得分:2)

射线点可以通过以下方式获得:

B = A + D * t

其中A是射线的原点,D是长度为1(Unit vector)的方向向量,t是距离形式{{1} }至A

使用GLM可以这样表示:

B
struct Ray
{
    glm::vec3 position;
    glm::vec3 direction;
};

Ray A;

normalize()按照与给定向量相同的方向计算向量,但长度为1。

如果将方向向量存储为单位向量(长度为1),则在计算射线上的点时可以避免进行昂贵的float t = 2.0f; glm::vec3 B = A.position + glm::normalize(A.direction) * t; 操作。
我建议定义一个normalize()来计算光线点:

class Ray
class Ray
{
public:

   Ray(const glm::vec3 &O, const glm::vec3 &D)
     : _O(O)
     , _D(glm::normalize(D))
   {}

   glm::vec3 P(float t) const {
       return _O + _D * t;
   }

private:
    glm::vec3 _O;
    glm::vec3 _D;
};
Ray A(glm::vec3(....), glm::vec3(....));

答案 1 :(得分:0)

点B的位置等于点A的位置+点A的方向乘以2,因为(我在这里假设)方向是长度为1的单位矢量。

glm::vec3 positionB = a.pos + a.dir * 2.f;