首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正确变换曲面法线

正确变换曲面法线
EN

Stack Overflow用户
提问于 2012-05-15 00:06:07
回答 4查看 9.3K关注 0票数 6

根据OpenGL红皮书附录F,一个规则的三维变换矩阵M可以用来计算法向量上的作用,如:

代码语言:javascript
运行
AI代码解释
复制
normalTransformed = transpose(inverse(M)) * normal

然而,虽然与变换后的法线相关联的正交平面确实与变换后的曲面平行,但可能发生的情况是,变换后的法向量本身正指向与我预期相反的方向,即“进入”曲面,而不是“离开”曲面。

如果我想让normalTransformed指向正确的方向(也就是说,当它所连接的表面未被转换时,它所指向的方向相同),那么我应该如何从数学上做到这一点呢?

示例

假设我的曲面法线是(0,0,1),而我的变换是Z方向上10的平移。然后,变换矩阵M是:

1 0 0 0

0 1 0 0

0 0 1 10

0 0 0 1

转座子(反向(M))则是:

1 0 0 0

0 1 0 0

0 0 1 0

0 0 -10 1

适用于齐次坐标下的曲面法线(0,0,1),即(0,0,1,1),这给出:

normalTransformed = (0,0,1,-9)

从齐次坐标返回:

(0,0,-1/9)

正规化至长度1:

(0,0,-1)

它指向与原始法向量(0,0,1)相反的方向。

EN

回答 4

Stack Overflow用户

发布于 2012-05-15 01:23:32

应用于齐次坐标下的曲面法线(0,0,1),即(0,0,1,1)

好了,停在那儿。

如果你要把曲面法线看作齐次坐标,你用一个零作为W分量,而不是1。现在,你可能很快就会意识到你不能除以零,但这也是为什么你不对法线做齐次的数学。

正常不是一个位置,而是一个方向。方向没有位置,所以翻译它们是没有意义的。具有W=0的同构位置表示一个无限远的“位置”(这就是为什么您不能将它们分开)。无限远的位置与每一个有限的点都是无限远的。

因此,在无穷远处的位置就是一个方向:它不会改变方向,不管你从什么(有限)位置看它。

现在,如果您有一个4x4矩阵,并且需要通过它来转换一个法线,那么您只需要使用W=0,因为它可以解决数学问题。它去掉了矩阵的翻译成分。后变换W分量应完全忽略。

因此,在转换之后,您可以得到以下内容:

normalTransformed = (0,0,1,-9)

在忽略W组件之后,它变成:

normalTransformed = (0,0,1)

更有可能的是,你的正常人实际上并没有在正确的方向上开始。当然,在没有代码和数据的情况下,可以说的不多了,但假设输入是合法的,那么数学就可以工作。

另外,不要在着色器中做反/转置。在CPU上执行,并将生成的矩阵传递给着色器。

票数 19
EN

Stack Overflow用户

发布于 2012-05-15 15:17:59

问题是,您被w坐标除以,就好像您的正常值是一个点一样。(当使用w<0时,这种划分将逆转您的正常情况。)相反,您需要完全忽略w-coordinate:完全放弃它,而不是按照它进行除法。

你的法线不是一个点,它在技术上是一个协向量(这就是为什么它与点和向量不同的原因)。它实际上没有一个w-coordinate --添加它的唯一原因是为了方便使用现有的4x4矩阵例程。

如果确实添加了任意的w-coordinate,则具有给定法线的平面的齐次坐标。像法线一样,这样的平面也是由变换点的矩阵的逆转置来转换的(注意,用它的w-coordinate除以平面也是没有意义的--平面也不是点!)

如果法线是从三角形派生出来的,则三角形的平面应该具有这个法线--然而,法线显式缺乏确定该平面是哪个平面的w-coordinate。将任意的w添加到法线(无论是01还是其他什么)意味着选择带有该法线的任意平面,因此转换它将产生一个与转换的法线相同的任意平面;这就是为什么在用4x4矩阵进行转换后,需要忽略w

票数 2
EN

Stack Overflow用户

发布于 2012-05-15 04:33:22

