gpt4 book ai didi

c++ - OpenGL GLSL - 投影矩阵不工作

转载 作者:行者123 更新时间:2023-11-28 05:39:29 24 4
gpt4 key购买 nike

我有一个基本的 OpenGL 应用程序,我想使用我的投影矩阵。

这是我的矩阵:

WorldCoordinates.m[0][0] = 2.0f / Width - 1.0f; WorldCoordinates.m[0][1] = 0; WorldCoordinates.m[0][2] = 0, WorldCoordinates.m[0][3] = 0;
WorldCoordinates.m[1][0] = 0; WorldCoordinates.m[1][1] = 2.0f / Height - 1.0f; WorldCoordinates.m[1][2] = 0, WorldCoordinates.m[1][3] = 0;
WorldCoordinates.m[2][0] = 0; WorldCoordinates.m[2][1] = 0; WorldCoordinates.m[2][2] = 0, WorldCoordinates.m[2][3] = 0;
WorldCoordinates.m[3][0] = 0; WorldCoordinates.m[3][1] = 0; WorldCoordinates.m[3][2] = 0, WorldCoordinates.m[3][3] = 0;

(WorldCoordinates 是 Matrix4 结构,它只包含一个名为 m 的变量,它是一个 float[4][4])(宽度和高度是两个 int)。然后,我使用以下方法将此坐标应用到我的 vertex 着色器:

shader.Bind();
glUniformMatrix4fv(glGetUniformLocation(shader.GetProgramID(), "worldCoordinates"), 1, GL_TRUE, &WorldCoordinates.m[0][0]);

(Shader 是一个类,并且有一个 Bind() 方法,它只是 glUseProgram)。

这是我的顶点着色器 GLSL

#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;

out vec3 Color;
out vec2 TexCoord;

uniform mat4 worldCoordinates;

void main()
{
gl_Position = worldCoordinates * vec4(position, 1.0f);
Color = color;
TexCoord = texCoord;
}

使用这个,它不起作用。但是将 gl_Position 调用更改为此:

gl_Position = vec4(vec3(position.x * 1/400 -1, position.y * 1/300 -1, 1.0f), 1.0f);

它按预期呈现。这是为什么?

最佳答案

这就是构建正交投影矩阵的方式:

static void
mat4_ortho(mat4_t m, float left, float right, float bottom, float top, float near, float far)
{
float rl = right - left;
float tb = top - bottom;
float fn = far - near;

mat4_zero(m);

m[ 0] = 2.0f / rl;
m[ 5] = 2.0f / tb;
m[10] = -2.0f / fn;
m[12] = -(left + right) / rl;
m[13] = -( top + bottom) / tb;
m[14] = -( far + near) / fn;
m[15] = 1.0f;
}

对于您的情况,您可以设置 left=0、right=width、bottom=0、top=height,near 和 far 无关紧要,例如设置 -1.0 和 1.0。

有了这样的矩阵,您用于绘图的顶点坐标将与屏幕上的像素 1:1 映射。

关于c++ - OpenGL GLSL - 投影矩阵不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37468168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com