android opengl旋转,OpenGL纹理旋转及翻转问题详解

本文由程序员kenney讲解Android OpenGL开发中遇到的纹理旋转和翻转问题,涉及图片坐标系、纹理坐标系、NDC坐标系和屏幕坐标系等概念,并通过实例分析了解决常见问题的方法,包括图片旋转、上下倒置、相机和视频渲染的旋转问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是程序员kenney,今天给大家讲解一下Android上OpenGL开发可能会遇到的一些纹理旋转及翻转的问题,其中有些原理在其它平台上如ios,osx上也是类似的。纹理旋转的问题一定要搞清楚,不能每当碰到一个方向不对的就自己旋转一下把它转正而不去研究背后的原因,这样虽然这一步旋转正确了,但之后的处理步骤可能都是建立在错误的认知上进行的,容易错上加错。

我们先来了解一下几个坐标系

首先看下图片坐标系和纹理坐标系。图片坐标系的原点在图片左上角,x轴向右,y轴向下,x和y的取值范围都是0到对应的图片宽高。纹理坐标的原点在纹理左下角,x轴向右,y轴向上,x和y的取值范围都是0到1。把一张图片加载到纹理中,图片数据就会从图片坐标系到了纹理坐标系。

94334fb6a6ca3816409e972689829483.png

再来看看NDC坐标系和屏幕坐标系。NDC坐标系就是设备标准化坐标系,是投影变换后将坐标归一化后就转换到了NDC坐标系,它的x轴向右,y轴向上,x和y的取值范围都是-1到1,这个范围就是显示的区域,超出这个范围的都不可见,NDC坐标系这个词可能稍显陌生,其实就是通常说的顶点坐标系,但从严格意义上说还是应该叫NDC坐标系,因为顶点严格来说是世界坐标系中的,世界坐标系是三维的,NDC坐标系中的顶点其实是投影变换后将坐标归一化后得到的顶点。

屏幕坐标系x轴向右,y轴向下,x和y的取值范围都是0到对应的屏幕宽高。

在矩阵变换的最后一步变换中OpenGL会将NDC坐标系变换成屏幕坐标系然后上屏显示。

25d3b4f32d858a86ae0b65799b1557cf.png

除此之后还有模型坐标系、视图坐标系等(可以参考:OpenGL ES 高级进阶:坐标系及矩阵变换),这里就不一一介绍了,因为不是讨论的重点。

另外,我们说"倒"的时候,实际上有两种倒,一种是上下倒置,一种是旋转了180度,是不一样的,要注意区别,看下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值