您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 基本的openGL,顶点缓冲区和pyglet

5b51 2022/1/14 8:22:25 python 字数 3091 阅读 560 来源 www.jb51.cc/python

编辑:rotoglup在我的代码中发现了问题,添加了我删除的着色器完成了解决方案.请参阅下面的答案以获取正确的代码(使用着色器). 大家好 ! 我正试图从this tutorial学习一些现代OpenGL的基础知识. 我想用python / pyglet而不是C来做.我知道pyglet可以抽取大部分低级OpenGL;我想先了解一些基础知识,然后再将它们隐藏在抽象层之后. 我的问题非常简单:下面的代

概述

大家好 !

我正试图从this tutorial学习一些现代OpenGL的基础知识.

我想用python / pyglet而不是C来做.我知道pyglet可以抽取大部分低级OpenGL;我想先了解一些基础知识,然后再将它们隐藏在抽象层之后.

我的问题非常简单:下面的代码只绘制一个点而不是我期望的3个点.
据我所知,我的代码与教程中的C相同,除了删除顶点和片段着色器(在python中通过gletools完成),这似乎对我的问题没有任何影响.

将事物简化为单点显示我不理解的行为(第一个坐标似乎是唯一影响任何事物的坐标),这让我回想起我完全不理解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)

总结

以上是编程之家为你收集整理的python – 基本的openGL,顶点缓冲区和pyglet全部内容,希望文章能够帮你解决python – 基本的openGL,顶点缓冲区和pyglet所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