使用OpenGL的第三人称视图

时间:2015-11-15 02:34:21

标签: opengl matrix graphics camera transformation

我一直在试图让这一整天工作。

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

或许有更好的方法可以做到这一点吗?

0 个答案:

没有答案