爱站网关键词查询网站的工具,南和县住房和建设局网站,网络营销推广的问题,淘宝上如何免费开网店坐标转换 文章目录 坐标转换坐标系统的转换局部空间(Local Space#xff09;-世界空间(World Space)世界空间(World Space)-观察空间#xff08;View Space/View Space#xff09;裁剪空间(Clip Space)MVP矩阵 坐标系统的转换
了解坐标系统和空间变换之前需要先了解…坐标转换 文章目录 坐标转换坐标系统的转换局部空间(Local Space-世界空间(World Space)世界空间(World Space)-观察空间View Space/View Space裁剪空间(Clip Space)MVP矩阵 坐标系统的转换
了解坐标系统和空间变换之前需要先了解一下线性代数。 其实空间转换就是相同顶点在不同坐标系下新的坐标最后在着色器里完成 渲染。
局部空间(Local Space-世界空间(World Space)
个人理解使用model矩阵转换坐标系
只是用平移放缩和旋转矩阵实现转化把局部坐标顶点坐标通过模型原点和世界坐标原点获得各顶点的世界坐标。换个理解方式就是将局部空间的原点坐标通过矩阵变换放置到世界空间的原点坐标注意要先线性变换再平移缩放 - 旋转 - 平移 model矩阵 此代码只是旋转了每个顶点因为当前的渲染的物体的原点坐标已经在世界原点故此时的model矩阵可以直接为单位阵
//Learnopengl 代码
glm::mat4 model;
model glm::rotate(model, glm::radians(-55.0f), glm::vec3(1.0f, 0.0f, 0.0f)); 世界空间(World Space)-观察空间View Space/View Space
个人理解使用view矩阵转换坐标系
OpenGL本身没有摄像机(Camera)的概念摄像机的移动就是物体的反方向移动。其坐标转换就是从顶点世界坐标转化到以摄像机的视角作为场景原点时的新的坐标我们只需要考虑设置摄像机的位置、摄像机的朝向方向但仅仅这两个变量无法确定一个坐标系我们需要引入上向量垂直与位置和方向构成的方向向量此时根据向量的叉乘我们就可以确定一个新的坐标系。叉乘的结果方向和叉乘的顺序有关可以根据右手定则确定注意OpenGL里是右手坐标系。 lookAt函数
第一个变量这是你在空间中的位置你希望从这个位置看向center。第二个变量 是你希望看向的位置通常这个位置是场景中的某一点。第三个变量是定义相机的上向量的方向。这个向量垂直于视线从眼睛到目标和水平向量。
glm::mat4 view;
view glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));裁剪空间(Clip Space)
简单来说就是看不到的就不渲染。
两种投影矩阵
矩阵要做什么将顶点坐标”压缩进“[-1,1]的范围越界则被裁剪掉正交Orthographic 无近大远小矩阵怎么得到的试想正交投影就是一个类似立方体的平截头箱其先平移再修改scale就能得到一个转成成标准化设备坐标(Normalized Device Coordinate, NDC)的矩阵 透视Perspective 实现的效果为近大远小,那么只需要将远平面压缩成和近平面一样由于其类似于一个锥体侧面看是一个三角形它们是存在相似的关系Z轴上XY成比例我们需要将每个坐标压缩然后左乘正交矩阵就可以得到projection orthographicMatrix * projectiveMatrix * projection;
用glm库直接获取
//正交,参数就是设置了一个立方体
glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);//透视
//注意不同版本的glm是否需要使用过glm::radians函数的问题
glm::mat4 proj glm::perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);MVP矩阵
在着色器里按顺序左乘各个矩阵即可
gl_Position projection * view * model * aPos;