(ps:纯个人记录向)
目录
- 谈谈坐标空间(此处只讨论3d空间)
- 坐标空间拿来做什么用
- 空间变换的矩阵怎么得到
- 对entgama的教程中该部分的理解和解释
- 变换矩阵在houdini中的具体代码实现
谈谈坐标空间(此处只讨论3d空间)
一个点在空间中的真实位置是确定的,但是其坐标是多少取决于所在的坐标空间是什么。
举个直观的栗子。一个人站在地铁口,他的真实位置是确定了的。当这个人描述自己的位置时,他可以用经纬度来描述(类比世界坐标空间),可以以自己为中心用前后左右来表示(类比模型坐标空间),也可以说自己在从地铁口出来直走5米的地方(以地铁口为原点的坐标空间)或者说自己位于某某建筑的东边100米处(以某某建筑为原点的坐标空间)。
因此坐标空间可以有无数个,只要你需要,只要你设定一套定义坐标空间的元素:原点O和三个轴X,Y,Z,就可以得到某点的新的位置表示方式。记住,坐标都是相对的。
那么坐标空间拿来做什么用呢?
在图形学的范围下,我的一个感受是,坐标空间可以方便几何体顶点位置变换的计算。
因为在3d下,许多与几何体相关的操作本质都是一些变换操作,再简化想想,本质就是几何体顶点的位置变换。
- 比如把3d物体变成像素的光栅化过程,就涉及到很多几何体顶点的操作,因此也涉及到几个常用的坐标空间(模型空间、世界空间、视图空间..)。
- 又比如entagma的两个houdini教程:
- 一个是制作面片卷曲效果(polyfolding),实质上就是按照一定的临近规则形成面片的父子结构树,让子面片可以按照树结构搜索,让面片本身的位置变化一直追溯到其每一个父节点的位置变化。本质还是改变面片顶点位置;如果以子面片和父面片的公共边作为局部坐标系,就可以通过一个简单的相对父面片的旋转来达成不同程度的卷曲的目的。(而如果要想在世界坐标系下表示出这些旋转是很复杂的)