Как я могу создать 3D с помощью Pyglet? - PullRequest
2 голосов
/ 13 октября 2019

Я попытался создать куб в pyglet:

import pyglet
from pyglet.gl import *

window = pyglet.window.Window(400,400,"Paka Paka",True)
@window.event
def on_draw():
    window.clear()
    glBegin(GL_QUADS)
    glVertex3f(0,40,0)
    glColor3f(1,0,0)
    glVertex3f(100,40,0)
    glColor3f(0,1,0)
    glVertex3f(100,140,0)
    glColor3f(0,0,1)
    glVertex3f(100,40,100)
    glColor3f(1,1,0)
    glVertex3f(100,140,100)
    glColor3f(1,0,1)
    glVertex3f(0,140,100)
    glColor3f(0,1,1)
    glVertex3f(0,40,100)
    glColor3f(2,0,0)
    glVertex3f(0,140,0)
    glColor3f(0,0,2)
    glEnd()
pyglet.app.run()

, и когда я запустил программу, я увидел черный экран.

and when I run the program, I saw a black screen.

(кроме как вверх) мне нужно изменить тип вершины или что-то другое?

edit: я использовал коды, данные Rabbid76. но это не сработало.

1 Ответ

1 голос
/ 13 октября 2019

Часть геометрии обрезается по ближней или дальней плоскости (по умолчанию) ортографическая проекция .

Рекомендую установить матрицу проекции на glOrtho. Например:

glOrtho(-200, 200, -200, 200, -200, 200) 

соответственно

glOrtho(0, 400, 400, 400, -200, 200)  

Более того, рекомендуется очистить одно буферное окно с помощью glFlush()

Установитьпроекция в начале on_draw и вызов glFlush() в конце:

@window.event
def on_draw():
    w, h = 400, 400
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(-w/2, w/2, -h/2, h/2, -200, 200)

    glMatrixMode(GL_MODELVIEW)

    window.clear() 

    glBegin(GL_QUADS)
    # [...]
    glEnd()

    glFlush()
...