【问题标题】:Faces with different resolutions in GL_TEXTURE_CUBE_MAPGL_TEXTURE_CUBE_MAP 中不同分辨率的人脸
【发布时间】:2016-07-08 22:03:38
【问题描述】:

我在 openGl 中创建了一个 Cube,我需要提供 6 个彼此不同分辨率的纹理。 目前我正在使用 glTexImage2D 提供具有相同分辨率的纹理,但显然不能用于我的新目的。

下面的代码类似于我让每张脸都具有相同分辨率(只是亮度通道)的代码:

glGenTextures(3, m_cubemapTexture);
glPixelStorei(GL_UNPACK_ROW_LENGTH, cube_size);

glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubemapTexture[0]);

for (int face = 0; face < 6 face++){    
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, GL_LUMINANCE, cube_size, cube_size, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, m_uYdata[face]);
}

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);

glBindTexture(GL_TEXTURE_CUBE_MAP, 0);

编辑

我认为使用 mipmap 不是正确的方法,因为我不能简单地对更高分辨率的纹理进行下采样。 如果我只是更改 glTexImage2D() 中的宽度和高度以获得更高分辨率的纹理,立方体就会消失。

您能建议我如何更改代码吗?

【问题讨论】:

  • 那么面部的mipmaps呢? “不同的分辨率”是什么意思?还有为什么不能使用Your current code,只为每张脸加载不同分辨率的图片(m_uYdata[face]中的原始数据)?
  • 我不能使用 mipmap(如果我已经正确理解了 mipmap 的使用),因为我不需要纹理的子采样版本。我的应用程序仅从另一个应用程序接收 6 个纹理,其中一个是其他 5 个的两倍大小。要求所有这些面都使用这个全尺寸纹理而不缩小它们。我尝试提供仅改变较大面大小的纹理,但在这种情况下,整个立方体消失了。
  • @Pelux:“我不需要纹理的二次采样版本。”嗯……为什么不呢?你用这个你知道你不能使用mipmap的立方体贴图做什么?

标签: c++ opengl


【解决方案1】:

6种不同分辨率的纹理

这在立方体贴图中是不允许的。每个立方体贴图面必须具有相同的大小。并且必须是正方形(尽管不一定是二的幂)。

否则纹理将不被认为是完整的,因此使用它将无法访问数据。因此消失了。

要求所有这些面都使用这个完整尺寸的纹理而不缩小它们。

然后高档其他面孔。

我在 openGl 中创建了一个 Cube

如果您所做的只是绘制一个立方体,则不需要使用立方体贴图。尽管有这个名字,但显示立方体并不是立方体贴图纹理的用途。

根据您的需要,您所要做的就是使用常规 2D 纹理映射,将每个面分配到常规 2D 纹理的一个区域。您收到的 6 个“面”中的每一个都应复制到 2D 纹理的相应区域中。因此,立方体的每个面都将显示其特定的 2D 纹理区域。

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 2021-03-16
    • 2011-01-02
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多