Как создавать быстрые и легкие независимые от сцены тени без шейдеров в OpenGL

Пусть у меня есть сетка (например, сфера) в центре комнаты, полная кубов и одного источника света. Как я могу быстро и легко отбрасывать тени в OpenGL, используя только "стандартные" (фиксированные) функции? Примечание: результат должен также содержать тени куба и сферы.

3 ответа

Решение

Если вы можете создать силуэт сферы, вы можете использовать теневые объемы. Аппаратное обеспечение nVidia также поддерживает фиксированное отображение теней функций.

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

Если вы проецируетесь на одну плоскость, может быть проще просто спроецировать объект на плоскость.

Там нет быстрого и легкого пути. Есть много разных техник, каждый из которых имеет свои плюсы и минусы. Вы можете посмотреть на проект, который я размещаю на github, который использует очень простой код для создания тени, используя технику теневого тома (http://iuiz.github.com/VolumeShadow/). Тем не менее, он написан на Java, но не должно быть трудно перенести его на любой другой язык.

Наиболее важные способы создания теней - это так называемый метод "наложения теней", в котором вы визуализируете свою сцену (с камерой у источника света, направленной на каждый объект отбрасывания теней) в текстуру. И второй метод - это метод теневого волюма (известный благодаря Doom3).

Я нашел один способ, используя StencilBuffers. Некоторое время я был немного сбит с толку, и в конце концов мне пришла в голову мысль - с этим самым сложным будет цикл по каждому источнику света и проецирование всех объектов сцены. Этот выглядит более симпатично, чем затенение текстуры, и работает быстрее, чем объемные тени. здесь и здесь есть некоторые ресурсы, которые помогли мне понять шаг умножения матриц (это немного смутило меня, когда я просматривал демо-версию dino). На мой взгляд, этот метод наиболее прост для понимания и использования. Остается решить только один вопрос: как рассчитать матрицу умножения?

Хотя этот метод можно немного изменить, используя текстуры, как показано здесь.

Спасибо всем! знак равно

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