首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nvidia Optix眼空间交点

Nvidia Optix眼空间交点
EN

Stack Overflow用户
提问于 2016-11-16 15:53:07
回答 2查看 333关注 0票数 1

如何在OptiX程序中计算眼睛空间相交坐标?

我的研究表明,只提供物体和世界坐标,但我不能相信没有办法获得眼睛的空间坐标。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-17 08:50:41

通过这样的摄像机方向旋转交点是可能的:

代码语言:javascript
复制
__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];
}

计算输入点:

代码语言:javascript
复制
float3 hit_point = t_hit * ray.direction;
worldToEye(hit_point);
prd.result = hit_point;
票数 1
EN

Stack Overflow用户

发布于 2017-05-23 11:59:34

奥普蒂克斯没有眼线。因为它是基于射线追踪而不是光栅。首先,你应该问问自己,你的眼睛是怎么一回事。用于基于光栅的着色器。基本用于深度测试、裁剪等,但所有这些都不是射线追踪着色器中的东西.当光线以一定的方向从世界上的某个点投射出来时,下面的执行都是在世界坐标中。没有剪辑,因为所有的射线基本上代表特定的像素。而且没有深度测试,因为所有射线都是在交叉程序中检测到的,只有最近的命中点才会传递给闭合命中程序。因此,总结起来,你应该放弃一些用于栅格着色的机制或管道,并获得一些用于光线跟踪的着色的新技能。

英语不好,我道歉:)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40636462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档