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需要对纹理进行一次上下颠倒。
相关推荐
应用市场3 小时前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
一铭111993 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
geats人山人海4 小时前
java 7异常
android·java·开发语言
2601_962071005 小时前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
2501_915918415 小时前
在 Xcode 中运行和调试单元测试的完整指南
ide·vscode·macos·ios·单元测试·个人开发·xcode
右手吉他6 小时前
高通平台IA APN问题分析之二
android·物联网
夜雪一千7 小时前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
茉莉玫瑰花茶7 小时前
GO [ 标准库 · HTTP 高可用 ]
ios·iphone·xcode
不浪费一个字节7 小时前
一个纯 Python 实现的 APK 解析与设备操控工具箱
android
itmigrate7 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php