What & How & Why

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
vfx:houdini:concepts:geo:points_vertex [2017/08/24 05:40] – [Vertex] haregyvfx: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====
-\\ + 
-与 //Point// 不同的是,//Vertex// 是以 //Primitive// (面)为单位的。一个 //Primitive// 是由 //Vertex// 和 //Edges// 组成的。因此,对于有多个 //Primitive// 的复杂几何体,很可能会出现多个 //Vertex// 共享 一个 //Point// 的现象。+与 //Point// 不同的是,//Vertex// 是以 //Primitive// (面)为单位的。一个 //Primitive// 是由 //Vertex// 和 //Edges// 组成的。因此,对于有多个 //Primitive// 的复杂几何体,很可能会出现多个 //Vertex// 共享 一个 //Point// 的现象。而从几何上来说,//Vertex// 才是构成几何体的单位,//Point// 则只是为了操作方便而设计的一个概念
 \\ \\
 \\ \\
 <html><div align="center"> <html><div align="center">
-<img src="http://2222.sb/_media/vfx/houdini/concepts/geo/p_and_v.svg"  width="1000"/>+<img src="/_media/vfx/houdini/concepts/geo/p_and_v.svg"  width="750"/>
 </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~~+