- if not self.init:
- self.InitGL()
- self.init = True
-
- self.OnDraw()
-
- def OnMouseDown(self, evt):
- self.CaptureMouse()
-
- def OnMouseUp(self, evt):
- self.ReleaseMouse()
-
- def OnMouseMotion(self, evt):
- if evt.Dragging() and evt.LeftIsDown():
- self.x, self.y = self.lastx, self.lasty
- self.x, self.y = evt.GetPosition()
- self.Refresh(False)
-
-
- class CubeCanvas(MyCanvasBase):
- def InitGL(self):
- # set viewing projection
- glcanvas.glMatrixMode(glcanvas.GL_PROJECTION);
- glcanvas.glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0);
-
- # position viewer
- glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW);
- glcanvas.glTranslatef(0.0, 0.0, -2.0);
-
- # position object
- glcanvas.glRotatef(self.y, 1.0, 0.0, 0.0);
- glcanvas.glRotatef(self.x, 0.0, 1.0, 0.0);
-
- glcanvas.glEnable(glcanvas.GL_DEPTH_TEST);
- glcanvas.glEnable(glcanvas.GL_LIGHTING);
- glcanvas.glEnable(glcanvas.GL_LIGHT0);
-
-
- def OnDraw(self):
- # clear color and depth buffers
- glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT)
-
- # draw six faces of a cube
- glcanvas.glBegin(glcanvas.GL_QUADS)
- glcanvas.glNormal3f( 0.0, 0.0, 1.0)
- glcanvas.glVertex3f( 0.5, 0.5, 0.5)
- glcanvas.glVertex3f(-0.5, 0.5, 0.5)
- glcanvas.glVertex3f(-0.5,-0.5, 0.5)
- glcanvas.glVertex3f( 0.5,-0.5, 0.5)
-
- glcanvas.glNormal3f( 0.0, 0.0,-1.0)
- glcanvas.glVertex3f(-0.5,-0.5,-0.5)
- glcanvas.glVertex3f(-0.5, 0.5,-0.5)
- glcanvas.glVertex3f( 0.5, 0.5,-0.5)
- glcanvas.glVertex3f( 0.5,-0.5,-0.5)
-
- glcanvas.glNormal3f( 0.0, 1.0, 0.0)
- glcanvas.glVertex3f( 0.5, 0.5, 0.5)
- glcanvas.glVertex3f( 0.5, 0.5,-0.5)
- glcanvas.glVertex3f(-0.5, 0.5,-0.5)
- glcanvas.glVertex3f(-0.5, 0.5, 0.5)
-
- glcanvas.glNormal3f( 0.0,-1.0, 0.0)
- glcanvas.glVertex3f(-0.5,-0.5,-0.5)
- glcanvas.glVertex3f( 0.5,-0.5,-0.5)
- glcanvas.glVertex3f( 0.5,-0.5, 0.5)
- glcanvas.glVertex3f(-0.5,-0.5, 0.5)
-
- glcanvas.glNormal3f( 1.0, 0.0, 0.0)
- glcanvas.glVertex3f( 0.5, 0.5, 0.5)
- glcanvas.glVertex3f( 0.5,-0.5, 0.5)
- glcanvas.glVertex3f( 0.5,-0.5,-0.5)
- glcanvas.glVertex3f( 0.5, 0.5,-0.5)
-
- glcanvas.glNormal3f(-1.0, 0.0, 0.0)
- glcanvas.glVertex3f(-0.5,-0.5,-0.5)
- glcanvas.glVertex3f(-0.5,-0.5, 0.5)
- glcanvas.glVertex3f(-0.5, 0.5, 0.5)
- glcanvas.glVertex3f(-0.5, 0.5,-0.5)
- glcanvas.glEnd()
-
- glcanvas.glRotatef((self.lasty - self.y)/100., 1.0, 0.0, 0.0);
- glcanvas.glRotatef((self.lastx - self.x)/100., 0.0, 1.0, 0.0);
-
- self.SwapBuffers()
-
-
- class ConeCanvas(MyCanvasBase):
- def InitGL( self ):
- glcanvas.glMatrixMode(glcanvas.GL_PROJECTION);
- # camera frustrum setup
- glcanvas.glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0);
- glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_AMBIENT, [0.2, 0.2, 0.2, 1.0])
- glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0])
- glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_SPECULAR, [1.0, 0.0, 1.0, 1.0])
- glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_SHININESS, 50.0)
- glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_AMBIENT, [0.0, 1.0, 0.0, 1.0])
- glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0])
- glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_SPECULAR, [1.0, 1.0, 1.0, 1.0])
- glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_POSITION, [1.0, 1.0, 1.0, 0.0]);
- glcanvas.glLightModel(glcanvas.GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0])
- glcanvas.glEnable(glcanvas.GL_LIGHTING)
- glcanvas.glEnable(glcanvas.GL_LIGHT0)
- glcanvas.glDepthFunc(glcanvas.GL_LESS)
- glcanvas.glEnable(glcanvas.GL_DEPTH_TEST)
- glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT)
- # position viewer
- glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW);
-
-
- def OnDraw(self):
- # clear color and depth buffers
- glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT);
- # use a fresh transformation matrix
- glcanvas.glPushMatrix()
- # position object
- glcanvas.glTranslate(0.0, 0.0, -2.0);
- glcanvas.glRotate(30.0, 1.0, 0.0, 0.0);
- glcanvas.glRotate(30.0, 0.0, 1.0, 0.0);
-
- glcanvas.glTranslate(0, -1, 0)
- glcanvas.glRotate(250, 1, 0, 0)
- glcanvas.glutSolidCone(0.5, 1, 30, 5)
- glcanvas.glPopMatrix()
- glcanvas.glRotatef((self.lasty - self.y)/100., 0.0, 0.0, 1.0);
- glcanvas.glRotatef(0.0, (self.lastx - self.x)/100., 1.0, 0.0);
- # push into visible buffer
- self.SwapBuffers()