我一直在寻找一个解决方案,现在,我试图使一个渲染器在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,第二个是该立方体的索引。
1条答案
按热度按时间u1ehiz5o1#
我发现了问题,问题是,我在相机的位置上添加了一个幅度为0的vec3,并且由于某种原因与相机的viewMatrix发生了冲突,现在它可以工作了。