Frage

Ich arbeite an einem OpenGL-Projekt und ich möchte zumindest ein wenig Licht in ihm. Ich versuche OpenGLs in der Beleuchtung während jetzt einen eingebauten zu verwenden, aber ich bin nicht mit viel Erfolg.

Modelle I laden ihre korrekten Normalen (berechnet durch Wings3D), die an Ecken in dieser Reihenfolge:

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

Modelle haben einige Material Anrufe vor der GL.Begin(BeginMode.Triangles) wie:

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

Hier sind die ersten drei Normalen des ersten Modells geladen (Glaubwürdigkeit check) 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)

Dies ist, wie ich einrichten Beleuchtung:

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

Objekte reagieren auf den Einstellungen rumgespielt zu sein, aber alle Gesichter leider die gleiche Helligkeit haben.

Bin ich etwas fehlt oder bin ich etwas falsch?

War es hilfreich?

Lösung

Einstellen das Umgebungslicht auf {1,1,1,1} bedeutet, dass alles vollständig beleuchtet werden, unabhängig von der Richtung aus dem Licht. Versuchen Sie, die Umgebungswerte senken (z 0.2f), so dass die diffuse Komponente kann eine gewisse Wirkung haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top