一、概述
在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));
标签:平移,scale,1.0,glm,OpenGL,缩放,model From: https://www.cnblogs.com/tony-yang-flutter/p/18473946