編集: rotoglup は私のコードで問題を発見し、削除したシェーダーを追加すると解決策が完成しました。正しいコード (シェーダーを使用) については、以下の私の回答を参照してください。
こんにちは、みんな !
このチュートリアルから最新の OpenGL の基本を学ぼうとしています。
ただし、C++ の代わりに python/pyglet で実行したいと思います。私は、pyglet が低レベルの OpenGL の多くを抽象化できることを知っています。ただし、抽象化のレイヤーの背後にそれらを隠すことに進む前に、いくつかの基本を理解したいと思います。
私の問題は非常に単純です。以下のコードは、私が期待している 3 つのポイントではなく、1 つのポイントしか描画しません。私のコードは、私が知る限り、チュートリアルの 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()