代码之家  ›  专栏  ›  技术社区  ›  Stan S.

如何在opengl中通过在光标下画一个圆来考虑旋转来进行缩放?

  •  1
  • Stan S.  · 技术社区  · 7 年前

    glTranslatef . 我使用模板缓冲技术在0,0,0点绘制一个放大的圆。我正在尝试将圆缩放放在光标下的三维世界中的任何旋转位置。谢谢。

    def set_3d(self):
        """ Configure OpenGL to draw in 3d.
        """
        self.clear()
    
        width, height = self.get_size()
        glEnable(GL_DEPTH_TEST)
        viewport = self.get_viewport_size()
        glViewport(0, 0, max(1, viewport[0]), max(1, viewport[1]))
        glMatrixMode(GL_PROJECTION)
    
        glLoadIdentity()
        gluPerspective(30.0, width / float(height), 1, 1000.0)
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity() 
    
        ###############################
        #  code for zoom 
        ###############################
        offset=0
        flip = 1
        if self.fViewDistance_x_z > 0:
            glRotatef(180, 0,0,1)
            glRotatef(180, 1,0,0)
            offset = -135
            flip = -1
            gluLookAt(self.fViewDistance_x_z, 0, self.fViewDistance_x_z, 0,0,0,0,1,0)
        ###############################
    
        gluLookAt(0, 0, 0, 
            math.sin(math.radians(self.angle+offset)), 
            math.sin(math.radians(self.angleYUpDown*flip)), 
            math.cos(math.radians(self.angle+offset)) * -1, 
            0, 1, 0)
        glTranslatef(-self.position[0], -self.position[1], -self.position[2])
    
    
        glClear(GL_STENCIL_BUFFER_BIT);
    
        if self.fViewDistance_x_z > 0:
    
            glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    
            glClearColor(0, 0, 0, 0.0)
    
            glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE )
    
            glEnable( GL_STENCIL_TEST )
            glStencilFunc(GL_ALWAYS, 1, 1)
            glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE)
    
            glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE )
    
            glPushMatrix()
            glColor3f(2,2,2)
            self.s = self.changeCoordinates(self.x, self.y) 
            glTranslatef(0,0,2) # need to take rotation into consideration
            #glTranslatef(self.s[0][0],self.s[0][1],2)
    
            radius = 5
            quad = gluNewQuadric()
            gluDisk(quad, 0.0, radius, 64, 1)
            gluDeleteQuadric(quad)
            glPopMatrix()
    
            glStencilFunc( GL_EQUAL, 1, 1 )
            glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP )
    
        else:
            glClearColor(0.902, 0.902, 1, 0.0)
            glDisable(GL_STENCIL_TEST);
    

    here :

    0 回复  |  直到 7 年前
    推荐文章