Матричные переводы с помощью нормалей OpenGL - PullRequest
0 голосов
/ 08 апреля 2011

Я работаю с геометрией в OpenGL, и сейчас я работаю с освещением.Я замечаю, что если я перевожу свою геометрию, нормали не следуют и, следовательно, бесполезны.

Как применить матрицу преобразования к геометрии и поддерживать нормали?

В настоящее время яЯ использую следующий код:

        GL.PushMatrix();

        if (Offset != null)
        {
            GL.Translate(Offset.X, Offset.Y, Offset.Z);
        }
        GL.Begin(BeginMode.Triangles);
        foreach (var face in Faces)
        {
            foreach (var i in face)
            {
                var point = Points[i - 1];
                GL.Normal3(point);
                GL.Vertex3(point);
            }
        }
        GL.End();
        GL.PopMatrix();

Когда я даю смещение геометрии, она не отображается должным образом (например, нормали не отображаются правильно.

Любая помощь будетотлично.

ps, я использую оболочку OpenTK, но обычный OpenGL транслируется напрямую через.

РЕДАКТИРОВАТЬ:

Хорошо, если я изменю код выше на следующий:

        GL.PushMatrix();

        //if (Offset != null)
        //{
        //    GL.Translate(Offset.X, Offset.Y, Offset.Z);
        //}
        GL.Begin(BeginMode.Triangles);
        foreach (var face in Faces)
        {
            foreach (var i in face)
            {
                var point = Points[i - 1];
                if (Offset == null)
                {
                    GL.Normal3(point);
                    GL.Vertex3(point);
                }
                else
                {
                    var pt = new Vector3d(Offset.X + point.X, Offset.Y + point.Y, Offset.Z + point.Z);
                    GL.Normal3(pt);
                    GL.Vertex3(pt);
                }
            }
        }
        GL.End();
        GL.PopMatrix();

все отрисовывается нормально.

Вот несколько скриншотов (соответствующих их коду)

Shading not working Shading working

1 Ответ

0 голосов
/ 08 апреля 2011

Я подозреваю, что у вас все в порядке, но вы неправильно обновляете свое положение и / или направление света.Ознакомьтесь с разделом FAQ по OpenGL, глава 18 , в частности 18.050.

...