【发布时间】:2016-04-13 16:45:27
【问题描述】:
我正在尝试在 3D 空间中旋转针孔相机。我之前已经对一个房间进行了光线追踪。作为一种好的做法,我首先完成了数学计算并尝试用 C++ 编写数学程序。
// Camera position
vec3 cameraPos(0, 0, -19);
// Rotate camera
float& yaw;
vec3 c1(cos(yaw), 0, sin(yaw));
vec3 c2(0, 1, 0);
vec3 c3(-sin(yaw), 0, cos(yaw));
glm::mat3 R(c1, c2, c3);
我所做的旋转相机是这样的:
if (keystate[SDLK_LEFT])
{
//cameraPos.x -= translation;
if (yaw > 0)
{
yaw = 0.01;
}
cout << yaw << endl;
cameraPos = R * cameraPos;
cout << "LEFT" << endl;
}
if (keystate[SDLK_RIGHT])
{
//cameraPos.x += translation;
if (yaw > 0)
{
yaw = -0.01;
}
cout << yaw << endl;
cameraPos = R * cameraPos;
cout << "RIGHT" << endl;
}
我已将旋转矩阵 R 与相机位置向量相乘。现在发生的情况是,无论我按什么键,房间都只会向左移动。
我正在关注的教程说:
如果相机被矩阵 R 旋转,那么向量表示 向右(x 轴)、向下(y 轴)和向前(z 轴)方向 van be 检索为:
vec3 right(R[0][0],R[0][1],R[0][2]); vec3 down(R[1][0],R[1][1],R[2][2]); vec3 right(R[2][0],R[2][1],R[2][2]);要为旋转相机建模,您需要在以下情况下都使用这些方向 您移动相机和投射光线时。
我不明白我应该如何使用上述信息。
任何帮助或参考表示赞赏。
【问题讨论】:
标签: c++ raytracing rotational-matrices