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

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

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

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

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

What is this called?

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

Ответы [ 5 ]

8 голосов
/ 22 апреля 2009

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

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

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

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

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

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

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

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

1 голос
/ 22 апреля 2009

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

1 голос
/ 22 апреля 2009

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

Linear Mapping Perspective Corrected texture mapping

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

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

1 голос
/ 22 апреля 2009

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

0 голосов
/ 22 апреля 2009

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

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

...