OpenGL ES纹理尺寸限制的处理方法

大家都知道,OpenGL ES对纹理的尺寸有限制,就是长和宽都必须是2的整数次幂。(实际上OpenGL都有此限制,但有一些扩展可以解决此问题)。因此处理方案有两种:


  1. 将纹理尺寸限制为2的整数次幂。比如,我有一个480×320的背景图案,我可以用Photoshop将画布设置为512×512,在纹理映射时只使用480×320部分。当然我也可以将多个图案合成在一个纹理中,在纹理映射时根据图案的位置进行映射。
  2. 仍然使用正常的图像尺寸,但在使用时进行转换。下面是源代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        // 首先调整纹理的长和宽为2的整数次幂        
        if ( ( _width ! = 1 ) && ( _width & ( _width - 1 ) ) )
        {
                i = 1 ;
                while ( ( sizeToFit ? 2 * i : i ) < _width )
                        i * = 2 ;
                _width = i ;
        }

        if ( ( _height ! = 1 ) && ( _height & ( _height - 1 ) ) )
        {
                i = 1 ;
                while ( ( sizeToFit ? 2 * i : i ) < _height )
                        i * = 2 ;
                _height = i ;
        }

        // 如果调整后的图像尺寸大于最大纹理尺寸(1024),那么需要缩小
        while ( ( _width & gt ; kMaxTextureSize ) || ( _height & gt ; kMaxTextureSize ) )
        {
            _width / = 2 ;
            _height / = 2 ;
            transform = CGAffineTransformScale ( transform, 0.5, 0.5 ) ;
            imageSize. x * = 0.5 ;
            imageSize. y * = 0.5 ;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值