首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何手动创建mipmap?

如何手动创建mipmap?
EN

Stack Overflow用户
提问于 2013-11-12 17:57:11
回答 1查看 5.6K关注 0票数 2

我对使用这一行代码自动生成mipmap所获得的质量并不完全满意:

代码语言:javascript
复制
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.如何从所有这些图像创建一个映射的纹理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 (...)这样的东西的工作方式。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19936494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档