X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c4ef95daf6eeae5e6a7d4e591bb96c44f8588249..30e24d9dd5a5abf1c9a375ea259eb239b122b7f7:/wxPython/demo/GLCanvas.py diff --git a/wxPython/demo/GLCanvas.py b/wxPython/demo/GLCanvas.py index 5601305da8..efffd3d9b5 100644 --- a/wxPython/demo/GLCanvas.py +++ b/wxPython/demo/GLCanvas.py @@ -1,5 +1,6 @@ import wx +import sys try: from wx import glcanvas @@ -80,6 +81,7 @@ class MyCanvasBase(glcanvas.GLCanvas): # initial mouse position self.lastx = self.x = 30 self.lasty = self.y = 30 + self.size = None self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_PAINT, self.OnPaint) @@ -93,7 +95,7 @@ class MyCanvasBase(glcanvas.GLCanvas): def OnSize(self, event): - size = self.GetClientSize() + size = self.size = self.GetClientSize() if self.GetContext(): self.SetCurrent() glViewport(0, 0, size.width, size.height) @@ -111,6 +113,7 @@ class MyCanvasBase(glcanvas.GLCanvas): def OnMouseDown(self, evt): self.CaptureMouse() + self.x, self.y = self.lastx, self.lasty = evt.GetPosition() def OnMouseUp(self, evt): @@ -119,7 +122,7 @@ class MyCanvasBase(glcanvas.GLCanvas): def OnMouseMotion(self, evt): if evt.Dragging() and evt.LeftIsDown(): - self.x, self.y = self.lastx, self.lasty + self.lastx, self.lasty = self.x, self.y self.x, self.y = evt.GetPosition() self.Refresh(False) @@ -129,25 +132,25 @@ class MyCanvasBase(glcanvas.GLCanvas): class CubeCanvas(MyCanvasBase): def InitGL(self): # set viewing projection - glMatrixMode(GL_PROJECTION); - glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); + glMatrixMode(GL_PROJECTION) + glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0) # position viewer - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -2.0); + glMatrixMode(GL_MODELVIEW) + glTranslatef(0.0, 0.0, -2.0) # position object - glRotatef(self.y, 1.0, 0.0, 0.0); - glRotatef(self.x, 0.0, 1.0, 0.0); + glRotatef(self.y, 1.0, 0.0, 0.0) + glRotatef(self.x, 0.0, 1.0, 0.0) - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); + glEnable(GL_DEPTH_TEST) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) def OnDraw(self): # clear color and depth buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # draw six faces of a cube glBegin(GL_QUADS) @@ -188,8 +191,15 @@ class CubeCanvas(MyCanvasBase): glVertex3f(-0.5, 0.5,-0.5) glEnd() - glRotatef((self.lasty - self.y)/100., 1.0, 0.0, 0.0); - glRotatef((self.lastx - self.x)/100., 0.0, 1.0, 0.0); + if self.size is None: + self.size = self.GetClientSize() + w, h = self.size + w = max(w, 1.0) + h = max(h, 1.0) + xScale = 180.0 / w + yScale = 180.0 / h + glRotatef((self.y - self.lasty) * yScale, 1.0, 0.0, 0.0); + glRotatef((self.x - self.lastx) * xScale, 0.0, 1.0, 0.0); self.SwapBuffers() @@ -199,9 +209,9 @@ class CubeCanvas(MyCanvasBase): class ConeCanvas(MyCanvasBase): def InitGL( self ): - glMatrixMode(GL_PROJECTION); + glMatrixMode(GL_PROJECTION) # camera frustrum setup - glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); + glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0) glMaterial(GL_FRONT, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) glMaterial(GL_FRONT, GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0]) glMaterial(GL_FRONT, GL_SPECULAR, [1.0, 0.0, 1.0, 1.0]) @@ -209,33 +219,37 @@ class ConeCanvas(MyCanvasBase): glLight(GL_LIGHT0, GL_AMBIENT, [0.0, 1.0, 0.0, 1.0]) glLight(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLight(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) - glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0]); - glLightModel(GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) + glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0]) + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # position viewer - glMatrixMode(GL_MODELVIEW); + glMatrixMode(GL_MODELVIEW) + # position viewer + glTranslatef(0.0, 0.0, -2.0); + # + glutInit(sys.argv) def OnDraw(self): # clear color and depth buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # use a fresh transformation matrix glPushMatrix() # position object - glTranslate(0.0, 0.0, -2.0); - glRotate(30.0, 1.0, 0.0, 0.0); - glRotate(30.0, 0.0, 1.0, 0.0); + #glTranslate(0.0, 0.0, -2.0) + glRotate(30.0, 1.0, 0.0, 0.0) + glRotate(30.0, 0.0, 1.0, 0.0) glTranslate(0, -1, 0) glRotate(250, 1, 0, 0) glutSolidCone(0.5, 1, 30, 5) glPopMatrix() - glRotatef((self.lasty - self.y)/100., 0.0, 0.0, 1.0); - glRotatef(0.0, (self.lastx - self.x)/100., 1.0, 0.0); + glRotatef((self.y - self.lasty), 0.0, 0.0, 1.0); + glRotatef((self.x - self.lastx), 1.0, 0.0, 0.0); # push into visible buffer self.SwapBuffers()