【发布时间】:2019-07-30 20:15:21
【问题描述】:
我正在尝试在 PyQt5 OpenGL 小部件中更改场景的视角。我知道我必须重写一些方法,但我不知道应该使用哪一个。
def initializeGL(self):
glClear(GL_COLOR_BUFFER_BIT)
glEnable(GL_DEPTH_TEST)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glBegin(GL_LINES)
# More code
我应该在哪里使用glOrtho 函数?我在哪里可以找到有关覆盖此方法的信息?
当我去到这个方法的声明时,它们只有一个 pass 语句,没有别的,它们是如何以及何时执行的?我应该使用QPainter 而不是 OpenGL?
def __init__(self, parent=None):
super().__init__(parent)
self._x = 0
self._y = -0.3
self._z = 0.5
self._rz = 0
self._ry = -0.5
self.vertices_vertical = [[1000, 1000, 000], [1000, -1000, 000],
[-1000, -1000, 000], [-1000, 1000, 000]]
self.vertices_horizontal = [[1000, 000, -1000], [1000, 000, 1000],
[-1000, 000, 1000], [-1000, 000, -1000]]
def initializeGL(self):
glClear(GL_COLOR_BUFFER_BIT)
glEnable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0, 1000, 750, 0, -1, 1)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glBegin(GL_LINES)
glColor3d(1, 0, 0)
glVertex3d(0, 0, 0)
glVertex3d(1, 0, 0)
glColor3d(0, 1, 0)
glVertex3d(0, 0, 0)
glVertex3d(0, 1, 0)
glColor3d(0, 0, 1)
glVertex3d(0, 0, 0)
glVertex3d(0, 0, 1)
glEnd()
# glLoadIdentity()
glTranslate(self._x, self._y, self._z)
glRotate(self._ry, 0, 1, 0)
glRotate(self._rz, 0, 0, 1)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_DST_COLOR)
glBegin(GL_QUADS)
glColor4fv((0, 1, 0, 0.6))
for vertex in range(4):
glVertex3fv(self.vertices_vertical[vertex])
glColor4fv((1, 0, 0, 0.6))
for vertex in range(4):
glVertex3fv(self.vertices_horizontal[vertex])
glEnd()
glDisable(GL_BLEND)
【问题讨论】:
-
您想更改投影。你想使用Orthographic projection(
glOrtho)还是使用Perspective projection(gluPerspective)? -
@Rabbid76 我想使用正投影
标签: python-3.x opengl pyqt5 pyopengl opengl-compat