Войти
ПрограммированиеФорумГрафика

Пару вопросов по ОпенГЛ (3 стр)

Страницы: 1 2 3 4 522 Следующая »
#30
17:43, 22 ноя. 2013

Делаю ShadowMap и все вроде понятно, кроме одного момента.. Нужно отрендерить сцену с позиции источника света, т.е. нужно как-то найти матрицу источника света. В этом собственно и проблема. Как это можно сделать?


#31
18:27, 22 ноя. 2013

Матрица источника света и матрица для рендера с позиции источника света - немного разные вещи. Но обе матрицы ищутся так же, как и для основной камеры

#32
18:53, 22 ноя. 2013

Допустим матрицу для рендера с позиции источника света я найду и у меня получится текстура с глубиной фрагментов, видимых с позиции источника света.
Как мне потом при рендере с позиции камеры узнать, что именно этот пиксель текстуры соответствует обрабатываемому фрагменту в шейдере? Нужно же будет обратно переводить всё в систему координат камеры, как это сделать?

#33
19:46, 22 ноя. 2013

ialexbr
Уроки Кренделя видел?

#34
20:32, 22 ноя. 2013

-Eugene-
Видел, но все равно не понимаю. Не просто так же попросил объяснить..

#35
22:30, 22 ноя. 2013

ialexbr
Я сам не помню точно. Нужно умножить координаты пикселя в мире на матрицу света (с которой рисовали) и матрицу сдвига (для перехода от "экранных" к текстурным координатам). А потом сравнить z координату в этом пространстве с z текстуры. Если больше - то в тени.

#36
0:18, 24 ноя. 2013

1) В Shadow Map нужно хранить текстуру для каждого источника света и обновлять ее для каждого динамического источника света при каждом кадре.
Соответственно вопрос: как оптимальнее всего построить рендер?

2) Заметил, что максимальный текстурный юнит - это GL_TEXTURE31. В моем текущем рендере каждая shadow map текстура для источника света соответствует своему текстурному юниту. Возник вопрос, а если источников света будет больше 31 (понимаю, что это сильно скажется на производительности, но все же), будут ли они работать?
Будет ли работать если все текстуры подключать к одному текстурному юниту, например, GL_TEXTURE0?

#37
0:25, 24 ноя. 2013

ialexbr
Невозможно будет наложить столько теней за один раз на один объект, но поскольку даже 30 теней будут дико тормозить, проблема надуманна.

#38
0:31, 24 ноя. 2013

-Eugene-
Почему невозможно? Если в шейдере фрагмент от источника света затенен, то не считать от этого источника света освещение и перейти к след. источнику света. Так можно можно добиться черных теней там, где вообще не попадает свет и более светлых теней, там где, к примеру, один источник света освещает тень, которую не освещают все остальные источники. Или я в чем-то ошибаюсь?

Правка: Про дико тормозить согласен, но если использовать DeferredShading?

#39
0:40, 24 ноя. 2013

ialexbr
Ты сам объяснил, почему. Слотов не хватит. Придётся рисовать в несколько проходов. Или использовать текстурные массивы. ДС значительно упростит логику, но не избавит от тормозов при таком количестве источников света.

#40
0:47, 24 ноя. 2013

-Eugene-
Понятно, спасибо.

Как же все таки грамотно делают логику рендера? (Не обязательно при таком количестве источников света)

Как же выводят тени при DS? (Ведь он для того и предназначен, чтоб использовать кучу источников света)

#41
0:54, 24 ноя. 2013

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

#42
1:03, 24 ноя. 2013

-Eugene-
Чувствую надо еще теорию читать и читать)

#43
19:39, 25 ноя. 2013

Дабы не создовать темы...
Читаю про Uniform'ы http://www.opengl.org/registry/specs/ARB/shader_objects.txt Но видимо с английским проблема, так как ясности не внесло.
Правильно ли я понял что после линковки программного объекта все значения юниформов сохраняются в программном объекте?
Например:

glUseProgram( id0 );
glUniform2fv( loc, 1, &value );
glUseProgram( id1 );
// setup uniform id1
// draw
glUseProgram( id0 );
// uniform at loc == value ?

#44
4:34, 26 ноя. 2013

ды

Страницы: 1 2 3 4 522 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.