使用非2次方幂的图像纹理的问题

转载 2009年08月18日 22:20:00

 

图像使用2次方是很讨厌的问题,不在技术难度上,而在技术妥协上.实际上要求美工作出2次方纹理,并且整张图的空间利用率要高,是很难的.
当有些策划丢过来奇奇怪怪的尺寸的图像,我都要吐血,当知道2n次方限制后,他们把图像尺寸扩大一下,再丢给我空余大量空白的2n次方纹理,再吐血.

玻璃渣资源里标准的2n次方人物纹理,图像挤的满满的,每个身体部位纹理还是一个矩形,利用率之高不得不令人佩服,然而这对美工要求是极高的.
1024*768的图像是要拆成4*3的256*256图像的,而不是一整大张纹理,因为768不是2的n次方,更不要扩大为1024*1024,加大25%的内存.
还有Wow里Loading界面的图像都压成512*512,因为Loading图像模糊一点不要紧,很简单却都是很重要的细节.
所以当Wow运行在我Geforce2的显卡上时,我觉的很cool.

Nvidia的驱动程序也很讨厌,实际Geforce6显卡才支持non power of two texture,Geforce 5200级的显卡,在硬件能力上不足以支持NPOT,但是最新的驱动程序使用了软件模式进行模拟支持,而软件模拟根本毫无实用价值,渲染变得超级缓慢,因为驱动程序每次纹理渲染都会很聪明地把非2次方尺寸图像自动Scale到2次方尺寸,对于一个800*600的图像,驱动程序在这个步骤就吃光了CPU.
所以总有些人喊着为什么OpenGL没有软件渲染支持,DX很体贴都有(实际上DX也没有,比如那个所谓的8层纹理),而我认为如果软件渲染能解决问题,那要硬件作什么!不能解决问题的方案我们支持它作什么!

// OpenGL动态执行2n次方图像限制
inline int next_p2(int a)
{
 int rval=1;
 while(rval<a) rval<<=1;
 return rval;
}

int nWidthPowerOfTwo = next_p2(tex.nWidth);
int nHeightPowerOfTwo = next_p2(tex.nHeight);

if(tex.nWidth == nWidthPowerOfTwo  &&  tex.nHeight == nHeightPowerOfTwo)

 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, nWidthPowerOfTwo, nHeightPowerOfTwo, 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());
 tex.fScaleX = tex.fScaleY = 1.0f;

else

 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, nWidthPowerOfTwo, nHeightPowerOfTwo, 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, NULL);
 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, tex.nWidth, tex.nHeight, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());
 tex.fScaleX = (float)tex.nWidth / (float)nWidthPowerOfTwo;
 tex.fScaleY = (float)tex.nHeight/ (float)nHeightPowerOfTwo;
}

然而对这个问题,正确的解决方案是事先规划,强制执行,be clever.

相关文章推荐

图像纹理特征提取完整版

  • 2017年06月21日 11:41
  • 9KB
  • 下载

《图像纹理特征提取方法综述》论文笔记

纹理是一种重要的视觉线索,是图像中普遍存在而又难以描述的特征。 纹理特征提取的目标是:提取的特征维数不大、鉴别能力强,稳健性好,提取过程计算量小,能够指导实际应用。 图像纹理的应用如下图1...

LBP实现图像纹理特征显示

  • 2015年03月14日 21:52
  • 13.78MB
  • 下载

一种图像纹理特征检索算法

  • 2008年12月07日 16:56
  • 196KB
  • 下载

卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks

本文介绍了一种基于卷积神经网络特征空间的自然纹理的新模型,可以用于物体识别。模型的样本具有高感知度,显示出在纯分辨状况下神经网络的泛化能力。模型内部,用网络几个层上的特征地图之间的相关关系表示纹理。我...

图像纹理特征总体简述

图像纹理特征总体简述

基于振动图像纹理特征识别 的滚动轴承故障程度诊断方法研究

基于振动图像纹理特征识别的滚动轴承故障程度诊断方法研究从毕设中期答辩以后,本人开始着力于信号处理方面知识的学习,这里面的玄机确实说不清道不明,剪不断理还乱。 在学习过程中,发现很多值得去探索和分析的...

图像纹理特提取与识别

图像处理

图像纹理分析

  • 2015年05月30日 16:23
  • 819B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用非2次方幂的图像纹理的问题
举报原因:
原因补充:

(最多只允许输入30个字)