
Hi, These days I got the wxHaskell-OpenGL thing running. Tonight I tried for several hours to geht the "lights on" on in my very simple example. I just wanted a lighted Szene where you can see the depth of the objects but some things irritates me. I converted the lighting-depth-commands from the penguin sample of the wxgtk source to my haskell stuff. Just a few lines... void TestGLCanvas::InitGL(void) { GLfloat light0_pos[4] = { -50.0, 50.0, 0.0, 0.0 }; GLfloat light0_color[4] = { .6, .6, .6, 1.0 }; /* white light */ GLfloat light1_pos[4] = { 50.0, 50.0, 0.0, 0.0 }; GLfloat light1_color[4] = { .4, .4, 1, 1.0 }; /* cold blue light */ /* remove back faces */ glDisable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); /* speedups */ glEnable(GL_DITHER); glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); /* light */ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color); glLightfv(GL_LIGHT1, GL_POSITION, light1_pos); glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_color); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } In the HOpenGL Package (not the hOpenGL that comes with ghc!!) exists the command enable DepthTest I do not find a command like this in the ghc-opengl source. Is there one? Does it matter in what order I give the lightcommands? Or isn't it important when I give the "light (...) $= Enable" command at first. I attach my source and a pick of the output. Please have a look, I hope anyone with more experience find the mistake faster than me (Just ignore the wx-commands..). I don't want to spend another night experimenting with this. Many thanks, Cheers Patrick module GLStuff where import Graphics.Rendering.OpenGL.GL as GL import Graphics.Rendering.OpenGL.GLU as GLU import Graphics.UI.WX as WX import Graphics.UI.WXCore as WXC import Graphics.UI.GLUT as GLUT glDisplay :: GLCanvas a -> WX.DC() -> WX.Rect -> [WX.Rect] -> IO () glDisplay glWin _ _ _ = do glCanvasSetCurrent glWin clearColor $= (Color4 0.0 0.0 0.0 (1.0:: GLfloat)) clear [ColorBuffer,DepthBuffer] GL.color (Color4 0.8 0.5 0.0 (1.0:: GLfloat)) preservingMatrix $ do rotate 5 (Vector3 0.0 1.0 (0.0::GLfloat)) GLUT.renderObject Solid (Sphere' 0.1 20 20) GL.color (Color4 0.0 0.1 0.8 (1.0:: GLfloat)) rotate 10 (Vector3 1.0 0.0 (0.0::GLfloat)) translate (Vector3 0.5 0.0 (-0.1::GLfloat)) GLUT.renderObject Solid (Cube 0.5) GL.flush glCanvasSwapBuffers glWin glInit :: IO () glInit = do clearColor $= (Color4 0.0 0.0 0.0 (1.0:: GLfloat)) dither $= Enabled shadeModel $= Smooth hint PerspectiveCorrection $= Fastest hint PolygonSmooth $= Fastest GL.position (Light 0) $= (Vertex4 (-51.0) 51.0 (-2.0) 0.0) diffuse (Light 0) $= Color4 0.6 0.6 0.6 1.0 GL.position (Light 1) $= (Vertex4 51.0 51.0 (-2.0) 0.0) diffuse (Light 1) $= Color4 0.4 0.4 1.0 1.0 light (Light 0) $= Enabled light (Light 1) $= Enabled lighting $= Enabled colorMaterial $= Just (FrontAndBack, AmbientAndDiffuse) matrixMode $= Projection GLU.perspective 60.0 1 1 20 GLU.lookAt (Vertex3 0.0 0.0 (-2)) (Vertex3 0.0 0.0 0.0) (Vector3 0.0 1.0 0.0) matrixMode $= Modelview 0