法线的归一化和法线视图变换矩阵的正确设置

模型视图变换矩阵的推导 图形学上课的时候,????坐在第一排划拉瑟图 ,老师突然布置了个作业:推导mv变换的矩阵。常言道上山容易下山难之用轮一时爽,造轮火葬场 ,这可把????急坏了,周末就嗯搁这埋头一顿推。推了挺久的 今天记录一下过程。 mv矩阵的目的是将世界坐标系下的坐标转到相机坐标系下,即通过世界坐标表示相机坐标。其实就是一些平移和旋转变换,然后将坐标系转换即可。所以我们要求得两个变换的矩阵: 旋转变换矩阵 平移变换矩阵 然后把两个矩阵相乘,得到最终的变换矩阵 M,这个 M 矩阵左乘世界坐标系下的齐次坐标,能够帮助我们将 阅读详情

一、 

1、法线归一化的一个意思是:
       通过叉乘得到一个面的面法线,然后进行归一化的目的是,求得单位长度的向量,就是说,法线向量的x,y,z都要除以向量长度。因为法线长度和面积成正比,但光照不能随面积变化,所以取一个单位值。当然点法线需要考虑通过该点的所有面的面法线。
  2、法线的处理还有一个问题是:人们容易想到对法线向量,可以像模型顶点向量那样,通过乘以模型视图变换矩阵得到平移、旋转等变换后的结果。但事实是模型视图矩阵在某些情况下,不能用来变换法线向量,为什么?其中一个重要原因是模型视图矩阵的缩放变换,如果缩放在x,y,z三个方向是一致的(uniform),那么法线方向保持不变,变的只是长度,这就可以通过归一化修正这个影响。但如果在这三个方向上的缩放是不一致的,可以想象,法线就不再与三角形平面保持垂直了,那还叫法线么?透视变换也会使得法线产生变形。
       变换法线的正确矩阵是包含平移、旋转的模型视图变换矩阵M的逆的转置。OpenGL计算出的这个矩阵就保存在gl_NormalMatrix里。

 

二、

最近在处理3d模型过程中,法线有些模型的某些部分透明了,看到了应该贴在另一面外面的贴图竟然贴在了里面。 显然是法线错误。 曾一度搞不清问题所在。终于, 最近看到了一篇文章关于法线的,在变换中应该乘变换矩阵的,但是其中的原理表述的不够明白, 我经过推导,现记述如下:

    

    在三维空间中, 一个面可表述为: ax+by+cz+d=0;

    n=[a,b,c,d] p=[x,y,z,1]  则该面在空间中可表示为: nTp=0

    其中n为该面的法向量

    

    现在对p进行变换,p'=Rp  当然法向量也的变换, n'=Qn

    

    变换后, 处在该面上的任何点都应该满足:  

                     (n’)Tp’=0

    也就是 

          (Qn)T(Rp)=0

     

           NT(QTR)p=0

    也就是说

           QTR=I

    从而得到     (R可逆的情况下)

           Q=(R-1)T

           

    所以说法线的变换矩阵为模型变换矩阵的逆转置矩阵。


原文地址:http://www.cnblogs.com/wonderKK/p/4243897.html

Unity Shader矩阵变换详解 在Unity渲染管线中,模型变换涉及将3D模型从本地空间转换到屏幕空间的一系列数学操作,理解这些变换对于开发复杂Shader效果至关重要。主要坐标空间包括模型空间、世界空间、视图空间、裁剪空间和屏幕空间,每个空间都有其特定的用途和转换矩阵。通过使用组合矩阵如UNITY_MATRIX_MVP,可以减少矩阵乘法次数,提升性能。此外,避免在片元着色器中重复计算和预计算常量矩阵也是优化性能的有效策略。这些技术帮助开发者更高效地处理顶点变换,提升渲染效率。 阅读详情

相关推荐

用于多目标优化的归一化法向约束(NNC)算法:此代码实现了用于多目标优化的NNC算法。-matlab开发

该工具集包含以下文件: 1) NNCparam.m 生成运行 NNC 优化算法所需的参数。 2) NNC.m 运行优化算法。 此代码为 2 和 3 个目标实现了 NNC 算法,如下所述: A. Messac,A。Ismail-Yahaya和CA Mattson。 归一化的正常生成帕累托边界结构的约束方法和多学科优化第 25 卷,第 2 期(2003 年),86-98。 3) OPTroutine.m 实现 NNC 算法的优化例程。 4)CostFuntion.m 要优化的成本函数

法线向量如何归一化(Normalize)

介绍法线向量归一化的算法

Felix8Bit的专栏 1万+

IWR6843ISK+DCA1000EVM 本人遇到的所有报错和解决方案

