旋转一组vector

我正在试图将我采样的一组向量旋转到三angular形的法线上

如果这是正确的,随机抽样的半球将与三angular形alignment。

目前我在Z轴上生成它,并试图将所有样本旋转到三angular形的法线。

但它似乎是“刚刚closures”

在这里输入图像描述

glm::quat getQuat(glm::vec3 v1, glm::vec3 v2) { glm::quat myQuat; float dot = glm::dot(v1, v2); if (dot != 1) { glm::vec3 aa = glm::normalize(glm::cross(v1, v2)); float w = sqrt(glm::length(v1)*glm::length(v1) * glm::length(v2)*glm::length(v2)) + dot; myQuat.x = aa.x; myQuat.y = aa.y; myQuat.z = aa.z; myQuat.w = w; } return myQuat; } 

我从这个页面底部拉出来的: http : //lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors

然后我 :

 glm::vec3 zaxis = glm::normalize( glm::vec3(0, 0, 1) ); // hardcoded but test orginal axis glm::vec3 n1 = glm::normalize( glm::cross((p2 - p1), (p3 - p1)) ); //normal glm::quat myQuat = glm::normalize(getQuat(zaxis, n1)); glm::mat4 rotmat = glm::toMat4(myQuat); //make a rotation matrix glm::vec4 n3 = rotmat * glm::vec4(n2,1); // current vector I am trying to rotate 

One Solution collect form web for “旋转一组vector”

构造4×4变换matrix而不是四元数

IMG

  1. 不要忘记,OpenGL具有列明智matrix

    所以对于double m[16];
    m[ 0],m[ 1],m[ 2] X轴向量,
    m[ 4],m[ 5],m[ 6] Y轴向量,
    m[ 8],m[ 9],m[10] Z轴向量,
    位置在m[12],m[13],m[14]

    LCS意味着局部坐标系(你的三angular形或物体或其他)
    GCS是指全球坐标系(世界或其他)。

    所有的X,Y,Z向量应归一化为单位向量,否则会出现缩放。

  2. 施工

    1. Z轴vector设置为你的三angular形法线
    2. 设置位置( LCS原点)到三angular形的中点(或平均点形成其顶点)
    3. 现在你只需要XY X ,这很容易

      X = any triangle vertex - triangle midpoint
      或者X = substraction of any 2 vertexes of triangle

      X必须满足的唯一条件是它必须位于三angular形平面上。
      现在令Y = X x Z ,叉积将创build垂直于XZvector(也存在于三angular形平面中)。

    4. 现在把所有这些内部matrix,并加载到OpenGL作为ModelViewmatrix或什么。

  • VBO与std :: vector
  • 如何在片段着色器中使用gl_FragCoord.z在现代OpenGL中呈现线性深度?
  • 什么是OpenGL编码的一些最佳实践(尤其是面向对象的方向)?
  • 将值列表传递给片段着色器
  • GLSL / C ++:制服arrays?
  • 将数据从glReadPixels()转换为OpenCV :: Mat
  • glActiveTexture和glBindTexture之间的差异和关系
  • 为什么OpenGL使用度数而不是弧度?
  • 在opengl中的对象加载器
  • 模型视图投影matrix的目的
  • OpenGL中的“即时模式”是什么意思?