【问题标题】:How to use 3d texture in opengl and cg shaders?如何在 opengl 和 cg 着色器中使用 3d 纹理?
【发布时间】:2012-05-16 11:45:01
【问题描述】:

我遇到了 3D 纹理映射的问题。如果我有几个 2d 纹理,我想用这些 2d 纹理构建一个 3d 纹理。我能做些什么来把所有这些数据放在一起?函数 glTexImage3D 以参数 const GLvoid *texels 结束,该参数导致纹理数据。但现在我有 32 个 2D 纹理并且想要获得 3D 纹理。该怎么做?

第二个问题是关于图像空间过滤方法。有没有人知道它是什么?我应该使用这种方法来确定纹理坐标。

【问题讨论】:

    标签: opengl graphics cg


    【解决方案1】:

    您真的需要 3D 纹理吗?也许更好的方法是使用纹理数组?

    这是一个很好的信息:http://www.opengl.org/wiki/Array_Texture

    我认为它比使用 3D 纹理要简单一些。它们非常有用,例如在级联阴影映射中,每个级联到纹理数组中的不同元素。

    【讨论】:

      【解决方案2】:

      但现在我有 32 个 2D 纹理并且想要获得 3D 纹理。该怎么做?

      在您的程序中的某个时刻,您会上传纹理。根据您的问题,我认为您已经使用 glTexImage2D 上传了它们。在纹理对象之间传输纹理数据是困难、繁琐且不太健壮的,因此询问如何将 2D 纹理组合成 3D 纹理有点离题。

      但您可以做得很好的是从一个接一个上传到 3D votexels 块的 2D 数据切片构建您的 3D 纹理。只需将每次调用 glTexImage2D 替换为调用 glTexSubImage3D。在上传任何数据之前,您可以使用对 glTexImage3D 的调用和 NULL 指针作为数据参数来初始化纹理(如果您使用的是 OpenGL-4,也可以使用 glTexStorage3D)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多