можно повернуть точку пересечения ориентации камеры, как это:
__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;
пространство Глаз в Raytracing = (0,0, 0,0, 0,0) центр в положении камеры/глаз/датчика. Я обновил свой ответ с помощью более продвинутой функции. –
Приносим извинения перед вашими ответами, не относящимися к вопросу, которые я понял сегодня. Я думаю, что легко скрывать пересечение в мировом пространстве «пространства глаз», кстати, что я не настаиваю на необходимости существовать. Просто умножьте эту точку на обратную матрицу камеры, которую вы передали программе ray-gen. –