2010-12-13 8 views
3

私はOpenGLプロジェクトに取り組んでいます。少なくとも、少し明るくしたいです。 私は今、照明で構築されたOpenGLをしばらく使用しようとしていますが、私は大成功はしていません。私はその順序で頂点に添付(Wings3Dで計算)、正しい法線を持つロードOpenGL法線は機能しませんか?

モデル:

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

モデルのようなGL.Begin(BeginMode.Triangles)前にいくつかのMaterial呼び出しています:ここで

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); 

をしています最初にロードされたモデルの3つの法線(信頼性チェック)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コンポーネントが何らかの効果を持つようにしてください。

関連する問題