首先,顶点法线都是从面法线加权平均计算得到。所以有两个维度,一是哪些面参与计算,二是权重如何计算。

一 哪些面参与计算
如果建模工具导出了光滑组,那么方案一是直接使用光滑组信息,属于同一个光滑组的面参与计算。
方案二是同时使用光滑组信息以及面的夹角的阈值。
方案三是只使用面的夹角阈值。此时需要注意的是,由于建模工具没有导出光滑组,也就是说所有三角形都是默认同一个光滑组,那么如果三角形有共享顶点,且满足夹角阈值,就需要将共享顶点复制出来,对应不同的法线。

二 权重如何计算
简单方案是没有权重,共享顶点的三角形对该顶点法线的贡献一样。但是这样会有一些问题。
参考这个文章:Weighted Vertex Normals
此文的作者开发了一个3dMax插件,可以计算顶点法线。在文章中作者提出如果没有权重存在两个问题:
1)非常小的面也会对顶点法线产生比较大的影响。
2)在同一平面上的两个三角形对顶点法线的影响重复了。
所以在这篇文章里面,作者采用三角形面积作为权重解决第一个问题,采用共享顶点的三角形从该顶点出发的两条边的夹角作为权重解决第二个问题。这两个权重相乘即可。
我一开始理解采用夹角作为权重,以为是两个面的夹角(即第一个维度用于阈值判断的夹角),但是实际操作时发现这个似乎没什么意义,而此篇文章作者讲述的方案比较有意义。只是文章中伪代码计算向量的地方似乎反了,或者说那不是减号而是一个记号。

顶点法线计算的几种方式相关推荐

  1. 相似度计算的三种方式

    相似度计算的三种方式 欧几里德评价 欧几里得度量(euclidean metric)(也称欧式距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离 ...

  2. 含根式的定积分计算_三种方式计算不定积分∫x√(x+1)dx。

    原标题:三种方式计算不定积分∫x√(x+1)dx. 主要内容: 通过根式换元.分项凑分以及分部积分法等相关知识,介绍不定积分∫x√(x+1)dx的三种计算方法和步骤. 根式换元法: 设√(x+1)=t ...

  3. 【bzoj 4455】小星星(树型DP+容斥原理+dfs建树和计算的2种方式)

    题意:给一个n个点的图和一个n个点的树,求图和树上的点一一对应的方案数.(N<=17) 解法: 1.在树的结构上进行tree DP,f[i][j]表示树上点 i 对应图上点 j 时,这个点所在子 ...

  4. padding卷积的两种方式“SAME”和“VALID”

    conv2d是常用的实现卷积的,Tensorflow调用Conv的api时,常用代码如下: 查看:https://tensorflow.google.cn/api_docs/python/tf/nn/ ...

  5. (简洁)面法线与顶点法线

    原文链接:https://blog.kokojia.com/game/b-56.html 每一个面都有自己的法线,在3D游戏中一个三角形代表一个面.法线通常可以用来进行光照计算,用来确定光照的强度如图 ...

  6. c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式

    C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth( ...

  7. Unity中计算面法线与顶点法线

    1.什么是法线 法线:是指始终垂直于某平面的直线.在几何学中,法线指平面上垂直于曲线在某点的切线的一条线. 2.面法线与顶点法线 在 Max Wagner 的 <Generating Verte ...

  8. 计算MD5值有几种方式

    想知道计算"hello"的MD5值有几种方式 linux 命令行: [sm2env ~]# echo "hello" | md5sum | cut -d ' ' ...

  9. 算法017:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

    题目:三步问题.有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶或3阶.实现一种方法,计算小孩有多少种上楼梯的方式.结果可能很大,你需要对结果模1000000007.示例1:输入:n = ...

最新文章

  1. JSP利用servlet上传文件时的中文乱码问题
  2. 计算机二级日期格式,09年计算机二级辅导:指定格式的日期字符串转化成java.util.Date类型日期对象...
  3. 网页设计界面 电脑版设计
  4. 【深度学习】一文弄懂CNN及图像识别(Python)
  5. 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
  6. Algs4-2.1.17动画-插入排序
  7. WebView 在 APP 中的使用
  8. python与h5结合实例_使用h5py合并所有h5文件
  9. ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
  10. 太赞了!阿里巴巴AI每天服务全球10亿人
  11. 小程序分类左右内容联动
  12. Cardboard:虚拟现实怎样在国内最容易普及
  13. js中构造函数与普通函数的区别
  14. 数据结构笔记(二十九)--最小生成树(prim算法思想)
  15. 循环冗余校验(CRC,模2运算)
  16. java 中xsd文件在哪_在Java Eclipse项目中存储XSD文件的约定 - java
  17. Sass、Scss、Less和Stylus区别总结
  18. android 浏览器 查看证书,android浏览器弹出该网站的安全证书有问题如何解决
  19. verilog中的signed用法
  20. 《邱岳的产品实战》学习笔记:第9周

热门文章

  1. CPP全面总结(涵盖C++11标准)
  2. React 问题总结
  3. 移动端点击a标签后默认蓝色背景如何去除
  4. JS常用运算符及其优先级
  5. 曾国藩语录[修养篇]
  6. 生物信息学基础(包括Perl)
  7. CPen虚线无效问题
  8. 小红书用户画像分析_2020小红书爆品打造策略及案例分析!
  9. 微信号名称乱码什么情况_微信号可以改了但却不知道改什么?
  10. AVR单片机开发6——AVR单片机串口Proteus调试注意事项