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需要对纹理进行一次上下颠倒。
相关推荐
他是龙5513 分钟前
DVWA 靶场深度解析:文件包含 & 文件上传(Low → Impossible)
android
_李小白8 分钟前
【Android车载学习笔记】第一天:Android Automotive OS介绍
android·笔记
aqi0020 分钟前
FFmpeg开发笔记(一百零一)跨平台的开源音视频移动框架MobileFFmpeg
android·ffmpeg·音视频·直播·流媒体
MonkeyKing1 小时前
iOS 深入理解 UIView 与 CALayer:关系、渲染流程与坐标系
ios
2301_811130541 小时前
【保姆级教程】Android Studio完整安装步骤(2026最新版,新手零踩坑)
android·java
君子木1 小时前
解决ios App的webview不支持<video>标签行内播放的问题(点击播放按钮后会直接全拼播放)
ios
帅次1 小时前
Android 高级工程师面试参考答案:项目经历、自我介绍与实战案例表达
android·面试·职场和发展
小猫爱游戏1 小时前
theone陪伴ai手机版免费版下载安装教程附带最新邀请码theone陪伴ai设定教程接入下载使用教程手机版安卓版app鸿蒙版苹果版IOS电脑版安装包下载地址
android·人工智能·智能手机·theone陪伴ai·theone陪伴ai下载·免费下载安装·接入微信教程
韩曙亮2 小时前
【Android】Android 源码查看 ( Android 源码在线查看 2026-03-30 | Android 源码下载 | Android 源码查看工具 )
android·安卓·安卓源码·aosp·android 源码·android源码查看工具·android 源码工具