opengl - 在 OpenGL 中设置 mat4

标签 opengl glsl

我一直在阅读一些关于着色器的(基本)教程。到目前为止,他们已经介绍了如何在着色器中设置变量。但这只是关于整数、浮点数或向量。我找不到有关如何设置 mat4 变量的任何信息。我的着色器需要以下内容:

uniform vec3 CameraPos;
uniform mat4 ModelWorld4x4;

所以相机位置和模型的世界矩阵。我想我的 CameraPos 是正确的,但是我到底如何设置 ModelWorld4x4 变量?

这就是我设置vector3的方式
campos = glGetUniformLocation(shader.id(), "CameraPos");
glUniform3f(campos, 0.0f, 0.0f, 3.0f);

这是(其中一种方法)我如何尝试设置 mat4
glGetFloatv(GL_MODELVIEW_MATRIX, modelworld);
modelw = glGetUniformLocation(shader.id(), "ModelWorld4x4");
glUniformMatrix4fv(g_modelworld4x4, modelworld); // Not working

我正在使用 Assimp 库加载模型,因此当前世界矩阵存储在 aiMatrix4x4 结构中。
// world matrix of the model
aiMatrix4x4 m = nd->mTransformation;

// Save in a global variable
g_modelworld4x4 = m;

最佳答案

确保您在着色器中使用 ModelWorld4x4,以免它被简单地编译出来。假设 g_modelworld4x4 是一个浮点 *,这对我有用:

int location = glGetUniformLocationARB(program, "ModelWorld4x4");
glUniformMatrix4fvARB(location, 1 /*only setting 1 matrix*/, false /*transpose?*/, g_modelworld4x4;

根据函数调用的声明方式,您可能需要从函数名称中删除 ARB。

关于opengl - 在 OpenGL 中设置 mat4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023107/

相关文章:

c++ - 创建一个围绕对象旋转的相机 OpenGL C++

delphi - 在 Delphi 和 openGL 中按下多个箭头键来移动对象

opengl - Vulkan 可以做哪些 OpenGL 4.6+ 不能做的具体事情?

openGL GLSL 着色器 : Draw a Circle on a flat polygon

c++ - 无法将 id 分配给 OpenGL 中的属性

python - 使用 GLSL 进行纹理化(在 PyOpenGL 和 Pygame 中)

c++ - 围绕另一个 3D 点旋转

opengl - GLSL "in"结构体

c# - GLSL 自旋锁永远阻塞

c++ - 在 OpenGL 中使用不同的着色器程序?