平面法向量计算

平面法向量知识介绍:

对于平面法向量计算实质就是:平面内两非平行向量的叉积(又称"外积、向量积、叉乘")为该平面的法向量。
根据两向量相乘的前后顺序计算得到两个方向相反的法向量。用公式表示为:
平面内两非平行法向量:a, b (c为法向量)
a×b = c
b×a = -c
上式合并即为:
a×b = -b×a
可见,同样是两个向量相乘,不同相乘顺序得到的向量方向是相反的。另外,平面内两非平行向量的叉乘得到的法向量方向判断方法为:
a×b的方向:右手四指同a方向一致,手掌不动,四手指逐渐弯向b靠近(无法弯向b?请自然的180翻转您的右手再试),拇指的指向就是a×b的方向,垂直于a和b所在的平面
b×a的方向:右手四指同b方向一致,手掌不动,四手指逐渐弯向a靠近,拇指的指向就是b×a的方向,垂直于b和a所在的平面
a×b的方向与b×a的方向是相反的,且有:a×b=-b×a

因此,在OpenGL中计算三角(四角)面片的法向量时,选取好两个非平行向量后,要得到正确的法向量(主要是方向正确),一定得注意两个向量相乘的顺序。

向量AC、AB,

AB×AC = 朝向屏幕外的法向量;

AC×AB = 朝向屏幕内的法向量;

如果point1~3属于3维空间,则具体计算步骤为:

用a表示向量AB,用b表示向量AC,则


其中,i、j、k为3维空间各维度的单位向量。

实战举例

相同的模型、环境光等条件,两个相反的法向量计算方式得到的模型效果如下:

   

顶点法向量

顶点法向量介绍:

顶点法向量:以此点为顶点的所有三角(四角)形的法向量之和即为顶点法向量。

以常见的OBJ文件的3D模型提供了所有顶点的法向量。

总结

1. 以常见的OBJ文件的3D模型提供了所有顶点的法向量,但未提供面的法向量,因此需要自己编写代码实现面的法向量计算。

2. 在OpenGL中为了加快计算速度,一定会将平面法向量和顶点法向量进行“向量归一化”处理。OpenGL顶点法向量归一化后可以加快计算速度。

衍生概念

向量归一化:

向量各分量之和等于1。归一化方法比较简单,因为非归一化的向量之和不一定是1,所以要将向量分别除以这几个向量之和,重新得出的数就是权重向量。比如:

你得到的向量为(0.68, 0.22, 0.09),它们的和是0.99,并不是1,所以要对其进行归一化处理。分别用
0.68/0.99 ;
0.22/0.99 ;
0.09/0.99 ;
然后四舍五入,最后得出的数为(0.6854 0.2213 0.0933),这些数值的和为1,所以叫归一化处理。

归一化的用处:是为了后面数据处理的方便,其次是保证程序运行时加快(各分量变小了)。因为归一化仍然保留着向量各分量的原有权重、特征。所以不会改变向量的原有特性,从而不会影响归一化前后的结果。

参考:

https://blog.csdn.net/nobleman__/article/details/79618331

https://blog.csdn.net/fisherwan/article/details/40897939

