【问题标题】:how to draw texture on obj model through optix example如何通过 optix 示例在 obj 模型上绘制纹理
【发布时间】:2016-01-03 17:39:01
【问题描述】:

我对 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 ) );

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

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

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

【问题讨论】:

    标签: cuda textures optix


    【解决方案1】:

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

    IIRC texcoord 变量是表单的属性

    rtDeclareVariable( float3, texcoord, attribute texcoord );
    

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 2016-05-10
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      相关资源
      最近更新 更多