python C 基本的openGL,顶点缓冲区和pyglet
大家好 !
我正试图从this tutorial学习一些现代OpenGL
编辑:rotoglup在我的代码中发现了问题,添加了我删除的着色器完成了解决方案.请参阅下面的答案以获取正确的代码(使用着色器). 大家好 ! 我正试图从this tutorial学习一些现代OpenGL的基础知识. 我想用python / pyglet而不是C来做.我知道pyglet可以抽取大部分低级OpenGL;我想先了解一些基础知识,然后再将它们隐藏在抽象层之后. 我的问题非常简单:下面的代码只绘制一个点而不是我期望的3个点. 将事物简化为单点显示我不理解的行为(第一个坐标似乎是唯一影响任何事物的坐标),这让我回想起我完全不理解pyglet,OpenGL,或者甚至是一般的3D:p 这是相关的代码: import pyglet from pyglet.gl import * window = pyglet.window.Window() positionBufferObject = GLuint() vao = GLuint() vertexPositions = [0.0,0.0,0.25,1.75,0.0] vertexPositionsGl = (GLfloat * len(vertexPositions))(*vertexPositions) @window.event def on_draw(): glBindBuffer(GL_ARRAY_BUFFER,positionBufferObject) glEnableVertexAttribArray(0) glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0) glDrawArrays(GL_POINTS,3) glDisableVertexAttribArray(0) glGenBuffers(1,positionBufferObject) glBindBuffer(GL_ARRAY_BUFFER,positionBufferObject) glBufferData(GL_ARRAY_BUFFER,len(vertexPositionsGl)*4,vertexPositionsGl,GL_STATIC_DRAW) glBindBuffer(GL_ARRAY_BUFFER,0) glClearColor(0.0,0.0) pyglet.app.run() 解决方法 glDrawArrays(GL_POINTS,1)指示画1点,在你的教程中,1是3: glDrawArrays(GL_POINTS,3)另请注意,顶点的第4(w)分量应为1,而不是0: vertexPositions = [0.0,1.0,1.0]或者,您可以删除w组件, vertexPositions = [0.0,0.0]并将以下调用更改为: glVertexAttribPointer(0,0)另一件事,我不是pyglet的专家,但glBufferData可能像C语言一样采用字节大小而不是元素.每个浮点数为4个字节,您可以尝试: glBufferData(GL_ARRAY_BUFFER,GL_STATIC_DRAW)(编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |