| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> openGL 第八篇:坐标系统一 =》基础知识点 -> 正文阅读 |
|
[游戏开发]openGL 第八篇:坐标系统一 =》基础知识点 |
坐标系统(Coordinate Systems)第一:概念坐标转换过程: 局部坐标? =》 世界坐标=》观察坐标=》裁剪坐标=》屏幕坐标 1)透视除法(perspective division): ????????将位置向量x、y、z分量分别除以向量的齐次w分量,将4D裁剪空间坐标变换为3D标准化设备坐标。 2)标准化设备坐标: ????????范围【-1,1】,裁剪空间坐标之后,经过透视除法,在裁剪空间中的坐标取值范围将会全部在【-1,1】之间。 3)视口变换: ? ? ? ? 将裁剪空间坐标转换成屏幕坐标的过程,称之为视口变换。作用是将标准化设备坐标即(-1,1)中的坐标 变换到 由 glViewport 函数定义的坐标范围内。 第二:坐标系的转换局部坐标转换成世界坐标由?模型矩阵(model Matirx) 实现。=》转换到世界空间中 世界坐标转换成观察坐标由?观察矩阵(view Matrix)实现。=》转换到观察空间中 观察坐标转换成裁剪坐标由 投影矩阵(projection Matrix)实现。=》转换到裁剪空间中 第三:投影矩阵? 有两种1)正射投影1,特点: ? ? ? ? 由宽、高、近平面(near plane)、远平面(far plane)组成。任何不在近平面与远平面之间的坐标都会被裁剪掉即不会显示在屏幕上。 ?2,使用
第一、第二参数:左右坐标。 第三、第四个参数:底部和顶部参数 第五个参数:摄像机到近平面的距离 第六个参数:摄像机到远平面的距离 2)透视投影(可借助unity、cocos3D中的camera来增强理解)?1,特点 ? ? ? 由视角(fov)、宽高比、近平面(near plane)、远平面(far plane)组成。任何不在近平面与远平面之间的坐标都会裁剪掉即不会显示在屏幕上。 2,使用
第一个参数:视角? =》视角越大,近平面到摄像机越近,甚至在摄像机背后 第二个参数:宽高比 第三个参数:摄像机到近平面的距离 第四个参数:摄像机到远平面的距离 3)总结归纳? ? ? ? 投影矩阵是把观察空间坐标转换成裁剪空间坐标,完成之后,再通过透视除法(perspective division)即将位置向量x、y、z分量分别除以向量的齐次w分量,将4D裁剪空间坐标变换为3D标准化设备坐标。然后将得到的裁剪空间坐标转换成屏幕坐标中,再进行光栅化,拆分成片段。 ? ? ? ? 裁剪空间坐标转换成屏幕坐标的过程 我们称之为? 视口变换。 ? ? ? ? 视口变换:将标准化设备坐标即(-1,1)中的坐标 变换到 由 glViewport 函数定义的坐标范围内。 总结转换过程:最总组合在一起:顶点坐标 x? 模型矩阵 x 观察矩阵 x 投影矩阵? =? 裁剪坐标。最后openGL会自动进行 透视除法和裁剪,转成屏幕坐标,并被变换成片段。 第四:应用
第五:注意事项1)模型矩阵、观察矩阵、透视矩阵 所操作的都是顶点位置坐标数据 2)上述组合是从右向左读取,需先进行模型转换、再进行观察空间转换、最后进行透视转换 第六:个人总结归纳1)转换理解? ? ? ?顶点数据中的坐标都是相对于物体的坐标(局部空间坐标),根据特定需求我们需要先转换成世界坐标。然后因为屏幕像眼睛(摄像机)一样观察到的紧紧是世界中的一部分,这时为了方便操作和运算我们需要将其转换成观察空间坐标中,同时我们屏幕仅能展示世界的一部分,这时我们需要去掉在可见范围外的坐标,即裁剪掉不要的坐标,可通过投影矩阵实现。进而得到裁剪后的坐标,称之为裁剪空间坐标。最后openGL会自动进行 透视除法操作,把每个位置向量的x、y、z分量进行除以w分量,也就是将4D坐标分量转换成3D的标准坐标,此时数值的范围全部在【-1,1】中。最后得到坐标会映射到屏幕坐标(此时的屏幕坐标是根据glViewport中设定的参数)中,再进行光栅化,被变换成片段。 ? ? ? ? 需要注意的是正射投影其实也进行了透视除法,只是w分量等于1。 (文章:顶点着色器的输出要求所有的顶点都在裁剪空间内,这正是我们刚才使用变换矩阵所做的。OpenGL然后对裁剪坐标执行透视除法从而将它们变换到标准化设备坐标。OpenGL会使用glViewPort内部的参数来将标准化设备坐标映射到屏幕坐标,每个坐标都关联了一个屏幕上的点(在我们的例子中是一个800x600的屏幕)。这个过程称为视口变换) 2)新的想法? ? ? ? 每个纹理对应的映射位置坐标范围,gl_position 是可以通过matrix 进行改变的,从而可以实现缩放、位移、旋转等。 ? ? ? ? 而纹理的过滤,环绕等,是相对于纹理坐标而言的、、、、 3)个人疑问? ? ? ? Q1)为什么要将物体的坐标经过多次坐标系的转换?为何不直接转换?多次转换是不是有点多余? ? ? ? ? A:将物体的坐标进行多次过渡转换,是因为在这些特定的坐标系中,有些操作或者运算会更加的方便和容易。 ? ? ? ? Q2)为什么除以w分量就能把大空间的坐标直接转换到屏幕坐标中呢?这个是否与多级渐远有关联呢?因为多级渐远处理的就是少量片段显示大纹理。 ? ? ? ? Q3)glViewPort 设置的参数? 是否会与 ortho(正射投影)? 有冲突呢? ? ? ? ? Q4)操作后发现,顶点坐标即位置坐标 的操作,与纹理坐标的操作 有什么区别呢?在这里操作的是位置坐标。可以进行缩放、位移、旋转等。 对纹理坐标的操作是否也可以实现缩放、位移、旋转? 它们又有什么区别呢? ? ? ? ? Q5)cocos中节点的大小、位置、旋转角度、锚点、颜色、透明度等信息? 与 openGL 这里的那些信息有关,对应着那些操作呢? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 2:48:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |