Python glm&x27;与glUniformMatrix4fv一起使用时,PyOpenGL中的s值_ptr返回错误

Python glm&x27;与glUniformMatrix4fv一起使用时,PyOpenGL中的s值_ptr返回错误,python,opengl,matrix,glm-math,pyopengl,Python,Opengl,Matrix,Glm Math,Pyopengl,我正在使用PyOpenGL上的着色器渲染东西,现在我想使用矩阵通过将顶点传递给着色器来变换顶点。为此,我使用glm在主代码中定义了一个变换矩阵,然后尝试使用glUniformMatrix4fv和glm.value\u ptr将其作为统一的顶点着色器传递给顶点着色器 当我尝试运行代码时,它会返回一个无效的操作错误: OpenGL.error.GLError: GLError( err = 1282, description = b'invalid operation', b

我正在使用PyOpenGL上的着色器渲染东西,现在我想使用矩阵通过将顶点传递给着色器来变换顶点。为此,我使用glm在主代码中定义了一个变换矩阵,然后尝试使用
glUniformMatrix4fv
glm.value\u ptr
将其作为统一的顶点着色器传递给顶点着色器

当我尝试运行代码时,它会返回一个无效的操作错误:

OpenGL.error.GLError: GLError(
    err = 1282,
    description = b'invalid operation',
    baseOperation = glUniformMatrix4fv,
    pyArgs = (
        3,
        1,
        GL_FALSE,
        <glfw.LP_c_float object at 0x7f40928b8b70>,
    ),
    cArgs = (
        3,
        1,
        GL_FALSE,
        <glfw.LP_c_float object at 0x7f40928b8b70>,
    ),
    cArguments = (
        3,
        1,
        GL_FALSE,
        <glfw.LP_c_float object at 0x7f40928b8b70>,
    )
)
这是我的顶点着色器:

#version 450 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

uniform mat4 transform;

void main() {
        gl_Position = transform * vec4(aPos, 1.0);
        TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}
在使用
glLoadMatrix
glm.value\u ptr
时,我已经遇到了类似的错误。我通过使用列表理解将矩阵转换为列表来解决这个问题,我怀疑它在这种情况下也会起作用


我想知道是不是Python中的
glm.value\u ptr
通常被破坏了,还是我只是用错了?谢谢

问题不是由
glm.value\u ptr
引起的。如果没有得到类型错误,则返回OpenGL错误“无效操作”

导致此错误的原因是您没有在
glUniformMatrix4fv
之前安装
着色器程序

glUseProgram(shaderProgram.getID()) glUniformMatrix4fv(转换位置,1,GL_假,glm.值_ptr(转换))

注意,如果没有当前程序对象,则在当前安装程序的默认统一块中将值设置为统一,并导致
GL\u INVALID\u操作
错误。

问题不是由
glm.value\u ptr
引起的。如果没有得到类型错误,则返回OpenGL错误“无效操作”

导致此错误的原因是您没有在
glUniformMatrix4fv
之前安装
着色器程序

glUseProgram(shaderProgram.getID()) glUniformMatrix4fv(转换位置,1,GL_假,glm.值_ptr(转换))

注意,如果没有当前程序对象,则在当前安装的程序的默认统一块中将值设置为统一,并导致
GL\u INVALID\u操作
错误。

我无法重现该问题。它可能与PyOpenGL或PyGLM版本有关。但是
glm.value\u ptr
(与
glUniformMatrix4fv
结合使用)对我来说效果很好。我无法重现这个问题。它可能与PyOpenGL或PyGLM版本有关。但是
glm.value\u ptr
(与
glUniformMatrix4fv
结合使用)对我来说效果很好。
#version 450 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

uniform mat4 transform;

void main() {
        gl_Position = transform * vec4(aPos, 1.0);
        TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}