本文详解了初次使用DCA1000EVM和mmave studio遇到的一系列的问题以及解决方法

2301_77883976的博客 3296

向量大小和归一化(vector magnitude & normalization)、向量范数(vector norm)、标量/向量/矩阵/张量

一、向量大小 首先一个向量的长度或者大小一般记为。上图中的平面向量的大小计算如下: 空间向量的大小计算如下: 维复向量的大小计算如下: 二、向量归一化 向量归一化即将向量的方向保持不变,大小归一化到1。向量的归一化向量为: 引用 【1】https://www.khanacademy.org/computing/computer-programming/programming-natural-simulations/programming-vectors/a/vect

liveshow021_jxb的博客 2万+

【数学建模】 进化计算与群体智能

遗传算法(GA)是一种用于优化和搜索问题的启发式算法。它模拟了自然选择的过程,其中个体通过遗传和变异进行繁殖,逐渐进化出更优的解。基本步骤初始化:生成初始种群。适应度评估:评估种群中每个个体的适应度。选择:根据适应度选择个体进行繁殖。交叉:选定个体对进行基因交换,生成新的后代。变异:对一些个体进行基因变异,以增加多样性。迭代:重复评估和繁殖过程,直至达到停止条件。粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。其灵感来源于鸟群觅食的行为。

weixin_42914989的博客 1113

Simulink中扩张状态观测器ESO搭建与参数整定实战

扩张状态观测器(ESO)是自抗扰控制(ADRC)的核心,用于估计系统总扰动并实时补偿。其原理是将扰动扩张为状态变量,通过观测器带宽配置增益,实现扰动估计。在Simulink中搭建ESO可直观验证连续与离散域性能,解决参数整定与噪声折中问题。典型应用包括运动控制、电力电子和机器人驱动。本文基于MATLAB/Simulink,详细讲解线性ESO的模型结构、参数计算、离散化实现及常见问题排查,帮助读者从零搭建并调试ESO仿真。

weixin_34116482的博客 221

归一化原来这么重要!深入浅出详解Transformer中的Normalization

©PaperWeekly 原创 ·作者 | 李国趸单位 | 浙江大学研究方向 | 少样本学习为了讲清楚 Transformer 中的归一化细节,我们首先需要了解下,什么是归一化,以及为什么要归一化。本文主要解决这两个问题:什么是归一化?为什要归一化?从函数的等高线说起1.1 函数的等高线是什么讨论一个二元损失函数的情况,即损失函数只有两个参数: 。下图就是这个损失函数的...

Paper weekly 6276

MacOS下微信小程序源码提取与逆向实战:从找到.wxapkg到完整还原

本文详细介绍了在MacOS系统下进行微信小程序源码提取与逆向分析的完整实战流程。从定位沙盒机制中的.wxapkg缓存文件,到搭建Node.js环境与配置wxappUnpacker工具链,再到执行核心反编译命令并处理分包等复杂情况,提供了清晰的操作步骤。文章还汇总了Node版本、依赖缺失、文件乱码等常见问题的解决方案,旨在帮助开发者、安全研究人员高效完成小程序安全审计与学习。

weixin_29246195的博客 1598

平面方程(Plane Equation)

平面方程(Plane Equation)   原文链接:http://www.songho.ca/math/plane/plane.html 翻译:罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议 平面方程 平面上的一点以及垂直于该平面的法线唯一定义了 3D 空间的一个平面。 (图一) 3D ...

weixin_33750452的博客 628

深度学习实战35-图卷积神经网络GCN模型的搭建与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战35-图卷积神经网络GCN模型的搭建与应用,GCN是一种用于处理图结构数据的深度学习模型,它可以捕捉节点之间的拓扑关系和局部特征,并进行图级别的预测和分类任务。下面将介绍如何搭建并应用GCN模型。

微学AI的博客 2226

华为OD机试真题 新系统 2026-04-22 Java&Go 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 259

【GLSL教程】(九)变换法线的矩阵是模型视图矩阵旋转子矩阵的逆的转置

现在假设G是正确变换法线的矩阵,同时模型视图矩阵的左上3×3子矩阵M可以正确变换切线T(T是一个向量,所以w成分为0)。一个法线是3个浮点数组成的向量,而模型视图矩阵是一个4×4的矩阵。另外,因为法线是一个向量,我们只需要变换它的方向,而模型视图矩阵中左上方的3×3子矩阵正好包含了旋转变换。有一种情况,在片断shader中可以避免归一化操作,那就是每个顶点法线方向相同,而且顶点法线是经过归一化的。注意,如果缩放是一致的(uniform),那么法线方向保持不变,变的只是长度,而且可以通过归一化修正这个影响。

danshiming的博客 651

【忍者算法】从拼积木到最长连续序列:一道别出心裁的数组题目|LeetCode 128 最长连续序列

