生成点法线(Generating Vertex Normal)-应用版

来源:互联网 发布:服务器部署java项目 编辑:程序博客网 时间:2024/05/16 17:13

上一篇博文《生成点法线 》首先从理论的角度描述了点法线的含义,接着给出了一个生成点法线的标准算法,最后基于标准算法进行了一些改进。

如果你不喜欢读长篇的理论来了解知识;如果你比较喜欢通过一个Demo来了解知识;如果你对点法线的生成比较感兴趣。那么本文就是为你而写的。

本文组织如下:首先给出生成点法线的步骤;接着给出一个三角网格模型格式;最后基于该网格模型格式,给出一个生成点法线的函数。

点法线生成步骤:

  1. 1 生成面法线
  2. 2 对顶点数据进行预处理,使得通过给定的顶点就可以索引到其所在的所有三角形
  3. 3 对于任意一个顶点,得到其所在的所有三角形。选定其中一个三角形作为该顶点技术上所属的三角形,然后缓存其对应的面法线。然后对于其他的三角形,计算其面法线与缓存的面法线的点积,如果点积大于某一个阈值,则该面法线将应用于求点法线。否则该面法线将作为在该三角形中,该点的点法线。
  4. 4 将求得的点法线标准化。然后将它与参与计算点法线的面线所在三角形的该点联系起来。

三角网格模型格式:

  1. 1 该三角网格模型存储在一个二进制文件中
  2. 2 该三角网格模型由多个三角形组成
  3. 3 每个三角形由12个浮点数组成。前三个浮点数表示该三角形的面法线。后九个浮点数分别表示该三角形的三个顶点。
  4. 4 各个三角形之间没有分隔符

那么该文件看起来像是这样:GLfloat GLfloat GLfloat …

点法线生成函数剖析:

 

面法线效果图 vs 点法线效果图:

facet vertex

其中左图是面法线效果图,右图是点法线效果图。看起来差距还是很明显的。

原创粉丝点击