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

快来打我* 2022-09-28 13:14 396阅读 0赞

大家都知道,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 条评论,396人围观)

还没有评论,来说两句吧...

相关阅读

    相关 openGL纹理

    纹理压缩技术已经广泛应用在各种3D游戏之中,它们包括:DXTC(Direct X Texture Compress,DirectX纹理压缩,以S3TC为基础)、S3TC(S3