本题核心:通过预处理数据结构来优化查找!

忍者算法的博客 737

法线变换

可以用单个矩阵对点、线、多边形和其他几何图形进行一致性变换。除此之外,还可以对线或多边形表面上的向量进行变换,但是却无法对表面法线(也可以是顶点的光照法线)这样一个非常重要的几何特征性进行变换。法线必须通过用来变换几何图形的逆矩阵的转置矩阵进行变换。因此,如果变换几何图形的矩阵为M,那么必须用下面的矩阵N来变换该几何图形的法线:                             N = (M-1)T

rabbit729的专栏 2854

使用SSC添加大量的SDO条目

使用SSC添加大量的SDO条目 SSC用表格添加SDO,PDO部分必须指定到0x1600和0x1A00分配TxPdo和RxPdo映射,在0x1C12和0x1C13分别分配到SM2和SM3。在0x6000和0x7000未指定的entry就是SDO部分。

PI_sunyang的博客 3165

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

法向量变换矩阵

本文是对 Lighthouse3d.com 上的文章的翻译, 主要讨论了为什么法向量的变换矩阵是基础向量的变换矩阵的逆转置变换矩阵

qq_40101251的博客 592

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

法线变换详解 和 3D 变换中法向量变换矩阵的推导

3D 变换中法向量变换矩阵的推导潘李亮 2003-11-23 xheartblue@etang.com 在一个 3D 几何管道中,输入的顶点要经过一系列的变换,最终变换到一个投影空间里来,去掉最后的一个 Z-坐标后就是一个规格化的 2D 的屏幕坐标。变换通常分成两个步骤,一是视图/模型变换(D3D 里把这个分开成了两个变换世界变换和视图变换),二是投影变换Project.

domzhaosh 8367

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

opengl 错切变换_【OpenGL】法线变换详解(Normal Transform) | 学步园

在图形学中,同样的一个模型视图变换矩阵可以用来变换点、线、多边形以及其它几何体,也可以变换多边形表面的切向量。比如:posEyeSpace = ModelViewMatrix * posModelSpace。但是,同样的方式通常却不能够用于法线的变换(注意:在有些情况下是可以的)。一、法线和顶点坐标的区别顶点坐标表示缺省的,而法线向量的表示缺省的。法线向量只能保证方向的一致性,而不能保证位置的一致...

weixin_42566451的博客 706

GLSL 其他说明

法线矩阵 在很多顶点shader中都用到了gl_NormalMatrix。这里将介绍这个矩阵是什么,以及它的作用。 大部分计算是在视图空间内完成的,主要原因是光照的运算要放在这个空间内,否则一些依赖观察点坐标的效果,比如镜面反射光就很难实现。 所以我们需要将法线变换到视图空间。变换一个顶点到视图空间的方法如下: vertexEyeSpace = gl_ModelViewMatrix *

hgl868的专栏 2746

法线变换详解 和 3D 变换中法向量变换矩阵的推导

两篇文章     法线变换详解(Normal Transform)   在图形学中,同样的一个模型视图变换矩阵可以用来变换点、线、多边形以及其它几何体,也可以变换多边形表面的切向量。比如: posEyeSpace = ModelViewMatrix * posModelSpace。 但是,同样的方式通常却不能够用于法线的变换(注意:在有些情况下是可以的)。   一、法线和顶点坐标...

成膜的博客 2297

法线变换详解(Normal Transform)

http://blog.youkuaiyun.com/xiajun07061225/article/details/7762711     在图形学中,同样的一个模型视图变换矩阵可以用来变换点、线、多边形以及其它几何体,也可以变换多边形表面的切向量。比如: posEyeSpace = ModelViewMatrix * posModelSpace。 但是,同样的方式通常却不能够用于法线的变换(注

痞子龙3D编程 1万+

3D图形开发必备:矩阵基础与四大变换矩阵详解

在计算机图形学与游戏开发领域,矩阵是描述空间变换的核心数学工具。其本质是一种组织数据的优雅方式,通过行与列的结构,将复杂的空间操作封装为统一的数学对象。矩阵的核心原理在于线性变换,它能够高效地表示旋转、缩放、平移等基本几何操作。在3D图形中,矩阵的技术价值尤为突出,它统一了GPU渲染管线的处理流程,通过矩阵乘法实现变换的组合与传递,极大提升了计算效率。齐次坐标的引入是关键一步,它将平移这一非线性操作融入矩阵乘法框架,使得所有变换都能被GPU以同一种并行化方式处理。应用场景广泛覆盖游戏引擎(如Unity、Un

weixin_30698297的博客 381
上一篇: unity, 替换shader渲染(Rendering with Replaced Shaders)
下一篇: [OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值