【问题标题】:How to make different orthogonal projections Pyglet?Pyglet如何制作不同的正交投影?
【发布时间】:2019-03-12 22:35:46
【问题描述】:

我制作了立方体的两个视口,但它们都是正面正交投影,我需要它们中的一个从侧面。 这是绘图代码 draw_small 是绘制小的静态立方体 dwar_big 是大立方体的绘制,可以移动、缩放和旋转

    def on_draw(self) :

        self.clear()

        pgl.glClear(pgl.GL_COLOR_BUFFER_BIT | pgl.GL_DEPTH_BUFFER_BIT)

        pgl.glViewport(0, 0, 650, 500)
        pgl.glMatrixMode(pgl.GL_PROJECTION)
        pgl.glLoadIdentity()
        pgl.glOrtho(-1300 / 8, 1300 / 8, -1000 / 8, 1000 / 8, 100, 500)
        pgl.glMatrixMode(pgl.GL_MODELVIEW)
        pgl.glLoadIdentity
        pgl.glTranslatef(0, 0, -100)
        pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_FILL)
        draw_small()

        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:
            ogl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_LINE)

        draw_big()

        pgl.glPopMatrix()


        pgl.glViewport(650, 0, 650, 500)
        pgl.glMatrixMode(pgl.GL_PROJECTION)
        pgl.glLoadIdentity()
        pgl.glOrtho(-1300 / 8, 1300 / 8, -1000 / 8, 1000 / 8, 0, 500)
        pgl.glMatrixMode(pgl.GL_MODELVIEW)
        pgl.glLoadIdentity()
        pgl.glTranslatef(0, 0, -100)
        pgl.glPolygonMode(pgl.GL_FRONT_AND_BACK, pgl.GL_FILL)

        draw_small()

        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()

【问题讨论】:

    标签: python opengl pyglet opengl-compat


    【解决方案1】:

    只需在视图空间中围绕 y 轴将视图旋转 90 度:

    pgl.glMatrixMode(pgl.GL_MODELVIEW)
    pgl.glLoadIdentity
    pgl.glTranslatef(0, 0, -100) 
    pgl.glRotatef(-90, 0, 1, 0) # roatet 90 degrees around view space y axis
    

    注意,左右视图由pgl.glRotatef(-90, 0, 1, 0)pgl.glRotatef(90, 0, 1, 0)生成。
    顶视图和底视图是通过围绕视图空间 x 轴旋转实现的,分别是 pgl.glRotatef(90, 1, 0, 0) pgl.glRotatef(-90, 0, 1, 0)

    【讨论】:

      猜你喜欢
      • 2015-07-27
      • 1970-01-01
      • 2018-06-23
      • 2013-01-22
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多