【发布时间】: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的立方体贴图做什么?