【问题标题】:NVidia OptiX: Load an OBJ in the PathTracer exampleNVidia OptiX:在 PathTracer 示例中加载 OBJ
【发布时间】:2019-01-21 17:43:18
【问题描述】:

在 SDK 的路径跟踪器示例中,我想添加一个 OBJ 文件进行跟踪,所以我转到 loadGeometry() 函数,在最后一次创建平行四边形之后,我添加了这个代码块

OptiXMesh mesh;
mesh.context = context;
loadMesh(mesh_file, mesh);
gis.push_back(mesh.geom_instance);
//setMaterial(gis.back(), diffuse, "diffuse_color", white);

注意gis 是一个GeometryInstance 向量。

当我运行它时,显示窗口打开,然后立即关闭,我得到以下异常:

Exception thrown at 0x00007FFA2856A388 in optixPathTracer.exe: Microsoft C++ exception: optix::TypeMismatch at memory location 0x0000000E29EFF030.
Exception thrown at 0x00007FFA2856A388 in optixPathTracer.exe: Microsoft C++ exception: optix::Exception at memory location 0x0000000E29EFF5C0.

如果我注释掉修改后的代码块,它工作正常。

如何将 OBJ 文件加载到跟踪器?我需要在着色器/RT_PROGRAMs 端添加一些东西吗? 提前致谢!

附:我知道loadMesh() 函数负责处理材质,但由于程序不起作用,我尝试设置一个材质,就像为所有其他几何实例显示的一样,如上面的代码块所示。

【问题讨论】:

    标签: nvidia optix


    【解决方案1】:

    关于相交功能:

    在路径追踪器示例中,场景由平行四边形组成。在 parallelogram.cu 文件中,OptiX 管道调用 intersect 函数来检测光线是否与平行四边形(4 点形状)相交。在OptixPathTracer.cpp中,createParallelogram方法中,交集程序设置为parallelogram.cu文件中的函数。

    当您加载网格时,它(最常见)由三角形组成,因此正在使用的 intersect 函数不适合网格的几何形状(我想这可以解释 TypeMismatch 错误,但消息是不是很清楚,您没有发布允许重现错误的完整示例)。

    如何解决:

    如果您查看光线投射示例,在 OptixRaycastingContext.cu 中有一个为三角形制作的 intersect 函数。您很可能应该将该三角形相交函数复制到您的 cu 文件中(不要忘记重命名它:那里已经有一个用于平行四边形的截距函数),然后当您为网格创建几何对象时,使用 setIntersectionProgram 调用三角形相交函数作为参数。

    另一种方式:

    您还可以开始研究网格查看器示例并更改光线跟踪代码(cu 文件)以进行路径跟踪。了解 OptiX 的工作原理是一个很好的练习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多