VertexList(顶点列表)里的 normal(法线)

devtools/2025/2/12 7:19:22/

含义

在三维空间里,每个顶点的法线是一个单位向量(长度为 1),它垂直于该顶点所在的表面。对于平面来说,平面上所有顶点的法线方向是相同的;而对于曲面,每个顶点的法线方向通常会根据曲面的局部几何形状而有所不同。

作用

1. 光照计算

光照计算是法线最主要的应用场景之一。在大多数光照模型(如 Phong 光照模型、Blinn - Phong 光照模型等)中,法线用于确定光线与物体表面的夹角,从而计算出该点的光照强度。

  • 漫反射光照:漫反射是指光线在物体表面向各个方向均匀反射的现象。根据兰伯特余弦定律,漫反射光照的强度与光线方向和表面法线之间夹角的余弦值成正比。计算公式如下: \(I_d = k_d \times I_l \times \max(0, \vec{N} \cdot \vec{L})\) 其中,\(I_d\) 是漫反射光照强度,\(k_d\) 是漫反射系数,\(I_l\) 是入射光的强度,\(\vec{N}\) 是表面法线,\(\vec{L}\) 是光线方向。

  • 镜面反射光照:镜面反射是指光线以相同的角度从物体表面反射出去的现象。法线在镜面反射光照计算中也起着关键作用,用于确定反射光线的方向。

2. 背面剔除

背面剔除是一种优化技术,用于避免渲染那些从当前视角看不到的面(背面),从而提高渲染效率。通过比较顶点法线和视线方向,可以判断一个面是正面还是背面。如果法线与视线方向的夹角大于 90 度,则该面为背面,可以被剔除。

3. 平滑着色

在渲染曲面时,为了使物体表面看起来更加平滑,通常会对顶点法线进行插值。在渲染三角形时,会根据三个顶点的法线对三角形内部的每个像素的法线进行插值计算,然后使用插值后的法线进行光照计算,从而实现平滑的光照效果。

示例代码

以下是一个简单的顶点结构体示例,包含位置和法线信息:

struct Vertex
{DirectX::XMFLOAT3 position; // 顶点位置DirectX::XMFLOAT3 normal;   // 顶点法线
};

在实际应用中,顶点的法线信息通常在模型文件中定义,或者在生成模型时根据几何形状计算得到。在渲染过程中,这些法线信息会被传递给着色器,用于光照计算等操作。


http://www.ppmy.cn/devtools/158142.html

相关文章

代码随想录算法【Day40】

Day40 121. 买卖股票的最佳时机 class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();if (len 0) return 0;vector<vector<int>> dp(len, vector<int>(2));dp[0][0] - prices[0];dp[0][1] 0;for(int i 1; i…

Vue 3 中的 reactive 和 ref 有什么区别?

在 Vue 3 中,reactive 和 ref 是用于创建响应式状态的两个 API。虽然它们的目标都是使数据响应式,但它们的使用场景和实现方式有所不同。以下是它们之间的主要区别: 目录 何时使用 reactive 和 ref基本用法响应式对象的类型总结何时使用 reactive 和 ref reactive:适用于创…

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹&#xff0c;作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时&#xff0c;django-admin.exe安装的位置&#xff0c;例如 4.运行命令 使用django-admin.exe的绝对路径&#xff0c;在刚才打开的终端…

香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。

简介&#xff1a; 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas&#xff0c;这是一种简化的视频合成系统&#xff0c;用于电影镜头设计&#xff0c;提供整体运动控制&#xff0c;以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…

Unity使用iTextSharp导出PDF-04图形

坐标系 pdf文档页面的原点&#xff08;0&#xff0c;0&#xff09;在左下角&#xff0c;向上为y,向右为x。 文档的PageSize可获取页面的宽高数值 单位&#xff1a;像素 绘制矢量图形 使用PdfContentByte类进行绘制&#xff0c;注意文档打开后才有此对象的实例。 绘制方法 …

Anything llm Token数理解

Token context window参数解释 1. 定义与范围 Token context window&#xff08;上下文窗口&#xff09;参数同时包含输入和输出的token总数限制&#xff0c;表示模型单次交互中能够处理的最大token容量。例如&#xff1a;- GPT-4&#xff1a;典型窗口为32k tokens&#xff0c;…

使用 C++20 Modules 导入 Boost 模块的方法

使用 C20 Modules 导入 Boost 模块的方法 我的项目案例地址&#xff1a;https://github.com/yudaichen/coroutine_blog 引言 C20 引入的 Modules 特性为 C 开发带来了诸多好处&#xff0c;如加快编译速度、减少头文件重复包含等问题。Boost 作为一个广泛使用的 C 库集合&…

(3/100)每日小游戏平台系列

新增一个颜色记忆挑战&#xff01; 游戏目标 在游戏中&#xff0c;你需要记住系统展示的颜色顺序&#xff0c;并按照相同的顺序点击颜色按钮。如果你点击正确&#xff0c;你将进入下一关&#xff0c;难度会逐步提升。记忆力越强&#xff0c;得分越高&#xff01; 游戏规则 开始…