如何通过optix示例

时间:2015-12-30 07:04:10

标签: cuda textures optix

我对optix和cuda很新。 我正在尝试修改optix SDK示例以呈现带有光线跟踪的3D模型。我修改了“progressivePhotonMap”示例。由于缺乏optix / cuda知识,我不知道如何在3D模型上绘制纹理,任何熟悉SDK示例的人都可以帮助我吗?

我读了其他的绘画纹理例子,比如“swimShark”或“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 ) );

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

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

有没有人可以教我texcoord获取纹理坐标数据的位置,以及如何将坐标数据和texure与光线追踪呈现3D模型? 我在谷歌找不到教程,我真的需要帮助或指导才能达到我的目标。谢谢。

1 个答案:

答案 0 :(得分:1)

您应首先阅读OptiX documentation。特别是关于属性变量的段落。

IIRC texcoord变量是

形式的属性
rtDeclareVariable( float3, texcoord, attribute texcoord );

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

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