У меня есть сцена, встроенная в OpenGL. Когда мой свет находится в центре комнаты, снаружи комнаты горит. Есть ли какой-нибудь простой способ заставить OpenGl остановить освещение на вершинах, или это потребует сложных вычислений. Вот фотографии моей дрянной, быстрой сцены, показывающей освещение, как оно есть, когда задаю этот вопрос:
По сути, вы хотите, чтобы стены комнаты отбрасывали тень. Это то, что вы хотите, когда хотите, чтобы внешняя часть объекта не горела.
Затенение в графике, как правило, довольно сложная проблема. Есть много хороших и много быстрых решений, но не оба — любое решение будет компромиссом между ними. SIGGRAPH это полный из все виды из документы от действительно умных людей, пытающихся решить эту проблему.
Если вы хотите что-то быстрое и грязное, отображение теней не очень сложно (по крайней мере, простой вид), но это неточно. Вы увидите артефакты вдоль пересечений вашего объекта и стен, например. Для точности, трафаретные тени будет работать, но у вас будут жесткие тени.
Одним из решений здесь, вероятно, было бы создание геометрии таким образом, чтобы объекты не выступали за пределы внешних стен (или не разделяли их на внутренние / внешние части). Затем визуализируйте интерьер и экстерьер при помощи разных источников света.
У вас не было бы проблемы, если бы все бросало тень на все.
Если источники света статичны, вы можете рассмотреть возможность предварительного расчета (запекания) освещения (вместе с тенями). Вы можете сделать это во многих 3D-пакетах, и с точки зрения программирования это может быть самым простым решением.
Если бы у вас было общее решение для рендеринга теней в реальном времени для каждого источника света, это также решило бы вашу проблему, но это сложная задача, и это также может быть неоптимальным решением, если вы хотите поддерживать хороший кадр — ставки.
Если вы хотите узнать о рендеринге теней в реальном времени, я рекомендую взглянуть на карты теней — они обычно являются решением, используемым в большинстве игр сегодня. Обратите внимание, что для точечного источника света вам потребуется визуализировать карту теней для 6 сторон карты куба. В практических целях вы должны подумать о том, какие источники света действительно должны отбрасывать тени, и делать какой-то компромисс.