我一直在试图让这一整天工作。
我在Visual Studio中使用OpenGL来制作玩家可以驾驶的车辆。相机应该自然地保持上下固定的距离。
我以为我可以在自己的局部y轴上旋转相机以匹配车辆的旋转,然后类似地围绕车辆的y轴旋转相机。 (就像它在轨道上行驶一样)然而它却产生了许多不可预测的影响。我有第一次旋转工作,它是第二次,在车辆周围,这导致问题。以下是相关内容:
mat4 view = identity_mat4();
mat4 vehicle = identity_mat4();
vehicle = translate(vehicle, vec3(x_position, 0.f, z_position)); // User input values
view = rotate_about_y(vec3(0.f, 0.f, 0.f), view, y_rotation); // Rotate camera , this works
// view = rotate_about_y(vec3(x_position, 0.f, z_position), view, y_rotation); // Stay behind vehicle
glUniformMatrix4fv(view_mat_location, 1, GL_FALSE, view.m);
glUniformMatrix4fv(matrix_location, 1, GL_FALSE, tank_global.m);
这是我绕一个点旋转的方法。我意识到我最有可能要做的事情 - 调整这个方法,这样我就可以给它任何一点,而不仅仅是原点,它会围绕它旋转。您可以在“中心”向量中看到我最近尝试的证据。
mat4 rotate_about_y(vec3 center, mat4 in, float deg)
{
vec3 returnToPoint = vec3(in.m[12], in.m[13], in.m[14]);
vec3 toOrigin = center - vec3(in.m[12], in.m[13], in.m[14]);
in = translate(in, toOrigin);
in = rotate_y_deg(in, deg);
in = translate(in, returnToPoint);
return in;
}
或许有更好的方法可以做到这一点吗?