Задать вопрос
OlegTar
@OlegTar
программист .NET, Javascript, Perl

Не работает z-order в opengl?

Пишу программу на C#, где есть некий кубик. Использую библиотеку opentk для opengl.

Проблема в том, что какую грань позже нарисую, та и будет видна пользователю. То есть, как-будто никакого z-order'а нету.


Вот куски кода:

/*определение переменных*/
int zNear = 1;
int zFar = 500;

float viewX = 61;
float viewY = 61;
float viewZ = 61;

...
/*настройка opengl*/
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

Matrix4 p = Matrix4.CreatePerspectiveFieldOfView((float)(viewAngle * Math.PI / 180), 1, zNear, zFar);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadMatrix(ref p);

Matrix4 look = Matrix4.LookAt(viewX, viewY, viewZ, 0, 0, 0, 0, 1, 0);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref look);

...
/*рисование кубика*/
GL.PushMatrix();
/*разные вращения кубика*/
GL.Translate(offset, offset, offset);
GL.Rotate(angle.X, Vector3.UnitX);
GL.Translate(-offset, -offset, -offset);

/*рисование граней*/
GL.Begin(BeginMode.Polygon);
GL.Vertex3(0, 0, 0);
GL.Vertex3(0, 0, w);
GL.Vertex3(w, 0, w);
GL.Vertex3(w, 0, 0);
GL.End();
//и т.д.

GL.PopMatrix();



Что неправильно? Гугление не помогло.


Решение нужно добавить:
GL.Enable(EnableCap.DepthTest);
  • Вопрос задан
  • 3170 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
На сколько помню, вам нужно копать в сторону GL.Enable(DepthTest);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы