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
: