基本上,我需要在按左鍵(將視圖向右轉)時正確地改變眼圖和向上矢量。我的實現如下,但它似乎沒有通過測試。任何人都可以幫忙實現在openGL中左轉功能
// Transforms the camera left around the "crystal ball" interface
void Transform::left(float degrees, vec3& eye, vec3& up) {
// YOUR CODE FOR HW1 HERE
eye = rotate(degrees, vec3(0, 1, 0)) * eye;
up = rotate(degrees, vec3(0, 1, 0)) * up;
}
旋轉函數有兩個參數度和軸線,並返回旋轉矩陣是3×3矩陣:
mat3 Transform::rotate(const float degrees, const vec3& axis) {
// YOUR CODE FOR HW1 HERE
mat3 rot, I(1.0);
mat3 a_x;
a_x[0][0] = 0;
a_x[0][1] = -axis[2];
a_x[0][2] = axis[1];
a_x[1][0] = axis[2];
a_x[1][1] = 0;
a_x[1][2] = -axis[0];
a_x[2][0] = -axis[1];
a_x[2][1] = axis[0];
a_x[2][2] = 0;
float theta = degrees/180 * pi;
rot = I * cos(theta) + glm::outerProduct(axis, axis) *(1-cos(theta)) + a_x*sin(theta);
return rot;
}
您沒有提供足夠的信息,哪些測試失敗?他們如何失敗?某些測試值的實際和預期輸出是多少?你確定'Transform :: rotate'返回正確的旋轉矩陣嗎? – user2802841
我在這裏附加了'Transform :: rotate'的完整實現。 –