Для тестирования предположим, что я нарисовал 2 чайника с glutSolidTeapot()
, например:
glColor3f(1.0f, 0.0f, 0.0f); // Red teapot
glutWireTeapot(1.0f);
glColor3f(0.0f, 1.0f, 0.0f); // Green teapot
glTranslatef(0.0f, 0.0f, 3.0f);
glutWireTeapot(1.0f);
Камера изначально расположена на (x,y,z) = (0.0f, 0.0f, 5.0f)
, а я смотрю на z = -1
(это позиция камеры # 1). Я уверен, что вы понимаете, что зеленый чайник - самый близкий объект к камере, а красный - позади него. Проблема в том, что красный нарисован так, как будто он перед зеленым, который выглядит неправильно:
Пример: http://i.stack.imgur.com/8WoEn.png
Теперь, если я тоже переместу камеру (x,y,z) = (0.0f, 0.0f, -5.0f)
и посмотрю на z = 1
(это позиция камеры # 2), я увижу красный чайник перед зеленым, это нормальное поведение. Красный - теперь объект, ближайший к камере, а зеленый - позади красного. Все хорошо.
Пример: http://i.stack.imgur.com/eJvPE.png
Я знаю, что это как-то связано с порядком, если я переключу код выше (сначала код зеленого чайника), то это исправит проблему в положении камеры № 1, но проблема теперь будет видна в положении камеры # 2.
Почему это происходит и как я могу удержать объекты за другими объектами от прорисовки спереди или вообще?