如何通过 optix 示例在 obj 模型上绘制纹理

how to draw texture on obj model through optix example

我对 optix 和 cuda 很陌生。 我正在尝试修改 optix SDK 示例以呈现具有光线追踪的 3D 模型。我修改了 "progressivePhotonMap" 示例。由于optix/cuda知识匮乏,不知道如何在3D模型上绘制贴图,有熟悉SDK示例的大神能帮帮我吗?

我阅读了其他绘图纹理示例,例如 "swimmingShark" 或 "cook",并尝试找出使用线索。然而,这些例子似乎有不同的方式来绘制纹理。

从现在开始,我知道我必须在 cpp 文件中加载纹理

GeometryInstance instance = m_context->createGeometryInstance( mesh, &m_material, &m_material+1 );
instance["diffuse_map"]->setTextureSampler(loadTexture( m_context, ... );

并在cuda文件中创建TextureSampler

rtTextureSampler<float4, 2>      diffuse_map; // Corresponds to OBJ mtl params

,然后给他们texcoord来画,像这样,

float3 Kd = make_float3( tex2D( diffuse_map, texcoord.x*diffuse_map_scale, texcoord.y*diffuse_map_scale ) );

但是,我在cuda文件中找不到texcoord获取纹理坐标数据的地方。 .cpp 文件中似乎应该有这样的代码

GI["texcoord"]->setBuffer(texcoord)

谁能教我texcoord在哪里获取纹理坐标数据,以及如何匹配坐标数据和纹理以使用光线追踪呈现3D模型? 我在 google 中找不到教程,我真的需要帮助或指导才能实现我的目标。谢谢。

您应该先阅读 OptiX documentation。特别是关于属性变量.

的段落

IIRC texcoord 变量是表单的一个属性

rtDeclareVariable( float3, texcoord, attribute texcoord );

在交点程序中计算并传递给最近的命中程序(属性旨在将数据从交点传递到着色点)。

简短回答:它被设置到另一个 CUDA 函数中,从概念上讲,该函数计算该行所需的一些数据。