What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
vfx:houdini:concepts:geo:points_vertex [2018/09/24 15:30] – 外部编辑 127.0.0.1vfx:houdini:concepts:geo:points_vertex [2022/12/17 15:05] (当前版本) – [Point] codinghare
行 1: 行 1:
 ======Points and Vertices====== ======Points and Vertices======
-//参考//:[[http://www.sidefx.com/docs/houdini/model/points|Points and vertices]]\\ +Points 与 Vertices 概念和区别。 
-<wrap em>我笔记均包含大量个人理解内容,存在一定偏差如果您发现错误,请留言提出,谢谢!</wrap>\\ +----
-===== =====+
  
 ====Point==== ====Point====
  
-//Point// 在 //Houdini// 中是由空间中的 ''4'' 个数字定义的,分别是 ''(X,Y,Z,W)''。''X,Y,Z'' 代表了 //Point// 在空间中的坐标,而 ''W'' 则是一个标量,用于坐标的这里应该是四元数,但也用一个标量也可用矩阵实现变换)。因此,//Point// 在该空间中是**不重复**的。 +//Point// 在 //Houdini// 中是由空间中的 ''4'' 个数字定义的,分别是 ''(X,Y,Z,W)''。''X,Y,Z'' 代表了 //Point// 在空间中的坐标,而 ''W'' 则是一个标量(应该是 //Homogeneous//)。因此,//Point// 在该空间中是**不重复**的。 
 +\\ 
 +\\ 
 +绝大部分情况下在 Houdini 中都是对 //Point// 的操作。
 ====Vertex==== ====Vertex====
  
行 17: 行 18:
 </div> </div>
 </html> </html>
 +====How to form a primitive====
 +在 Houdini 中,一个单独的 Primitive 由以下部分组成:
 +  * 组成 Primitive 的 Vertices
 +  * 在计算 Primitive 中,遍历 Vertices 的顺序
 +通过之前的介绍我们知道,Houdini 中的点(point)信息应该是以 ''1*4'' 的向量存储的:
 +<code>
 +//point number  + coordinate
 +Vertex[@ptnum,x,y,z];
 +</code>
  
 +因为Vertex 是构成 Primitive 的单位,其自身并没有在**世界坐标系**中的信息 。因此,我们需要引进一个概念,针对世界世界坐标系的绝对坐标值来描述 Primitive 的顶点位置。因此,如果我们打开 Houdini 的 spreed sheet,我们会发现,points 中存储的是 ''[x,y,z]'',而 vertex 中存储的是 ''@ptnum''。那么实际上,Houdini 中的点的信息就是这么存储的:
 +<code>
 +Point[x,y,z];
 +//reference position from point
 +Vertex[@ptnum, ref(Point)]
 +</code>
 +我们可以将 vertex 想象为 point 的 **容器**;换句话说,也就是 vertex 是类, point 是实例。因此,理论上的单个 primitive 是由其对应的 vertex 与 遍历 vertex 的顺序建立的;而 point 提供的额外的坐标数据,确定了该 primitive 在整个世界坐标系中的唯一性。
 +===顺序===
 +Primitive 中遍历 vertex 的顺序非常重要;该顺序直接决定了 Normal 的方向。
 ====Tips==== ====Tips====
  
   * 在一个几何体中,如果有多个独立//Primitive//(没有共享 //Point//)存在,那么比起使用 //Point// 属性,使用 //Vertex// 的属性能更方便的对每一个独立的 //Primitive// 进行操作。   * 在一个几何体中,如果有多个独立//Primitive//(没有共享 //Point//)存在,那么比起使用 //Point// 属性,使用 //Vertex// 的属性能更方便的对每一个独立的 //Primitive// 进行操作。
   * 一些情况下,渲染器并不会独立计算被共享的 //Point// 的 //Normal// ,这样的计算方式会使得表面看起来更加平滑。如果需要有棱有角的的面,需要对每个独立的 //Vertex// 进行 //Normal// 的重新计算。常用的节点有:''facet''。''facet'' 节点可以通过将 //Point// 分离出来达到上述效果,也可以使用 ''cusp polygons'' 在不分离 //Point// 的前提下达到上述效果。   * 一些情况下,渲染器并不会独立计算被共享的 //Point// 的 //Normal// ,这样的计算方式会使得表面看起来更加平滑。如果需要有棱有角的的面,需要对每个独立的 //Vertex// 进行 //Normal// 的重新计算。常用的节点有:''facet''。''facet'' 节点可以通过将 //Point// 分离出来达到上述效果,也可以使用 ''cusp polygons'' 在不分离 //Point// 的前提下达到上述效果。
-\\ +====参考资料==== 
-\\ +  * [[http://www.sidefx.com/docs/houdini/model/points|Points and vertices]]\\
-\\ +
-===== ===== +
-~~DISQUS~~+