C# 模型视图投影会导致失真
在我的世界里,我有一个立方体,每帧平移0.0f,0.01f,0.0f,但这会导致立方体移动 我99%确信这是MVP的一个问题,我是如何设置它的,乘以变量或者其他与之相关的因素。这就是我设置每个变量的方式,模型矩阵在每帧更新时发送到着色器,而摄影机和投影矩阵在窗口加载时发送一次 资料来源: 摄像机、投影和模型矩阵C# 模型视图投影会导致失真,c#,opengl,opentk,C#,Opengl,Opentk,在我的世界里,我有一个立方体,每帧平移0.0f,0.01f,0.0f,但这会导致立方体移动 我99%确信这是MVP的一个问题,我是如何设置它的,乘以变量或者其他与之相关的因素。这就是我设置每个变量的方式,模型矩阵在每帧更新时发送到着色器,而摄影机和投影矩阵在窗口加载时发送一次 资料来源: 摄像机、投影和模型矩阵 m_cube_matrix = Matrix4.Identity; m_camera = Matrix4.LookAt(new Vector3(2.0f, 2.0f, -1.5f),
m_cube_matrix = Matrix4.Identity;
m_camera = Matrix4.LookAt(new Vector3(2.0f, 2.0f, -1.5f), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f));
int _u_camera = GL.GetUniformLocation(m_shader.m_shader_program_id, "uCamera");
GL.UniformMatrix4(_u_camera, false, ref m_camera);
m_projection = Matrix4.CreatePerspectiveFieldOfView(1.5f, 800.0f / 600.0f, 0.1f, 10.0f);
int _u_projection = GL.GetUniformLocation(m_shader.m_shader_program_id, "uProjection");
GL.UniformMatrix4(_u_projection, false, ref m_projection);
顶点着色器
#version 330
uniform mat4 uModel;
uniform mat4 uCamera;
uniform mat4 uProjection;
in vec3 vPosition;
in vec3 vNormal;
out vec3 oNormal;
out vec3 oPosition;
void main(void)
{
gl_Position = uProjection * uCamera * uModel * vec4(vPosition, 1);
oNormal = normalize(gl_NormalMatrix * vNormal);
oPosition = vPosition;
}
你的变换矩阵被转置了 您对所有矩阵使用相同的矩阵函数,但将
m_cube_矩阵
作为转置发送到GL,而不对所有其他矩阵执行此操作
从您的代码:
GL.UniformMatrix4(_u_model, true, ref m_cube_matrix);
// ^^^^ you are transposing your matrix here
我回答了您的问题,但是您仍然应该编辑问题以提供相关的代码部分,或者直接内联一些视频中的静态图像。