我对使用这一行代码自动生成mipmap所获得的质量并不完全满意:
glTexParameterf(GL10.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL10.GL_TRUE);我想(和Gimp一起)为我的游戏中使用的每一个纹理创建不同的缩放版本。例如,对于一个球的纹理,我将拥有:
球形256.png 256x256 px
圆珠笔128 px 128x128 px
64 px 64x64 px
球囊32.png 32x32 px
球16 px 16x16 px
1.你认为是个好主意吗?
2.如何从所有这些图像创建一个映射的纹理?
发布于 2013-11-13 02:16:20
这不仅是一个好主意,而且是一个相当标准的实践(特别是在Direct3D中)!
在生成mipmap时,OpenGL实现倾向于使用标准的框过滤器(一致加权)。你可以使用一个不错的帐篷填充(双线性)或甚至三次样条(双三次样条),当下采样纹理在图像编辑套件。就我个人而言,我更喜欢lanczos过滤器,因为这将是脱机完成的。
您可能已经知道这一点,但是Direct3D有一个标准的纹理格式,称为DDS (直接绘制曲面),它允许您在内容创建时而不是加载时预先计算和预压缩每个mipmap级别。这减少了压缩的纹理加载时间,更重要的是,允许在每个LOD下采样期间进行更高质量的样本重建。OpenGL还有一种标准化的格式,可以做同样的事情:KTX。我提到Direct3D是因为虽然OpenGL有一个标准化的格式,但是很少有人知道它;对于大多数人来说,OpenGL要熟悉得多。
如果您不想使用我前面提到的标准化格式,可以通过调用glTexImage2D (..., n, ...) (n是LOD ) (0是最高分辨率的细节级别),手动加载您的详细级别。当您创建您的纹理时,您将在一个循环中对每个LOD执行此操作,这实际上是像gluBuild2DMipmaps (...)这样的东西的工作方式。
https://stackoverflow.com/questions/19936494
复制相似问题