[✔️] cocos2dx 纹理格式pixel format

简介: [✔️] cocos2dx 纹理格式pixel format

huailiang.github.io/blog/2019/t…


format
BGRA8888 RGBA8888 分别用8个bit来记录每个像素的A、R、G、B数据,就是常说的32bit位图、256色位图
RGB888 真彩色
RGB565 分别用5个、6个和5个bit记录像素的R、G、B数据,其中G的6个bit中一个是无效保留的,32色位图,容易失真
A8 1byte,8位图,只有alpha信息,所以只能显示黑白
I8 intensity texture 即用一张高度图来实现凹凸效果,高度图中存储的是强度值,用于表示局部的海拔高度。颜色越浅表示越凸起,颜色越深表示越凹陷。
AI88
ARGB4444 RGBA4444 分别用4个bit来记录每个像素的A、R、G、B数据,16色位图
RGB5A1 2byte
PVRTC4
PVRTC4A
PVRTC2
PVRTC2A
ETC ETC1格式是OpenGL ES图形标准的一部分,并且被所有的Android设备所支持。 扩展名为: GL_OES_compressed_ETC1_RGB8_texture,不支持透明通道,所以仅能用于不透明纹理。 当加载压缩纹理时,参数支持如下格式: GL_ETC1_RGB8_OES(RGB,每个像素0.5个字节)
S3TC_DXT1
S3TC_DXT3
S3TC_DXT5
ATC_RGB
ATC_EXPLICIT_ALPHA


以上的pixelformat是cocos自己的封装,真正的和OpenGL的对应关系是:


PixelFormat (纹理的像素格式) internalFormat format type bpp(每个像素占用的位数) compressed(是否支持压缩) alpha(是否包含 alpha 通道)
BGRA8888 GL_BGRA GL_BGRA GL_UNSIGNED_BYTE 32 false true
RGBA8888 GL_RGBA GL_RGBA GL_UNSIGNED_BYTE 32 false true
RGBA4444 GL_RGBA GL_RGBA GL_UNSIGNED_SHORT_4_4_4_4 16 false true
RGB5A1 GL_RGBA GL_RGBA GL_UNSIGNED_SHORT_5_5_5_1 16 false true
RGB565 GL_RGB GL_RGB GL_UNSIGNED_SHORT_5_6_5 16 false false
RGB888 GL_RGB GL_RGB GL_UNSIGNED_BYTE 24 false false
A8 GL_ALPHA GL_ALPHA GL_UNSIGNED_BYTE 8 false false
I8 GL_LUMINANCE GL_LUMINANCE GL_UNSIGNED_BYTE 8 false false
AI88 GL_LUMINANCE_ALPHA GL_LUMINANCE_ALPHA GL_UNSIGNED_BYTE 16 false true


OpenGL坐标系


image.png


void glTexImage2D(
         GLenum  target,
         GLint   level,
         GLint   internalformat, // 参数3:显存格式
         GLsizei width,
         GLsizei height,
         GLint   border,
         GLint   format,// 参数7:像素格式
         GLenum  type,
         const GLvoid  *pixels
);



这里关系到OpenGL中的 pixel transfer 操作,pixel transfer 表示从内存到显存(unpack)或者从显存到内存(pack)的过程。 显然glTexIamge2D表示从内存到显存的过程,是unpack操作。


一般来说,我们会将internalformat和format参数设置的相同。


internalformat


是指OpenGL内部存储这个纹理时所用的格式,同时指定了哪些分量以及每个分量对应的bit数,可以理解为显存中存储的格式。


format / type


这2个参数共同指定了pixels内存中存储的格式,也就是data指针中的所存放的texture布局。


format形如GL_RG, GL_RED等,即指定哪些颜色分量。


type是像素数据的bit depth,包括GL_UNSIGNED_BYTE,GL_FLOAT,GL_UNSIGNED_SHORT_5_6_5等。


那么


  • A8对应的是glTexImage2D(null, null, GL_ALPHA, GLALPHA, ...)


  • I8对应的是glTexImage2D(null, null, GL_LUMINANCE, GL_LUMINANCE, ...)


  • AI88对应的是:glTexImage2D(null, null, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, ...)


##纹理格式 区别是在生成四分量RGBA颜色向量的方式,如果给定纹素的值,那么生成的 RGBA 颜色向量为:


format(param) RGBA 通俗解释(将 alpha 解释为透明度)
GL_ALPHA(A) (0,0,0,A) 具有不同透明度的完全黑色纹理
GL_LUMINANCE(L) (L,L,L,1) 具有不同颜色的不透明纹理(灰度图像)0x111,0x222,0x333等都是灰色的图片
GL_LUMINANCE_ALPHA(L,A) (L,L,L,A)
GL_INTENSITY(X) (X,X,X,X) 颜色和 alpha 通道都变化
GL_RGB(R,G,B) (R,G,B,1)



目录
相关文章
|
Shell
在Bash中检查变量是否为空的几种方法
在Bash中检查变量是否为空的几种方法
1878 0
在Bash中检查变量是否为空的几种方法
|
XML 缓存 运维
springboot注解(全)
springboot注解(全)
858 0
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
660 11
|
Shell
Bash 中的条件语句
【8月更文挑战第19天】
657 0
|
存储 Shell iOS开发
CMake中文手册_target_link_libraries(3.26)
CMake中文手册_target_link_libraries(3.26)
1517 0
|
缓存 前端开发 安全
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
2199 0
|
开发者 图形学 UED
深度解析Unity游戏开发中的性能瓶颈与优化方案:从资源管理到代码执行,全方位提升你的游戏流畅度,让玩家体验飞跃性的顺滑——不止是技巧,更是艺术的追求
【8月更文挑战第31天】《Unity性能优化实战:让你的游戏流畅如飞》详细介绍了Unity游戏性能优化的关键技巧,涵盖资源管理、代码优化、场景管理和内存管理等方面。通过具体示例,如纹理打包、异步加载、协程使用及LOD技术,帮助开发者打造高效流畅的游戏体验。文中提供了实用代码片段,助力减少内存消耗、提升渲染效率,确保游戏运行丝滑顺畅。性能优化是一个持续过程,需不断测试调整以达最佳效果。
751 0
|
XML Java Android开发
16. 【Android教程】选择框 RadioButton/Check
16. 【Android教程】选择框 RadioButton/Check
235 3
个人网站接入Google Ads的一点心得
这篇内容是一个关于将Google Ads集成到个人网站的简要经验分享。作者提到在网站上添加Google Ads的初步成效虽低,但作为起点尚可。文章介绍了开始步骤,包括拥有一个网站、注册Google Ads账户,并推荐了一个YouTube视频教程。网站需经过审批,通常要求至少15篇正规文章和6个月的域名注册,但有时新域名也能通过。验证方法包括使用ads.txt文件,遇到问题时可能需要手动检查。子域名的广告审批是自动的。放置广告可以选择自动或手动广告单元,作者建议结合使用。文章还提到了广告屏蔽和管理,以确保合规性。最后,作者分享了自己集成Google Ads的心得体会。
858 3

热门文章

最新文章