gpt4 book ai didi

c++ - OpenGL 矩阵和着色器混淆

转载 作者:行者123 更新时间:2023-11-30 00:48:01 25 4
gpt4 key购买 nike

我一直在关注现代 OpenGL 和 GLM 库的教程我正在介绍用于转换模型、定位相机和添加透视图的矩阵。

我有一个三角形:

const GLfloat vertexBufferData[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};

我有我的着色器:

GLuint programID = loadShaders("testVertexShader.glsl",
"testFragmentShader.glsl");

我有一个不进行转换的模型矩阵:

glm::mat4 modelMatrix = glm::mat4(1.0f);  /* Identity matrix */

我有一个相机矩阵:

glm::mat4 cameraMatrix = glm::lookAt(
glm::vec3(4.0f, 4.0f, 3.0f), /*Camera position*/
glm::vec3(0.0f, 0.0f, 0.0f), /*Camera target*/
glm::vec3(0.0f, 1.0f, 0.0f) /*Up vector*/
);

我有一个投影矩阵:

glm::mat4 projectionMatrix = glm::perspective(
90.0f, /*FOV in degrees*/
4.0f / 3.0f, /*Aspect ratio*/
0.1f, /*Near clipping distance*/
100.0f /*Far clipping distance*/
);

然后我将所有矩阵相乘得到我想要绘制的三角形的最终矩阵:

glm::mat4 finalMatrix = projectionMatrix
* cameraMatrix
* modelMatrix;

然后我将矩阵发送到 GLSL(我想?):

GLuint matrixID = glGetUniformLocation(programID, "MVP");
glUniformMatrix4fv(matrixID, 1, GL_FALSE, &finalMatrix[0][0]);

然后我做一些我不太了解的着色器:

/*vertex shader*/
#version 330 core

in vec3 vertexPosition_modelspace;
uniform mat4 MVP;

void main(){
vec4 v = vec4(vertexPosition_modelspace, 1);
gl_Position = MVP * v;
}

/*fragment shader*/
#version 330 core
out vec3 color;

void main(){
color = vec3(1, 1, 0);
}

一切都编译并运行,但我看不到三角形。我四处移动了三角形和相机,想着相机可能指向了错误的方向,但没有成功。在我们引入矩阵之前,我能够在屏幕上成功地得到一个三角形,但是现在,没有三角形。三角形应该在原点,相机距离原点几个单位,看着原点。

最佳答案

事实证明,您需要在绑定(bind)着色器后将矩阵发送到着色器。换句话说,您调用 glUniformMatrix4fv() after glUseProgram()

关于c++ - OpenGL 矩阵和着色器混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157549/

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