Вопрос
Когда объекты из списка вызовов пересекают ближнюю плоскость, я вижу мерцание... что делать?
Я использую OpenGL и SDL.
Да, это двойная буферизация.
Решение
Звучит так, будто у тебя з-драка.
«Z-борьба — это явление в 3D-рендеринге, которое возникает, когда два или более примитивов имеют одинаковые значения в z-буфере, и особенно распространено среди копланарных полигонов.Эффект приводит к тому, что псевдолупильные пиксели оказываются с цветом одного многоугольника или другого нетерминированного способа, варьируясь по мере анимированной сцены, в результате чего один многоугольник «выиграл» тест Z, затем другой и так далее. " (От Википедия)
Более подробную информацию о проблеме вы можете получить в Часто задаваемые вопросы по OpenGL.
glPolygonOffset может помочь, но вы также можете навлечь на себя проблемы.Том Форсайт дает хорошее объяснение в своей книге. Часто задаваемые вопросы Примечание:Там говорится о ZBIAS, но это всего лишь эквивалент DirectX.
Другие советы
Проблема заключалась в том, что моя функция вращения имела некоторые ошибки с плавающей запятой, которые испортили мою матрицу model_view.
Никто из вас не мог об этом догадаться, извините за трату вашего времени.
Хотя я не думаю, что перемещение ближней плоскости вообще следует рассматривать как решение какой-либо проблемы, обычно что-то не так, потому что openGL поддерживает пересечение полигонов с ближней плоскостью.
Попробуйте расположить ближнюю плоскость отсечения немного дальше:например, с помощью gluPerspective -> третий параметр zРядом http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/perspective.html
Ах, ты имел в виду около самолет.:)
Ну... еще одна вещь при рисовании многоугольников в одной плоскости - использовать glPolygonOffset
Из описания
glPolygonOffset is useful for rendering hidden-line images,
for applying decals to surfaces, and for rendering solids
with highlighted edges.