opengl (ModernGL)渲染 VAO 的问题

kpbwa7wx  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(114)

我一直在寻找一个解决方案,现在,我试图使一个渲染器在Python中使用ModernGL,PyGLFW和PyGLM。一个红色的立方体应该呈现在屏幕上,但只有一个蓝色的背景。我发现的唯一一件事是,立方体不渲染,因为着色器被写入太多,但我必须这样做,使FPS相机系统的工作。

class Mesh:
    def __init__(self,engine):
        vertices,indices = self.get_vertex_data()

        self.vbo = self.ctx.buffer(vertices.to_bytes())
        self.ibo = self.ctx.buffer(indices.to_bytes())
        self.vao = self.ctx.vertex_array(
            engine.shader.program,
            self.vbo,
            "inPosition",
            index_buffer=self.ibo,
            index_element_size=4
        )

        self.update_shaders()
    @staticmethod
    def get_data(vertices, indices):
        data = [vertices[ind] for triangle in indices for ind in triangle]
        return glm.array(*data)
    def get_vertex_data(self):
        pass
    def update_shaders(self):
        self.engine.shader.program["projectionMatrix"].write(self.engine.current_camera.projection_matrix)
        self.engine.shader.program["viewMatrix"].write(self.engine.current_camera.view_matrix)
        self.engine.shader.program["modelMatrix"].write(self.transform.to_matrix())
    def update(self):
        self.update_shaders()
    def render(self):
        self.vao.render()
    def release(self):
        self.vbo.release()
        self.ibo.release()
        self.vao.release()

字符集
(我没有添加get_vertex_data方法,因为它太长了,基本上,它只是创建两个PyGLM数组,一个包含立方体的vec3,第二个是该立方体的索引。

u1ehiz5o

u1ehiz5o1#

我发现了问题,问题是,我在相机的位置上添加了一个幅度为0的vec3,并且由于某种原因与相机的viewMatrix发生了冲突,现在它可以工作了。

相关问题