glTexParameterf
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
glTexParameterf
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_CLAMP_TO_EDGE
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_CLAMP_TO_EDGE
);
就可以了。
从 http://stackoverflow.com/questions/11069441/non-power-of-two-textures-in-ios 这上找到的答案。
在绑定纹理后,添加下面四行代码glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_
Textur
es
)
OpenGL
仅支持分辨率为2mx2n的纹理。但现在我们可以使用“无二
次
幂
限制”的纹理。
OpenGL
only supports textur
es
with 2m x 2n r
es
olution.But "Non-Power-of-Two" textur
es
can be useful.
1、图片的纹理像素在Unity3D中需要遵循2的N
次
方,由图形学决定的,只识别2的N
次
方。
非2的N
次
方的图片会转化为2的N
次
方图片(500 x 500 → 512 x 512),是因为转化过程比较慢,由运行程序转换十分耗时,所以Unity3D提前将资源转化为符合标准的图片。
2、ios pvrtc的原因,有些GUP不支持
NPOT
,遇到
NPOT
会有一个转换POT的过程,浪费性能,
因此...
前面两节介绍了向量和矩阵,以及坐标和转换相关的数学,再继续讨论模型变换等其他包含数学内容的部分之前,本节介绍二维纹理映射,为后面学习做一个准备。纹理映射本身也是比较大的主题,本节只限于讨论二维纹理的基本使用,对于纹理映射的其他方法,后面会继续学习。可以从我的github下载本节代码。通过本节可以了解到
纹理映射的概念和原理
二维纹理映射的处理方法
使用纹理增加物体表面细节要使渲染
纹理的基础知识请参阅Learn
OpenGL
的文章:
https://learn
opengl
-cn.github.io/01%20Getting%20started/06%20Textur
es
/
这里记录一下自己在使用纹理时候遇到的一些问题。
纹理图像大小,2的n
次
方?
自己在查阅有些资料的时候,有些人在博客上写了这样的话:
OpenGL
要求纹理的高度和宽度都必须是2的n
次
方大...
在调用android
opengl
ES
进行纹理
贴图
的时候,发现有的机器上能
显示
图片,有的机器上不能
显示
。是因为图片的尺寸不是2的N
次
幂
,部分显卡不支持非2的N
次
幂
纹理
贴图
。
将图片放大到2的N
次
幂
,比如100 * 200的图片就放大到128 * 256。
为了
显示
图片不拉伸,坐标顶点使用原图的宽高比例。
private class MyRenderer implements GLSurfa
从
OpenGL
ES
官方API中,我们可以知道从
OpenGL
ES
2.0
开始,加载纹理时,对图片的宽高已不再要求未2的N
次
方比例。这一点在许多情况下还是非常有用的,例如:来自视频或摄像头的数据可能不为2的N
次
方。
但从实际设备测试可知,对于
OpenGL
ES
2.0
的终端设备,不同厂商的设备表现可能不同,因此,对于加载的纹理,若可以使用2的N
次
方纹理,还是要尽量保持2的N
次
方。
OpenGL
要求纹理的高度和宽度都必须是2的n
次
方大小,只有满足这个条件,这个纹理图片才是有效的。 一旦获取了像素值,我们就可以将这些数据传给
OpenGL
,让
OpenGL
生成一个纹理
贴图
:
OpenGL
纹理是一种位图,可以把它粘贴到
OpenGL
物体的表面上。比如可以获取一张邮票的图像粘贴到正方形中,使正方形看起来像一张邮票。要使邮票保持合适的方向,以便图像井然有序地排列,则必须获得形状的每个顶点并在正方形上标记出来,以便邮票和正方形的形状保持一致。在
OpenGL
中引入了纹理坐标。
OpenGL
假设纹理图始终为1x1的正方形,其原点位于(0.0)处,右下角为(1,1)。如下图。
有损压缩:可以降低图像在内存和磁盘中占用的空间,但是会降低图片质量,且该操作不可逆
无损压缩:不会丢失图片原有信息,只能降低图像在磁盘中的空间占用,压缩率低,操作可逆
我们的目的是为了降低内存,所以选择有损压缩,并在有损压缩方式中选择最合适的压缩方式。
(2)移动端比较流行的有损压缩