法线

转自:https://baike.baidu.com/item/%E6%B3%95%E7%BA%BF/6492874

法线是始终垂直于某平面的虚线。在数学几何中法线指平面上垂直于曲线在某点的切线的一条线。法线也应用于物理学上的平面镜反射上。

中文名

法线

外文名

normal line

性    质

始终垂直于某平面的虚线

命    名

公正无私,像个法官一样取名法线

概    念

过入射点垂直于镜面的直线

领    域

数学、物理

目录

  1. 定义
  2. 计算
  3. 应用

定义

编辑

法线,始终垂直于某平面的虚线。曲线的法线是垂直于曲线上一点的切线的直线,曲面上某一点的法线指的是经过这一点并且与该点切平面垂直的那条直线(即向量)。 [1] 

在物理学中过入射点垂直于镜面的直线叫做法线。

对于立体表面而言,法线是有方向的:一般来说,由立体的内部指向外部的是法线正方向,反过来的是法线负方向。

曲面法线的法向不具有唯一性;在相反方向的法线也是曲面法线。定向曲面的法线通常按照右手定则来确定。

计算

编辑

对于像三角形这样的多边形来说,多边形两条相互不平行的边的叉积就是多边形的法线。

用方程 ax + by + cz = d 表示的平面,向量 (a,b,c) 就是该平面的法向量

如果 S 是曲线坐标 x(st) 表示的曲面,其中 s 及 t 是实数变量,那么用偏导数叉积表示的法线为

  

如果曲面 S 用隐函数表示,点集合 (x,y,z) 满足 F(x,y,z) = 0,那么在点 (x,y,z) 处的曲面法线用梯度表示为

  

如果曲面在某点没有切平面,那么在该点就没有法线。例如,圆锥的顶点以及底面的边线处都没有法线,但是圆锥的法线是几乎处处存在的。通常一个满足Lipschitz连续的曲面可以认为法线几乎处处存在。

应用

编辑

曲面法线在定义向量场的曲面积分中有着重要应用。 在三维计算机图形学中通常使用曲面法线进行光照计算;参见朗伯余弦定律(Lambert's cosine law)。

三维软件中法线的运用

法线是用来描述表面的方向的,表面的方向很重要,比如你贴一张图在一个表面上,就像在玻璃上贴一个字,在反面看这个字就会是个反字,所以表面法线是有必要的。另外方向不一致也会导致无法焊接,UV翻转等。法线的正反对分UV贴材质的时候会有影响,如果法线是反的,你贴的材质也会反着看。三维软件中对于法线的显示与编辑几乎大同小异,如在MAYA中,即为:勾选Display菜单下 Polygons下 Face Normals可以看到,Polygons板块下的Normals菜单是关于法线的,其中最常用的是翻转法线命令,还有Mesh 菜单下Cleanup...命令是可以修正拓扑错误的,法线错误属于拓扑错误中的一种。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Three.js中,法线是指每个顶点的向量,用于计算光照和阴影。默认情况下,每个顶点都有一个法线数据,就像每一个顶点都有一个位置数据。可以通过设置几何体的顶点法线属性来定义法线数据。例如,以下代码创建了一个矩形平面,每个顶点都有一个法线数据: ```javascript // 矩形平面,无索引,两个三角形,6个顶点 const normals = new Float32Array([ 0, 0, 1, //顶点1法线( 向量 ) 0, 0, 1, //顶点2法线 0, 0, 1, //顶点3法线 0, 0, 1, //顶点4法线 0, 0, 1, //顶点5法线 0, 0, 1, //顶点6法线 ]); // 设置几何体的顶点法线属性 geometry.attributes.normal = new THREE.BufferAttribute(normals, 3); ``` 除了顶点法线属性,Three.js还提供了面法线属性,可以通过计算顶点法线的平均值来获得。在渲染时,Three.js会自动使用面法线来计算光照和阴影。 另外,如果需要在场景中绘制线条,可以使用THREE.Line对象。以下代码创建了一个由三个点组成的三角形,并使用THREE.LineBasicMaterial定义了线条的颜色: ```javascript const vertices = new Float32Array([ 0, 0, 0, 50, 0, 0, 0, 100, 0, ]); // 创建几何体对象 const geometry = new THREE.BufferGeometry(); geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3)); // 线材质对象 const material = new THREE.LineBasicMaterial({ color: 0x00ffff //线条颜色 }); // 创建线模型对象 const line = new THREE.Line(geometry, material); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值