【OpenGL】平面法向量、顶点法向量的计算方法相关推荐

  1. Python 计算Mesh顶点法向量

    一.将顶点转为点云后利用点云计算法向量的方法 首先将.obj文件读入并将顶点转为点云存储为.pcd文件: import os import numpy as npdef read_obj(obj_pa ...

  2. 网格顶点法向量从世界坐标到切空间坐标转换:法向贴图高低模烘焙

    从世界坐标法向量到切空间法向量转换计算 目的 符号定义 世界坐标顶点法向量转切空间法向量 转换矩阵TtbnT_{tbn}Ttbn​的求解 TtT_{t}Tt​求解 TnT_{n}Tn​求解 TbT_{ ...

  3. OpenCV矩阵运算之顶点法向量计算

    OpenCV进行顶点法向量计算 先介绍一下我接触此题的背景.我需要将一个.obj文件中的vn即顶点法向量计算出来.现在有的数据是f(三角面片索引),v(顶点坐标),但是网上找的代码不是很多,逻辑也不是 ...

  4. 求一个平面上的法向量

    求一个平面上的法向量 定理:如果一条直线和平面的两条相交直线垂直,那么这条直线垂直于这个平面. 参考 已知三点求平面的法向量 -- 两种方法 切平面的法线方程 平面法线式方程 求空间直线与与平面的交点

  5. Win32 OpenGL编程 5 顶点数组详细介绍

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Win3 ...

  6. 空间点到平面的垂足坐标的计算方法以及matlab实现

    问题描述: 已知空间点坐标(x,y,z),并且知道三个点的坐标(不要共线!),求解空间点到平面投影坐标. 参考百度文库的这篇文章 空间点到平面的垂足坐标的计算方法 下面是matlab的代码: %% 变 ...

  7. OpenGL基础19:法向量与漫反射

    前置:OpenGL基础18:光照 一.法向量 法向量:垂直于当前点所在面的向量 无论是漫反射光照还是镜面光照,我们都需要知道当前反射点的法向量 单纯的对于一个顶点来讲,它肯定是没有法向量的,所以我们需 ...

  8. ThreeJs顶点法向量光照计算

    1.实现步骤 1.创建空几何体的法向量数据(类型数组) 2.创建属性缓冲区对象(生成法向量) 3.设置几何体的attributes属性的位置normal属性(将顶点赋给空几何体) 2.意义功能 法向量 ...

  9. 【NXOpen C#】获取平面对象的法向量

    通过面的Tag获取垂直于面的向量 说明:使用UF函数直接得到平面的法向,以及面中心点的UV坐标 代码示例 /// <summary>/// 获取面的向量与中心点坐标/// </sum ...

最新文章

  1. Java方法调用事件_Java中的事件处理和Java中actionPerformed方法的执行
  2. Java里的按值传递与引用传递
  3. 3.13. Notepad++中Windows,Unix,Mac三种格式之间的转换
  4. 使用ActiveMQ支持Spring Integration路由
  5. AUTOSAR从入门到精通100讲(一)-SPI、UART、I2C总线详解
  6. iview代码片段 去除水平menu底部横线
  7. 七月刚入职的阿里测试开发岗-高频知识整理,内附面试题答案
  8. Crossin先生的微信打飞机游戏(4)
  9. 正定矩阵和半正定矩阵
  10. 电路分析超详细思维导图
  11. Gym - 100886B 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest B - Game on Bipartite
  12. phython学习记录 基础篇
  13. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.5  商品摆放:营造氛围的搭配...
  14. AI创业时代!这9个方向有钱途;AIGC再添霸榜应用Lensa;美团SemEval2022冠军方法分享;医学图像处理工具箱… | ShowMeAI资讯日报
  15. JAVA梅森旋转随机算法_伪随机数生成算法-梅森旋转(Mersenne Twister/MT)
  16. 如何构建基于数字孪生的智慧全息路口
  17. mybatis-plus 读写空间数据 geometry类型
  18. 【C++学习】 第一课1——最初的最初
  19. Android的优化
  20. influxdb常用命令、influxdb增删改查、SpringBoot整合influxdb

热门文章

  1. 【转】JPEG压缩原理
  2. python pack是什么意思_python pack布局
  3. 机器学习---特征选择
  4. 创客教育在空间设计中的服务研究
  5. 北京创客空间 BEIJING MAXPACE的小站
  6. MP1584降压芯DC-DC设计总结
  7. vue项目部署服务器两个域名,Vue项目服务器部署之子目录部署方法_飛雲_前端开发者...
  8. <视觉>——Ground truth的含义
  9. oppo k7x和oppo k7哪个好 oppo k7x和oppo k7参数对比
  10. 数据仓库-dws层表的分区规划