在GL_TEXTURE_CUBE_MAP中具有不同分辨率的面

时间:2016-04-29 08:47:05

标签: c++ opengl

我在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()中的宽度和高度以获得更高分辨率的纹理,那么立方体就会消失。

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

1 个答案:

答案 0 :(得分:2)

  

6种不同分辨率的纹理

立方体贴图中不允许这样做。每个立方体贴图面必须具有相同的大小。并且必须是一个正方形(虽然不一定是两个幂)。

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

  

要求所有这些面孔使用此全尺寸纹理而不缩小它们。

然后升级其他面孔。

  

我在openGl中创建了一个Cube

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

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