Eine Gruppe von Vektoren drehen

Ich versuche, eine Gruppe von Vektoren, die ich abgetastet habe, zur Normalen eines Dreiecks zu drehen

Wenn dies korrekt wäre, würde die zufällig ausgewählte Hemisphäre mit dem Dreieck ausgerichtet sein.

Momentan generiere ich es auf der Z-Achse und versuche, alle Samples zur Normalen des Dreiecks zu drehen.

aber es scheint "just off" zu sein

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

Was ich am Ende dieser Seite herausgezogen habe:http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors

Dann ich:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage