Вопрос новичка OpenGL: что такое отбор спины? - PullRequest
15 голосов
/ 29 августа 2010

Что такое задняя поверхность в OpenGL?Можете ли вы привести мой конкретный пример, например, с одним треугольником?

Ответы [ 4 ]

16 голосов
/ 29 августа 2010

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

12 голосов
/ 29 августа 2010

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

Википедия определяет это как:

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

Другие системы используют нормаль лица и делают точечное произведение с направлением обзора.

Это относительно быстрый способ решить, рисовать треугольник или нет.Рассмотрим куб.В любое время 3 стороны куба будут направлены в сторону от пользователя и, следовательно, не видны.Даже если бы они были нарисованы, они были бы скрыты тремя "передними" сторонами.Выполняя отбраковку лицевой стороны, вы уменьшаете число нарисованных треугольников с 12 до 6 (по 2 на каждую сторону).

Отбраковка задней грани лучше всего работает с закрытыми «твердыми» объектами, такими как кубы, сферы, стены.

В некоторых системах этого нет, поскольку они считают грани двусторонними и, следовательно, видимыми в любом направлении.

2 голосов
/ 30 августа 2010

Это только метод оптимизации.

Когда вы смотрите на закрытый объект, скажем, куб, вы видите только половину граней: граней, которые направлены к вам (или, по крайней мере, граней, которыене направлены к вам, всегда закрыты другим лицом, указывающим на вас)

Если вы пропустите рисование всех этих обращенных назад граней, это будет иметь два последствия: - время рендеринга будет в два раза лучше (в среднем)- окончательный рендер не изменится (так как другая, передняя грань будет нарисована поверх «отбракованной»)

Таким образом, вы в основном получаете x2 perf бесплатно.

InЧтобы узнать, является ли треугольник лицевой или обратной стороной, вы берете v0-v1 и v0-v2, составляете перекрестное произведение.Это дает вам нормальное лицо.Если этот вектор направлен к вам (точка (нормальная, viewVector) <0), нарисуйте. </p>

1 голос
/ 29 августа 2010

Треугольники имеют свои координаты, указанные в определенном порядке, по часовой стрелке IIRC.

Когда графический движок смотрит на треугольник с определенного направления, а координаты идут против часовой стрелки, он знает, что он смотрит на обратную сторону треугольника через объект. Поскольку передняя сторона объекта закрывает треугольник, его не нужно рисовать.

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