Как создавать быстрые и легкие независимые от сцены тени без шейдеров в OpenGL - PullRequest
6 голосов
/ 21 ноября 2010

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

Ответы [ 3 ]

4 голосов
/ 21 ноября 2010

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

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

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

2 голосов
/ 21 ноября 2010

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

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

1 голос
/ 21 ноября 2010

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

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

Спасибо всем!=)

...