我有一个移动,缩放,旋转的立方体,我需要创建一个平面来修剪立方体像the
这是绘图的代码
pgl.glLoadIdentity()
pgl.glViewport(650, 500, 650, 500)
pgl.glMatrixMode(ogl.GL_PROJECTION)
pgl.glLoadIdentity()
pgl.gluPerspective(self.dist, 1.3, 1, 1000)
pgl.glMatrixMode(ogl.GL_MODELVIEW)
pgl.glTranslatef(0, 0, -400)
pgl.glPushMatrix()
pgl.glTranslatef(self.x, self.y, self.z)
pgl.glRotatef(self.xRotation, 1, 0, 0)
pgl.glRotatef(self.yRotation, 0, 1, 0)
pgl.glRotatef(self.zRotation, 0, 0, 1)
pgl.glScalef(self.zoom, self.zoom, self.zoom)
if not transparant:
pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_FILL)
else:
pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_LINE)
draw_big()
pgl.glPopMatrix()
使用Legacy OpenGL固定功能管道,您可以设置剪切平面。
可以有多个剪裁平面,并且必须由glEnable(GL_CLIP_PLANEi)
启用这些平面。
这架飞机由glClipPlane
设定。剪裁平面的参数被解释为Plane Equation。平面方程的前3个分量是剪裁平面的法向量。第四个组成部分是到原点的距离:
plane = plane = [-1.0, -1.0, -1.0, -280]
ogl.glClipPlane(pgl.GL_CLIP_PLANE0, plane)
有关详细规格,请参阅OpenGL 4.6 API Compatibility Profile Specification - 13.7. PRIMITIVE CLIPPING;第537页。 注意,当前模型 - 视图矩阵的逆矩阵在指定时应用于削波平面系数。
请参阅示例,该示例基于问题的代码:
def on_draw(self) :
self.clear()
pgl.glClear(pgl.GL_COLOR_BUFFER_BIT | pgl.GL_DEPTH_BUFFER_BIT)
pgl.glViewport(0, 0, 500, 500)
pgl.glMatrixMode(ogl.GL_PROJECTION)
pgl.glLoadIdentity()
pgl.gluPerspective(45, 1, 1, 1000)
pgl.glMatrixMode(ogl.GL_MODELVIEW)
pgl.glLoadIdentity()
pgl.glTranslatef(0, 0, -400)
pgl.glPushMatrix()
pgl.glTranslatef(self.x, self.y, self.z)
pgl.glRotatef(self.xRotation, 1, 0, 0)
pgl.glRotatef(self.yRotation, 0, 1, 0)
pgl.glRotatef(self.zRotation, 0, 0, 1)
pgl.glScalef(self.zoom, self.zoom, self.zoom)
if not transparant:
pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_FILL)
else:
pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_LINE)
# set and enable clip plane
plane = plane = [-1.0, -1.0, -1.0, -280]
ogl.glEnable(pgl.GL_CLIP_PLANE0)
ogl.glClipPlane(pgl.GL_CLIP_PLANE0, plane)
draw_big()
ogl.glDisable(pgl.GL_CLIP_PLANE0)
pgl.glPopMatrix()