2010-12-13 60 views
3

我正在開發一個OpenGL項目,我至少需要一點點燈光。 我試圖使用OpenGLs內置照明一段時間,但我沒有太大的成功。OpenGL Normals不工作?

模型我加載有連接到頂點的順序它們的正確法線(由Wings3D計算):

loop all faces { 
    GL.Normal3(...); 
    GL.TexCoord2(...); 
    GL.Vertex3(...); 
    ... (two more in same order, faces are all triangles) 
} 

模式確實有一些Material調用之前的GL.Begin(BeginMode.Triangles),如:

GL.Material(MaterialFace.FrontAndBack, MaterialParameter.AmbientAndDiffuse, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }); 
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }); 
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Shininess, 99.0f); 

這裏有第一個模型的前三個法線加載(可信性檢查)n(x,y,z):

0(0.6331236, 0.428246439, 0.6447942) 
1(0.507037938, -0.6987222, 0.504677951) 
2(-0.768829644, -0.494915247, 0.404919624) 

這是我設置照明:

GL.Enable(EnableCap.DepthTest); 
GL.Enable(EnableCap.Blend); 
GL.Enable(EnableCap.ColorMaterial); 
GL.Enable(EnableCap.Texture2D); 
GL.Enable(EnableCap.Normalize); 

GL.ShadeModel(ShadingModel.Flat); 

GL.Enable(EnableCap.Lighting); 
GL.Enable(EnableCap.Light0); 
GL.Light(LightName.Light0, LightParameter.Position, new float[] { 0.0f, 1000.0f, 0.0f, 1.0f }); 
GL.Light(LightName.Light0, LightParameter.Ambient, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }); 
GL.Light(LightName.Light0, LightParameter.Specular, new float[] { 0.0f, 0.0f, 0.0f, 0.0f }); 
GL.Light(LightName.Light0, LightParameter.Diffuse, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }); 
GL.Light(LightName.Light0, LightParameter.SpotExponent, 0.0f); 

對象上正在玩耍了設置反應,但都面臨可悲的是具有相同的亮度。

我錯過了什麼,或者我是否做錯了什麼?

回答

3

將環境光設置爲{1,1,1,1}意味着無論光線方向如何,所有物體都會完全點亮。嘗試設置較低的Ambient值(例如0.2f),以便Diffuse組件可以產生一些效果。