Область рисования OpenGL занимает только нижний левый сектор доступного окна - PullRequest
0 голосов
/ 15 апреля 2020

Я только начал с OpenGL и PyOpenGL и использую учебный код с этой страницы https://noobtuts.com/python/opengl-introduction. Однако я быстро столкнулся со следующей проблемой: пока код успешно выполнил рисунок aws, чертеж не может занимать больше, чем левый нижний сектор моего окна. Например, ниже я устанавливаю размер и положение прямоугольника таким образом, чтобы он занимал полное окно, как вы можете видеть в приведенном ниже коде, я устанавливаю ширину и высоту прямоугольника равными ширине и высоте окна, а положение равно 0,0. поэтому я ожидаю, что полное окно станет синим, но этого не происходит, как вы можете видеть ниже. Я работаю на Ma c OS Catalina и запускаю PyOpenGL на Python 3.

В других местах я видел, что в этом месте есть что-то, связанное с Каталиной: https://github.com/redeclipse/base/issues/920 и это место https://github.com/ioquake/ioq3/issues/422#issuecomment -541193050

Однако это слишком далеко, чтобы я мог понять.

Кто-нибудь знает, как это можно решить, возможно?

Спасибо за вашу помощь

from OpenGL import *
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *

window = 0  # glut window number
width, height = 500, 400  # window size

def refresh2d(width, height):
    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0.0, width, 0.0, height, 0.0, 1.0)
    glMatrixMode (GL_MODELVIEW)
    glLoadIdentity()

def draw_rect(x, y, width, height):
    glBegin(GL_QUADS)                                  # start drawing a rectangle
    glVertex2f(x, y)                                   # bottom left point
    glVertex2f(x + width, y)                           # bottom right point
    glVertex2f(x + width, y + height)                  # top right point
    glVertex2f(x, y + height)                          # top left point
    glEnd()                                            # done drawing a rectangle

def draw():  # ondraw is called all the time
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)  # clear the screen
    glLoadIdentity()  # reset position
    refresh2d(width, height)  # set mode to 2d

    glColor3f(0.0, 0.0, 1.0)  # set color to blue
    draw_rect(0, 0, 500, 400)  # rect at (0, 0) with width 500, height 400

    glutSwapBuffers()  # important for double buffering


# initialization
glutInit()  # initialize glut
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(width, height)  # set window size
glutInitWindowPosition(0, 0)  # set window position
window = glutCreateWindow("my first attempt")  # create window with title
glutDisplayFunc(draw)  # set draw function callback
glutIdleFunc(draw)  # draw all the time
glutMainLoop()  # start everything

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

...