我在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()中的宽度和高度以获得更高分辨率的纹理,那么立方体就会消失。
您能建议我如何更改代码?
答案 0 :(得分:2)
6种不同分辨率的纹理
立方体贴图中不允许这样做。每个立方体贴图面必须具有相同的大小。并且必须是一个正方形(虽然不一定是两个幂)。
否则纹理将不会被视为完整,因此使用它将无法访问数据。因此消失了。
要求所有这些面孔使用此全尺寸纹理而不缩小它们。
然后升级其他面孔。
我在openGl中创建了一个Cube
如果你正在做的只是绘制一个立方体,你不需要使用立方体贴图。尽管有这个名字,显示立方体不是立方体贴图纹理的用途。
根据您的需要,您所要做的就是使用常规的2D纹理贴图,每个面都分配到常规2D纹理的区域。您收到的6个“面”中的每一个都应该复制到2D纹理的相应区域中。因此,立方体的每个面都将显示其2D纹理的特定区域。