1

我一直试图让我生成的几何图形与方向向量对齐。为了说明我目前的问题是:

  • A = 正确对齐的几何图形(只是一个用于测试的三角形)
  • B = 不正确对齐的几何图形

问题示例

我当前在此三角形示例的代码中的解决方案(此代码针对您在屏幕上从拆分开始看到的所有节点运行,我使用的是 GLM 数学库):

glm::vec3 v1, v2, v3;

v1.x = -0.25f; 
v1.z = -0.25f; 

v2.x = 0.25f;
v2.z = -0.25f;

v3.x = 0.0f; 
v3.z = 0.25f;

v1.y = 0.0f;
v2.y = 0.0f;
v3.y = 0.0f;

glm::mat4x4 translate = glm::translate(glm::mat4x4(1.0f), sp.position);
glm::mat4x4 rotate = glm::lookAt(glm::vec3(0.0f, 0.0f, 0.0f), sp.direction, glm::vec3(0.0f, 1.0f, 0.0f));

v1 = glm::vec4(translate * rotate * glm::vec4(v1, 1.0f)).swizzle(glm::comp::X, glm::comp::Y, glm::comp::Z);
v2 = glm::vec4(translate * rotate * glm::vec4(v2, 1.0f)).swizzle(glm::comp::X, glm::comp::Y, glm::comp::Z);
v3 = glm::vec4(translate * rotate * glm::vec4(v3, 1.0f)).swizzle(glm::comp::X, glm::comp::Y, glm::comp::Z);

点 A 的方向向量值:

  • x 0.000000000 浮点数
  • y 0.788205445 浮动
  • z 0.615412235 浮点数

B点的方向向量值:

  • x 0.0543831661 浮点数
  • y 0.788205445 浮动
  • z -0.613004684 浮点数

编辑 1 (24/11/2013 @ 20:36) : A 和 B 没有任何关系,两者都是单独生成的。在生成 A 或 B 时,仅知道位置和方向。

我一直在查看此处发布的解决方案:

但我无法成功旋转我的几何图形以与我的方向矢量对齐。我觉得我在做一些相当基本的错误。

任何帮助将不胜感激!

4

1 回答 1

2

如果AB是单位向量,并且您想要一个旋转矩阵R,该矩阵进行变换B以使其与 对齐A,然后从计算(和C = B x A 的叉积)开始。 是旋转轴,是必要的旋转角度。 BACarcsin(|C|)

从这些您可以构建所需的旋转矩阵。貌似glm支持这个,就不多解释了。

|C| = sin(theta), sqrt(1 - |C|^2) = cos(theta)请注意,如果您在性能关键代码中执行很多很多这些操作,您可以通过使用 和 的这些已知值自己记录和计算矩阵sin(theta)来获得一点速度cos(theta)。为此,请参阅此讨论。该glm例程会从你的角度arcsin(|C|)并立即开始计算它的sincos,这是一个小小的浪费,因为你已经知道这些并且操作相对昂贵。

如果旋转是关于原点p以外的某个点,那么让T是一个平p移到原点,然后找到X = T^-1 R T。这X将是您想要的转变。

于 2013-11-24T18:45:12.840 回答