Nicol Bolas在他的回答中所写的是绝对正确的,事实上,我不会重复这些概念。

但我在问题中注意到,有几点可能是有趣的。

首先,正规矩阵通常被定义为模型视图矩阵左上角3x3矩阵的逆的转置。这是因为法线不是用齐次位置来定义的,实际上,4x4矩阵是不必要的;如果您想使用整个模型视图矩阵,请按照Nicol Bolas的方向,但数学不变。(因为w是零)。

第二,你说过

,我希望normalTransformed指向正确的方向(也就是当它所连接的表面未被转换时所指向的相同方向),我应该如何从数学上做到这一点?

利用正态矩阵与模型变换进行相干变换(实际上,法矩阵是由模型视图矩阵导出的)。我可以从你的话中了解到,你想要的是正常而不是改变.实际上,你为什么要改变它?你可以直接使用“正常”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10596548

复制
相关文章
估计点云中的曲面法线
曲面法线是几何表面的重要属性,并且在诸如计算机图形应用的许多领域中被大量使用,应用在矫正光源产生的阴影和其他的视觉效果。
3D视觉工坊
2020/12/11
8100
估计点云中的曲面法线
估计点云中的曲面法线
曲面法线是几何表面的重要属性,并且在诸如计算机图形应用的许多领域中被大量使用,应用在矫正光源产生的阴影和其他的视觉效果。 给定几何表面,通常用垂直于曲面的向量来推断曲面上某一点法线的方向是很简单的。然而,由于我们获取的点云数据集代表真实表面上的一组点样本,因此有两种方法: 利用曲面网格划分技术,从获取的点云数据集中获取潜在面,然后从网格中计算曲面法线 使用近似法直接从点云数据集中推断曲面法线 本教程将针对后者,即给定点云数据集,直接计算点云中每个点的曲面法线
点云PCL博主
2020/12/03
1.4K0
估计点云中的曲面法线
点云法线
对于一个三维空间的正则曲面R(u, v), 点(u, v)处的切平面(Ru, Rv)的法向量即为曲面在点(u, v)的法向量。点云是曲面的一个点采样,采样曲面的法向量就是点云的法向量。
NT4.4
2019/10/17
2.5K0
点云法线
法线贴图
在游戏中经常会有这样的情况,就是一个平面——这个平面在现实中并不是一 个“平”面,例如砖墙的表面带有石质浮雕等等。
李小白是一只喵
2021/06/17
1.7K0
法线贴图
AdaFit:一种对基于学习的点云法线估计方法的新思考(ICCV2021)
AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds (2021-ICCV)
3D视觉工坊
2021/10/21
1.1K0
点云ICP注册
两个点云要注册在一块,一般分两个步骤:先做一个大致的对齐,也就是所谓的初始注册,一般可以通过一些可靠的点对来计算得到(如图3所示);然后在初始注册的基础上进行精细注册,提升注册的精度(如图4所示)。精细注册的方法,一般采用ICP算法,也就是最近点迭代的方法。
NT4.4
2019/10/17
2.6K0
点云ICP注册
基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)
原文链接:https://arxiv.org/pdf/1910.06727v1.pdf
3D视觉工坊
2020/12/11
1K0
基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)
PCL法线估计
平面的法线是垂直于它的单位向量。在点云的表面的法线被定义为垂直于与点云表面相切的平面的向量。表面法线也可以计算点云中一点的法线,被认为是一种十分重要的性质。 法线提供了关于曲面的曲率信息,这是它的优势。许多的PCL的算法需要我们提供输入点云的法线。为了估计它们,代码分析如下
点云PCL博主
2019/07/31
2.1K0
PCL法线估计
PCL点云特征描述与提取(1)
3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分,点云的识别。分割,重采样,配准曲面重建等处理大部分算法,都严重依赖特征描述与提取的结果。从尺度上来分,一般分为局部特征的描述和全局特征的描述,例如局部的法线等几何形状特征的描述,全局的拓朴特征的描述,都属于3D点云特征描述与提取的范畴,
点云PCL博主
2019/07/31
2.8K0
PCL点云特征描述与提取(1)
PCL 特征模块
包含了用于点云数据估计三维特征的数据结构和功能函数,三维特征是空间中某个三维点或者位置的表示,它是基于点周围的可用信息来描述几何的图形的一种表示。在三维空间中,查询点周围的方法一般是K领域查找。三维空间的特征点物理意义上与图像类似,都是使用一些具有显著特征的点来表示整个点云
点云PCL博主
2020/08/20
2.1K0
模拟试题B
1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( )
步行者08
2018/10/09
4.3K2
罗马曲面的旋转
大家看下,这个罗马曲面在左转还是右转呢? DynamicModule[{cols}, cols = RGBColor /@ {"#FFF4E1", "#E67A7A"}; Manipulate[ ParametricPlot3D[ Evaluate@ Table[{Cos[θ] Sin[θ] Sin[ϕ], Cos[θ] Sin[θ] Cos[ϕ], Cos[θ]^2 Cos[ϕ] Sin[ϕ]}, {θ, 0, 2 π, π/50}], {ϕ, 0, 2 π}, Plo
WolframChina
2018/05/31
9210
网格测量
生活当中,人们讨论中提到的曲率是哪一种曲率呢?我认为它并不是特指某类曲率,可能max(各类曲率)和它比较接近。比如一般认为圆柱也有非零曲率值,因为它的最大主曲率非零。
NT4.4
2019/10/30
1.3K0
网格测量
MasterCAM曲面类型
曲面:通过选取的两个或多个截面外形,利用参数化最小光滑熔接方式形成的一个平滑曲面。(各曲线串联起始点都应对齐,方向应相同,否则生成曲面扭曲。TYPE用了设置曲面类型C—曲线定义型曲面,P—参数型曲面,N—NURBS曲线,为C时没有举升曲面与选取截面外形间误差设置)
lrglu
2022/03/30
1.5K0
射影几何变换的基本原理
在上一篇文章中我完成了整个流出的前半部分:让用户从电脑中选择图片,自动制作成UE4贴花,并贴到地面上。本文讨论如何在非地面的平面/曲面上动态贴贴花。3D引擎中的贴花(decal)技术是以射影几何学为基础的投影材质,相比于表面材质(surface material),轻量的贴花材质在特定场合下有更好的性能,比如贴海报、静态液体、局部纹理,本文讨论贴花后半部分关于空间几何变换的基本原理。
Jean
2020/11/06
1.9K0
3D 可视化入门:渲染管线原理与实践
玩 3D 游戏的时候,有没有想过这些 3D 物体是怎么渲染出来的?其中的动画是怎么做的?为什么会出现穿模、阴影不对、镜子照不出主角的情况?要想解答这些问题,就要了解实时渲染。其中最基础的,就是渲染管线。
Tecvan
2021/12/09
7K1
3D 可视化入门:渲染管线原理与实践
UE5的Nanite刷屏?Unity破解Nanite几十亿面渲染只需三招
UE5宣传片发布之后,沸腾的不只是技术行业,很多其他行业的人都表示,朋友圈也都被刷屏,一脸懵逼。Nanite宣称可以渲染160亿的三角面,这些对你们行外人来说当然看不懂,我们行内人也是看的一脸懵逼。
放牛的星星
2020/07/10
9.4K0
从零开始一起学习SLAM | 点云到网格的进化
版权声明:本文为博主原创文章,未经博主允许不得转载。违者必究。 https://blog.csdn.net/electech6/article/details/86585330
用户1150922
2019/05/27
4.1K0
浅谈三维点云中的几何语义
本文介绍了点云中不可忽视的一项重要属性——几何语义,并尝试根据自己的理解和实践经验对其进行一些归纳总结,可能有些地方有理解有误,请大家抱着批判的态度学习。
3D视觉工坊
2021/03/19
1.2K0
浅谈三维点云中的几何语义
点击加载更多

相似问题

曲面法线

11

曲面法线OpenGL

11

绘制曲面的法线

11

GLSL -计算曲面法线

20

解析曲面的法线

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档