편집 : rotoglup 내 코드에서 문제를 발견했습니다. 제거한 셰이더를 추가하면 솔루션이 완료됩니다. 올바른 코드 (쉐이더 포함)는 아래의 내 대답을 참조하십시오.기본 openGL, 정점 버퍼 및 pyglet
안녕하세요!
나는 현대 OpenGL의 기초를 배우려고 노력하고있다. this tutorial.
나는 python/pyglet 대신 C++로하고 싶다. 나는 pyglet이 저수준 OpenGL을 많이 추상화 할 수 있다는 것을 알고 있습니다. 나는 추상의 레이어 뒤에 그들을 숨기기로 이동하기 전에 몇 가지 기본 사항을 이해하고 싶습니다.
내 문제는 매우 간단합니다. 아래 코드는 예상 한 3 점 대신에 단일 점만 그립니다. 내 코드는 자습서의 C++과 동일하지만 파이썬에서 gletools을 통해 수행 된 정점 및 조각 쉐이더 제거를 제외하고는 내 문제와 아무런 차이가없는 것으로 보입니다.
단일 지점으로 단순화하는 것은 내가 이해하지 못하는 행동을 보여 주며 (첫 번째 좌표 만이 영향을 미치는 유일한 것으로 보임) 일반적으로 pyglet, OpenGL을, 또는 3D : 1 3,
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
수정 된 코드를 통해 얻을 수있는 최상의 점은 w 좌표가 1로 이동하지 않고 바이트 단위로 크기를 전달하는 단일 점입니다. 내가 w 좌표를 제거하고 이에 따라 glVertexAttribPointer를 변경하면 아무 것도 얻지 못합니다. 나는 완전히 혼란스러워! –
수정 : w가 표시되기 위해 0으로 설정되어야합니다. 그러면 나를 더 혼란스럽게 만듭니다. –