[PyOpenGL-Users] OpenGL Context and Lighting
Brought to you by:
mcfletch
From: Griffin, J. L <Jos...@us...> - 2003-09-22 20:50:26
|
Hi, I'm stumped. I'm trying to setup a Boa app with OpenGL Context using the wxcontext class. I'm following the instructions in Example 5-1 in the Red Book (Version 1.1). I would appreicate some pointers. The sphere is not reflecting light as it should. I've eliminated surface normals as a potential problem by calling glutSolidSphere. Thanks, Joseph #Code Starts Here #Boa:Frame:wxFrame1 from wxPython.wx import * from OpenGLContext import wxcontext from OpenGL import * from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from Numeric import * def create(parent): return wxFrame1(parent) [wxID_WXFRAME1, wxID_WXFRAME1SPLITTERWINDOW1, ] = map(lambda _init_ctrls: wxNewId(), range(2)) class DrawProperties: """Holds Properties for OpenGL parameters""" def __init__(self): """Initialization Method""" class DrawContext(wxcontext.wxContext): """OpenGL Context Class""" def __init__(self,parent,objProps=None): """Initialization Method""" wxcontext.wxContext.__init__(self,parent) self.objProps = objProps def DoInit(self): """Init Method""" glClearColor(0.0,0.0,0.0,0.0) mat_specular = array([1.0,1.0,1.0,1.0]) mat_shininess = array([50.0]) glShadeModel(GL_SMOOTH) glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular) glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess) light_model_ambient = array([0.2,0.2,0.2,1.0]) glLightModelfv(GL_LIGHT_MODEL_AMBIENT,light_model_ambient) glLightfv(GL_LIGHT0,GL_AMBIENT,light_model_ambient) glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); def Render( self, mode = None): """This method is call repeatly""" glTranslated (0,0,0); gluLookAt(2.0,2.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) #drawcube.drawCube() glutSolidSphere(1.0,20,16); glFlush() def Viewpoint(self,mode=None): """Overloaded Method""" glLoadIdentity() # calculate a 3D perspective view glFrustum(-0.5, 0.5, -0.5, 0.5, .5, 5.0); def Lights(self,mode=None): """pass""" class wxFrame1(wxFrame): def _init_ctrls(self, prnt): # generated method, don't edit wxFrame.__init__(self, id=wxID_WXFRAME1, name='', parent=prnt, pos=wxPoint(444, 241), size=wxSize(502, 411), style=wxDEFAULT_FRAME_STYLE, title='wxFrame1') self.SetClientSize(wxSize(494, 376)) self.splitterWindow1 = wxSplitterWindow(id=wxID_WXFRAME1SPLITTERWINDOW1, name='splitterWindow1', parent=self, point=wxPoint(296, 144), size=wxSize(376, 280), style=wxSP_3D) def init_context(self): """Context Initialization Code """ self.objProps = DrawProperties() self.p1 = wxWindow(self.splitterWindow1, -1) self.DrawContext = DrawContext(self.splitterWindow1,objProps=self.objProps) self.splitterWindow1.SetMinimumPaneSize(0) self.splitterWindow1.SplitVertically(self.p1, self.DrawContext, 100) def init_SetProps(self): """Initilize OpenGL Props""" def __init__(self, parent): self._init_ctrls(parent) self.init_context() self.init_SetProps() def OnSlider1Scroll(self, event): #self.staticText2.SetLabel(str(self.slider1.GetValue())) event.Skip() class BoaApp(wxApp): def OnInit(self): wxInitAllImageHandlers() self.main = create(None) # needed when running from Boa under Windows 9X self.SetTopWindow(self.main) self.main.Show();self.main.Hide();self.main.Show() return True def main(): application = BoaApp(0) application.MainLoop() if __name__ == '__main__': main() #Code Ends Here |