編輯:rotoglup發現在我的代碼中的問題,增加我已經刪除完成解決方案的着色器。請在下面查看我的答案以獲取正確的代碼(使用着色器)。基本的OpenGL,頂點緩衝區和pyglet
大家好!
我努力學習現代的OpenGL的一些基本知識,從this tutorial。
我想和蟒蛇/ 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.0,
0.25, 0.0, 0.0,
1.75, 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, 0)
glDrawArrays(GL_POINTS, 0, 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, 0.0, 0.0)
pyglet.app.run()
你的意思是,使用正確的代碼,你仍然有一個單點繪製?這一點是否畫在屏幕的中間?如果你改變了第一個座標,點是否移動? – rotoglup 2011-01-06 22:06:22
使用已更正的代碼,我得到的最好的仍然是一個不會隨w座標移動1的單個點,並以字節爲單位傳遞大小。如果我刪除了w座標並相應地更改了glVertexAttribpointer,我什麼也得不到。我徹底困惑! – 2011-01-07 07:36:03