3D рендеринг - как называется эта проблема?

Надеюсь, разумный вопрос на этот раз...

Посмотрите на картинку, как у верхней половины текстуры выглядят нормально, но затем у нижней половины (после того, как она немного повернулась) текстура распадается, и вы можете увидеть внутреннюю часть фигуры? полигоны исчезли?

Как называется эта проблема? Мне нужно знать, чтобы я знал, что искать, когда это исправить!

Кстати, я делаю это в Papervision. Если вы случайно знаете решение (или если это возможно), я дам вам разрешение чувствовать себя очень хорошо, если вы можете указать мне правильное направление.

Как это называется? http://i40.tinypic.com/6f40f4.jpg

Спасибо, куча!

5 ответов

Решение

Мы назвали это "z-fight", но более распространенным термином являются проблемы z-порядка или z-буфера.

Я постараюсь объяснить проблему без диаграмм 1-го.

3D рендеры работают, рисуя многоугольники сзади вперед. Это делается путем назначения каждого многоугольника одной из дискретных позиций. Это работает для большинства сцен.

Вы получаете проблему, когда недостаточно слотов, чтобы иметь возможность решить, какой полигон находится перед другим.

Чтобы решить это - это будет зависеть от вашего приложения, но есть ряд вещей, которые должны быть общими для всех:

  1. Убедитесь, что ограничивающая рамка мира настолько мала, насколько это возможно.
  2. Увеличьте глубину цвета вашего дисплея. И OpenGL, и Direct3D могут привязать количество слотов z к разрешению дисплея.
  3. Увеличьте число / уменьшите размер ваших треугольников. Меньшие треугольники будут меньше затронуты этим - но снизят производительность, так как есть еще что рисовать.

Если вы работаете в Windows, вы должны установить на рабочем столе самое высокое цветовое разрешение. Ваше приложение может выбрать это как использование по умолчанию.

Можете ли вы переключиться между рендерингом OpenGL и Direct3D? Если это так, то попробуйте оба, один может дать лучшие результаты, чем другой.

Кажется, это проблема с Z-буфером. Я не знаком с тем, что вы там используете, поэтому, вероятно, не могу помочь.

Для меня это больше похоже на наклейку, которая пошла не так, как Z-бой. Z-борьба обычно имеет зазубренные края. Матрица проекции для этого конкретного треугольника может быть неправильной (учитывая, что масштаб проблемы зависит от положения камеры).

Это называется линейным отображением, это способ отображения текстур на многоугольнике. Но этот метод не исправлен в перспективе, что приводит к повреждению текстур под крайними углами.

Линейное отображениеПерспектива Исправлено наложение текстуры

Линейное наложение текстуры (вверх) и перспективное исправление наложения текстуры (вниз).

Единственный обходной путь - это добавить больше полигонов, что приведет к снижению производительности (см. Эту демонстрацию).

У вас есть несколько наложенных текстур и / или полигонов?

Отсюда похоже на проблему, которую вы получаете, когда у вас есть точно совпадающие поверхности, но ошибки с плавающей точкой означают, что вы не всегда видите правильную.

Другие вопросы по тегам