NVidia OptiX:在 PathTracer 示例中加载 OBJ



在 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()函数会处理材质,但由于程序不起作用,我尝试设置一个材质,就像为所有其他 GeometryInstances 显示的那样,如上面的代码块所示。

关于相交函数:

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

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

如何解决:

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

另一种方式:

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

最新更新