gpt4 book ai didi

opengl - GLSL + OpenGL 远离状态机

转载 作者:行者123 更新时间:2023-12-01 01:29:40 31 4
gpt4 key购买 nike

我开始将我的一个项目从固定管道中移开,所以为了尝试一些事情,我尝试编写一个着色器,它可以简单地传递 OpenGL 矩阵并用它变换顶点,然后在我知道可行后开始计算我自己的.我认为这将是一项简单的任务,但即使这样也行不通。

我开始使用这个用于普通固定管线的着色器:

void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

然后我把它改成这样:

uniform mat4 model_matrix;
uniform mat4 projection_matrix;

void main(void)
{
gl_Position = model_matrix * projection_matrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

然后我像这样检索 OpenGL 矩阵并使用以下代码将它们传递给着色器:

 [material.shader bindShader];

GLfloat modelmat[16];
GLfloat projectionmat[16];

glGetFloatv(GL_MODELVIEW_MATRIX, modelmat);
glGetFloatv(GL_PROJECTION_MATRIX, projectionmat);


glUniformMatrix4fv([material.shader getUniformLocation:"model_matrix"], 1, GL_FALSE, modelmat);
glUniformMatrix4fv([material.shader getUniformLocation:"projection_matrix"], 1, GL_FALSE, projectionmat );
... Draw Stuff

出于某种原因,这不会绘制任何东西(顺便说一句,我 95% 肯定这些矩阵是正确的,然后才通过它们)有什么想法吗?

最佳答案

问题是我的矩阵乘法顺序错误。我不知道这些操作是不可交换的。

正确的顺序应该是:

projection * modelview * vertex

感谢 ltjax 和 doug65536

关于opengl - GLSL + OpenGL 远离状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5624105/

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