Точки пересечения глазного пространства Nvidia Optix

Как рассчитать координаты пересечения пространства глаза в программе OptiX?

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

2 ответа

Решение

Можно повернуть точку пересечения по ориентации камеры следующим образом:

__device__ void worldToEye(float3& pointInOut)
{
    const float3 Un = normalize(U);
    const float3 Vn = normalize(V);
    const float3 Wn = normalize(W);

    const float viewMat[3][3] = {{Un.x, Un.y, Un.z},
                                {Vn.x, Vn.y, Vn.z},
                                {Wn.x, Wn.y, Wn.z}};

    float point[3]  = {pointInOut.x, pointInOut.y, pointInOut.z};
    float result[3] = {0.0f, 0.0f, 0.0f};

    for (int i=0; i<3; ++i)
    {
        for (int j=0; j<3; ++j)
        {
            result[i] += viewMat[i][j] * point[j];
        }
    }

    pointInOut.x = result[0];
    pointInOut.z = result[1];
    pointInOut.y = result[2];
}

С вычисленной точкой ввода:

float3 hit_point = t_hit * ray.direction;
worldToEye(hit_point);
prd.result = hit_point;

Optix не имеет координат глаз. потому что он основан на трассировке лучей, а не растровых. Сначала вы должны спросить себя, что такое координация глаз. используется для создания шейдеров в растре. В основном для проверки глубины, отсечения и т. Д. Но все это не относится к шейдерам трассировки лучей. Когда луч отбрасывается из точки в мировой координате с определенным направлением, все следующие исполнения выполняются в мировой координате. Отсечения нет, потому что все лучи в основном обозначают определенные пиксели. и Нет проверки глубины, потому что все лучи обнаружены в программе пересечения, только самая близкая точка попадания будет доставлена ​​к закрытой программе попадания. Итак, в заключение вы должны отказаться от некоторых механизмов или трубопроводов, используемых в шейдерах на основе растров, и приобрести некоторые новые навыки, используемые в шейдерах на основе трассировки лучей.

плохой английский, мои извинения:)

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