Когда преобразовывать касательное пространство в мировое, кроме как с помощью карты нормалей? - PullRequest
0 голосов
/ 11 июня 2019

Я изучаю OpenGL из https://learnopengl.com/. Я знаю, как преобразовать нормаль (взятую из карты нормалей) из касательного пространства в мировое пространство и почему это необходимо в Учебное пособие по нормальному отображению .

Но в учебнике Diffuse Irradiance он снова преобразует вектор из касательного пространства в мировое!

float sampleDelta = 0.025;
float nrSamples = 0.0; 
for(float phi = 0.0; phi < 2.0 * PI; phi += sampleDelta)
{
    for(float theta = 0.0; theta < 0.5 * PI; theta += sampleDelta)
    {
        // spherical to cartesian (in tangent space)
        vec3 tangentSample = vec3(sin(theta) * cos(phi),  sin(theta) * sin(phi), cos(theta));
        // tangent space to world
        vec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * N; 

        irradiance += texture(environmentMap, sampleVec).rgb * cos(theta) * sin(theta);
        nrSamples++;
    }
}

В настоящее время я не знаю, почему нам нужно преобразовать вектор tangentSample.

Кроме того, в учебнике Specular IBL он также преобразует sampleVector из касательного пространства в мировое пространство и в ImportanceSampleGGX!

Кажется, нам нужно преобразовать вектор из касательного пространства в мировое пространство, когда мы получаем его из сферических координат в декартовые координаты?

1 Ответ

2 голосов
/ 11 июня 2019
  • Изначально мы начинаем с вектора, используя сферическую систему координат, представляющую направление, направленное в сторону от поверхности.
  • Текстура, которую вы хотите отобрать, - это карта окружающей среды, которая является декартовым вектором в мире.координаты (поскольку изображение в карте куба расположено так, что вверх / вперед / влево и т. д. соответствуют эквивалентным направлениям в мире)
  • Нет никакого осмысленного способа сравнить сферический вектор координат с декартовым вектором,поэтому вам нужно преобразовать его в декартовы координаты, что оставляет вас с вектором в касательном пространстве
  • Этот трехмерный вектор все еще не находится в том же пространстве, что и кубическая карта (что означает, что выборка с ним, вероятно, вернет пиксели изсовершенно неверное направление) поэтому нам нужно преобразовать его еще раз, чтобы, наконец, перевести его в мировое пространство, чтобы мы могли взять образец с карты

Основной ответ на ваш вопрос состоит в том, что касательное пространство и мировое пространствоне может сравниться и дать значимый результат, поэтомуесли у вас есть вектор в касательном пространстве, вы должны преобразовать его

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