2016-11-16 17 views
1

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

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

ответ

1

можно повернуть точку пересечения ориентации камеры, как это:

__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; 
-1

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

бедных английский, мои извиняется :)

+0

пространство Глаз в Raytracing = (0,0, 0,0, 0,0) центр в положении камеры/глаз/датчика. Я обновил свой ответ с помощью более продвинутой функции. –

+0

Приносим извинения перед вашими ответами, не относящимися к вопросу, которые я понял сегодня. Я думаю, что легко скрывать пересечение в мировом пространстве «пространства глаз», кстати, что я не настаиваю на необходимости существовать. Просто умножьте эту точку на обратную матрицу камеры, которую вы передали программе ray-gen. –