OpenGL模型变换平移、缩放、旋转注意事项
一、概述
在OpenGL中,想要对物体(模型)进行操作,如:平移、缩放、旋转。其顺序不能错,不同的顺序会给出不同的结果
网上的博客大家看过后要慎重使用,好多都是错误的,在实际项目中使用前最好先写demo进行验证,不然一旦整合到项目中,排错成本将会非常高。
三者的顺序是:
理论:先缩放、再旋转、然后平移
实际:平移*旋转*缩放。ps:实际和理论是相反的,这个和projection*view*model是类似的。
下面是一个简单的样例:将立方体平移到屏幕右下角。
ps:物体的顶点坐标系是在-1.0~1.0之间。
四个角的坐标分别为:
右上角:(1.0f,1.0f)
右下角:(1.0f,-1.0f)
左下角:(-1.0f,-1.0f)
左上角:(-1.0f,1.0f)
所以物体变换的时候也是在--1.0f~1.0f区域变换
二、代码示例
float scale = (float) mWidth / (float) mHeight; LOGE("scale:%f",0.5f/scale); glm::mat4 model = glm::mat4(1.0f); ///旋转、平移、缩放顺序不能反了 model = glm::translate(model, glm::vec3(0.5f, -0.5f/scale, 0.0f)); model = glm::rotate(model, 45.0f, glm::vec3(0.5f, 1.0f, 0.5f)); model = glm::scale(model, glm::vec3(0.1f));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2023-10-18 java在ubuntu上部署生产环境(适合小项目)
2021-10-18 posix实现最简单的生产者消费者模型
2012-10-18 Android Json通信实例