#python #opengl #pyglet
#python #opengl #pyglet
Вопрос:
Мне нужно создать несколько видовых экранов cube в Pyglet python, но у меня всегда есть только один.
Посмотрите на def on_resize():
WINDOW = 1000
INCREMENT = 5
transparant = False
class Window(pyglet.window.Window):
xRotation = yRotation = zRotation = 30
zoom = 1
far = 100
dist = 35
x = y = z = 0
def __init__(self, width, height, title = '') :
super(Window, self).__init__( 1300,1000, title)
pgl.glClearColor(0, 0, 0, 1)
pgl.glEnable(pgl.GL_DEPTH_TEST)
def on_draw(self) :
self.clear()
рисование куба
pgl.glPopMatrix()
def on_resize(self, width, height) :
pgl.glClear(pgl.GL_COLOR_BUFFER_BIT | pgl.GL_DEPTH_BUFFER_BIT)
pgl.glViewport(0, 0, 650, 500)
pgl.glLoadIdentity()
pgl.glMatrixMode(ogl.GL_PROJECTION)
pgl.glOrtho(-width / 8, width / 8, -height / 8, height / 8, 0, 500)
pgl.glFlush()
pgl.glViewport(500, 0, 650, 500)
pgl.glLoadIdentity()
pgl.glMatrixMode(ogl.GL_PROJECTION)
Ratio = width/height
# pgl.gluPerspective(self.dist, Ratio, 1, 1000)
pgl.glOrtho(-width/8, width/8, -height/8, height/8, 0, 500)
pgl.glFlush()
pgl.glMatrixMode(ogl.GL_MODELVIEW)
pgl.glTranslatef(0, 0, -100)
Window(WINDOW, WINDOW, 'Cube')
pyglet.app.run()
Можете ли вы помочь решить эту проблему?
Ответ №1:
Настройка видового экрана и матриц изменит состояние OpenGL. Сразу после этого нужно что-то нарисовать. Установка нового видового экрана просто переопределит предыдущую настройку. Что-то вроде:
pgl.glClear(pgl.GL_COLOR_BUFFER_BIT | pgl.GL_DEPTH_BUFFER_BIT)
pgl.glViewport(0, 0, 650, 500)
pgl.glMatrixMode(ogl.GL_PROJECTION)
pgl.glLoadIdentity()
pgl.glOrtho(-width / 8, width / 8, -height / 8, height / 8, 0, 500)
pgl.glMatrixMode(ogl.GL_MODELVIEW)
# set modelview matrix
# draw cube
pgl.glViewport(500, 0, 650, 500)
pgl.glMatrixMode(ogl.GL_PROJECTION)
pgl.glLoadIdentity()
# this is actually the same as before, so you can just leave it
pgl.glOrtho(-width/8, width/8, -height/8, height/8, 0, 500)
pgl.glMatrixMode(ogl.GL_MODELVIEW)
pgl.glTranslatef(0, 0, -100)
# set modelview matrix
# draw cube
Комментарии:
1. как я могу вызвать функцию on_draw? если я создаю отдельную функцию для рисования куба, куб не перемещается, не поворачивается и не масштабируется (мне нужно это сделать), он работает, только если он находится внутри on_draw pastebin.com/gziTksSa полный код, чтобы вы могли меня правильно понять
2. Конечно, все рисование должно происходить в
on_draw
. Приведенный здесь код должен идти именно туда.3. Спасибо, это работает, и мб вы знаете, как создавать разные ортогональные проекции? Я сделал спереди, и мне нужен еще один сбоку
4. Поверните куб соответствующим образом, используя матрицу modelview.
Ответ №2:
Вот общий совет / подсказка / правило для новичков OpenGL, сталкивающихся с такого рода проблемами:
Пока вы учитесь, не выполняйте вызовы OpenGL вне функции рисования! Настройка матриц, видового экрана и так далее и всегда переходит в функцию рисования.