iOS与android坐标映射不一致问题

iOS与android坐标映射不一致问题

背景

为什么同一份着色器代码、同样的cvmat数据,Android和iOS两个平台处理之后会得到不一样的结果呢?

这主要是因为iOS和Android使用的渲染图形库不一样,iOS使用的是Metal,而Android使用的是OpenGL ES,而两个图形库的纹理坐标系又不一样:

OpenGL 纹理坐标系(原点在左下角):

Metal/Vulkan 纹理坐标系(原点在左上角):

如果细分着色器中的工作流程,还可以分为两步:

  1. 将cvmat映射到纹理上,这一步要求cvmat和纹理的方向一致;
  2. 将映射后的纹理从片段着色器中输出到渲染管线上,这一步要求cvmat和OpenGL(Android上)/Metal(iOS上)纹理坐标系方向一致。

将着色器中的工作流程与两条线索相结合,可以得到:

  1. 将cvmat与纹理相映射之前,需要对被标准化过的纹理进行一次上下颠倒,以达到纹理坐标系原点在左上角(和cvmat的坐标系一致)的目的。
  2. 将纹理输出到管线上之前:
  3. 在iOS平台上,由于 Metal 纹理坐标系原点就在左上角,所以不需要对上下颠倒过一次的纹理进行二次处理;
  4. 在Android平台上,由于OpenGL 纹理坐标系原点在左下角,而经过第一步颠倒的纹理其原点在左上角,因此需要第二次上下颠倒以同步原点。

综合一下,简单来讲:

  1. 将cvmat与纹理相映射之前,iOS和Android两个平台都需要对纹理进行一次上下颠倒;
  2. 将纹理输出到管线上之前,只有Android需要对纹理进行一次上下颠倒。
相关推荐
xiaozongt198930 分钟前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty2 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909064 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网4 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU5 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen5 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
初雪云5 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
ZHOUPUYU5 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU6 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
不爱说话郭德纲6 小时前
从“点点点”到一键出包:我把 uni-app x Android 离线打包做成了脚本
android·前端·uni-app