山东大学计算机图形学期末复习整理5——CG10上
CG10上
-
Frenet-Serret框架
-
空间中一条曲线可以写成参数形式:
C ( u ) = ( x ( u ) , y ( u ) , z ( u ) ) \mathbf{C}(u) = (x(u), y(u), z(u)) C(u)=(x(u),y(u),z(u))
这表示:当参数 u u u 变化时,曲线在三维空间中移动,生成一条轨迹。每个参数值 u 0 u_0 u0 对应一个点 p = C ( u 0 ) \mathbf{p} = \mathbf{C}(u_0) p=C(u0)。 -
切线向量 T(Tangent Vector)
定义为曲线的一阶导数:
C u = d C ( u ) d u \mathbf{C}_u = \frac{d\mathbf{C}(u)}{du} Cu=dudC(u)
它表示曲线在点 p = C ( u 0 ) \mathbf{p} = \mathbf{C}(u_0) p=C(u0) 处的“切线方向”,也就是“曲线在这个点要往哪里走”的方向。单位切线向量记作:
T = C u ∥ C u ∥ \mathbf{T} = \frac{\mathbf{C}_u}{\|\mathbf{C}_u\|} T=∥Cu∥Cu -
二阶导数 Cuu 与曲率信息
曲线的二阶导数:
C u u = d 2 C ( u ) d u 2 \mathbf{C}_{uu} = \frac{d^2 \mathbf{C}(u)}{du^2} Cuu=du2d2C(u)
它反映了“切线变化的速度”,也就是曲率方向。但注意:它不一定垂直于切线。 -
如何从 Cuu 得到“法线向量 N”
因为 C u u \mathbf{C}_{uu} Cuu 不一定与切线垂直,所以我们要把它正交化,也就是去掉它在切线方向上的分量:
N = C u u − ( T ⋅ C u u ) T ∥ C u u − ( T ⋅ C u u ) T ∥ \mathbf{N} = \frac{\mathbf{C}_{uu} - (\mathbf{T} \cdot \mathbf{C}_{uu}) \mathbf{T}}{\|\mathbf{C}_{uu} - (\mathbf{T} \cdot \mathbf{C}_{uu}) \mathbf{T}\|} N=∥Cuu−(T⋅Cuu)T∥Cuu−(T⋅Cuu)T -
副法线的定义:
副法线(Binormal)是一个向量,与切线 T 和法线 N 都垂直,它保证了一个右手坐标系的存在。
B = T × N \mathbf{B} = \mathbf{T} \times \mathbf{N} B=T×N
也可以用一个更直接的定义来算:
B = C u × C u u ∥ C u × C u u ∥ \mathbf{B} = \frac{\mathbf{C}_u \times \mathbf{C}_{uu}}{\|\mathbf{C}_u \times \mathbf{C}_{uu}\|} B=∥Cu×Cuu∥Cu×Cuu
它本质上描述了曲线弯曲所在的平面法向量。 -
三个向量构成 Frenet-Serret 框架
- T \mathbf{T} T:切线,方向
- N \mathbf{N} N:法线,朝向曲率中心
- B \mathbf{B} B:副法线,保证三维正交系统
这个三元组 T , N , B \mathbf{T}, \mathbf{N}, \mathbf{B} T,N,B 就叫做Frenet-Serret Frame,在计算机图形学、机械臂、路径规划中非常常见。
-
切向量:
对参数曲面 S ( u , v ) S(u, v) S(u,v),求偏导:
- ∂ u S = ∂ S ∂ u \partial_u S = \frac{\partial S}{\partial u} ∂uS=∂u∂S 是曲面沿 u 方向的切向量;
- ∂ v S = ∂ S ∂ v \partial_v S = \frac{\partial S}{\partial v} ∂vS=∂v∂S 是曲面沿 v 方向的切向量。
这两个向量定义了曲面在点 S ( u , v ) S(u,v) S(u,v) 处的“局部方向”。
切平面:
由这两个切向量张成的平面称为切平面,它是曲面在该点的一阶近似,即局部的“平面化”。
任何落在这个切平面上的向量都可以表示为:
w = a ⋅ ∂ u S + b ⋅ ∂ v S w = a \cdot \partial_u S + b \cdot \partial_v S w=a⋅∂uS+b⋅∂vS -
法向量(Normal Vector)
n = ∂ u S × ∂ v S \mathbf{n} = \partial_u S \times \partial_v S n=∂uS×∂vS
通常会单位化,得:
n ^ = ∂ u S × ∂ v S ∥ ∂ u S × ∂ v S ∥ \hat{\mathbf{n}} = \frac{\partial_u S \times \partial_v S}{\|\partial_u S \times \partial_v S\|} n^=∥∂uS×∂vS∥∂uS×∂vS -
曲面微分属性
-
法平面(Normal Plane):
在一个曲面点处,通过该点和法向量方向构成的平面。
-
法截线(Normal Section):
法平面与曲面相交得到一条曲线,称为法截线。它描述了曲面在该方向上的“弯曲性”。
-
法曲率(Normal Curvature):
法截线的曲率称为法曲率。因为通过一个点有无数个方向(即无数个法平面),所以有无数个法曲率。
-
-
主曲率与主方向(Principal Curvatures & Directions)
主曲率:
在所有方向上的法曲率中,有两个极值:
- 最大的称为 K max K_{\max} Kmax
- 最小的称为 K min K_{\min} Kmin
它们分别沿着某两个正交方向,称为主方向。
主曲率定义了曲面在该点的最大/最小弯曲强度。
-
各向同性与各向异性(Isotropic vs Anisotropic)
-
各向同性:
如果曲面在该点处的所有方向的法曲率都一样,即:
K max = K min > 0 K_{\max} = K_{\min} > 0 Kmax=Kmin>0
那么该点是各向同性的,比如球面上的任意点,向任何方向看都一样。- 特例:如果 K max = K min = 0 K_{\max} = K_{\min} = 0 Kmax=Kmin=0,那该点是平坦的,例如平面。
-
各向异性:
如果两个主曲率不同,说明表面在不同方向上的弯曲程度不同,即各向异性,并分为:
类型 条件 例子 椭圆型 K min > 0 , K max > 0 K_{\min} > 0, K_{\max} > 0 Kmin>0,Kmax>0 椭球表面 抛物型 K min = 0 , K max > 0 K_{\min} = 0, K_{\max} > 0 Kmin=0,Kmax>0 抛物面 双曲型 K min < 0 , K max > 0 K_{\min} < 0, K_{\max} > 0 Kmin<0,Kmax>0 马鞍面
-
-
主曲率的计算:
通常来自于一个称为**形状算子(Shape Operator)**的矩阵,它是法向量随参数方向变化的度量,求其特征值可得主曲率。
在计算中经常用:
K max , K min = eigvals ( S ) K_{\max}, K_{\min} = \text{eigvals}(S) Kmax,Kmin=eigvals(S) -
高斯曲率(Gaussian Curvature):
K = K min ⋅ K max K = K_{\min} \cdot K_{\max} K=Kmin⋅Kmax
- 如果 K > 0 K > 0 K>0:像球一样凸;
- 如果 K < 0 K < 0 K<0:像马鞍一样弯;
- 如果 K = 0 K = 0 K=0:平坦或呈抛物型。
-
平均曲率(Mean Curvature):
H = 1 2 ( K min + K max ) H = \frac{1}{2}(K_{\min} + K_{\max}) H=21(Kmin+Kmax)
它衡量的是整体的弯曲程度,常用于表面平滑(如 Laplace 平滑)和模拟物理形变。
-
-
网格质量(Mesh Quality)
-
定义:
网格质量描述了一个几何模型的离散表示(通常是三角网格)在几何、光滑性、拓扑规则性和可视性等方面的优劣。
高质量网格意味着:
- 表面平滑;
- 形状还原真实;
- 无严重畸变;
- 可支持高质量渲染或数值模拟。
-
网格质量的几何度量
(1) 弯曲能量(Strain Energy)
公式:
E = ∫ S ( κ 1 2 + κ 2 2 ) d A E = \int_S (\kappa_1^2 + \kappa_2^2) \, dA E=∫S(κ12+κ22)dA- κ 1 , κ 2 \kappa_1, \kappa_2 κ1,κ2:主曲率;
- d A dA dA:曲面上的面积元素。
含义:
- 这是衡量表面“弯曲强度”的能量;
- 弯曲越剧烈,能量越大;
- 平滑表面能量低,尖锐区域能量高。
📌 应用:用于光滑化算法或曲面重建中,控制曲率突变。
(2) 曲率变化量(Variation of Curvature)
E = ∫ S ( ( ∂ κ 1 ∂ t 1 ) 2 + ( ∂ κ 2 ∂ t 2 ) 2 ) d A E = \int_S \left( \left( \frac{\partial \kappa_1}{\partial t_1} \right)^2 + \left( \frac{\partial \kappa_2}{\partial t_2} \right)^2 \right) dA E=∫S((∂t1∂κ1)2+(∂t2∂κ2)2)dA
- 表示曲率随某一方向(如切向)变化的剧烈程度。
用途:
- 检测表面是否过于“起伏不定”;
- 过大的变化常表示几何噪声或采样不良。
-
网格质量的视觉评估方法
我们无法总是计算积分能量,因此常使用图形学视觉工具进行直观判断。
(1) 镜面高光(Specular Shading)
- 模拟真实光照产生的高光区域;
- 表面平滑 → 高光连续;
- 表面不平滑 → 高光断裂或斑驳。
高光是对法向量连续性的“放大镜”。
(2) 反射线(Reflection Lines)
- 虚拟“反射条纹”模拟物体映射周围环境;
- 条纹不连续、破碎 → 表面不光滑;
- 可检测高阶法向量变化。
反射线的可微性比曲面低一阶(如果曲面是 C 2 C^2 C2,反射线是 C 1 C^1 C1),对法向不连续极其敏感。
(3) 平均曲率与高斯曲率可视化
- 平均曲率 H H H:
- H = κ 1 + κ 2 2 H = \frac{\kappa_1 + \kappa_2}{2} H=2κ1+κ2
- 高值区域表示鼓起或凹陷。
- 高斯曲率 K K K:
- K = κ 1 ⋅ κ 2 K = \kappa_1 \cdot \kappa_2 K=κ1⋅κ2
- 用于识别曲面类型(球面、鞍面等)
-
网格质量原则(Principles)
总结所有度量和可视化方法,抽象为四大原则:
(1) 光滑性 Smoothness
- 表面应无法向突变;
- 曲率连续,避免尖角或高频振动;
- 关键指标:平均曲率、反射线连续性。
(2) 低噪声 Low Geometric Noise
- 指网格点无“跳动”;
- 常由扫描误差或压缩失真引起;
- 滤波和平滑算法可减少噪声。
(3) 网格规则性(Regularity)
- 网格元素(如三角形)应尽可能接近理想形状(等边);
- 避免出现“长针”“瘦帽”等畸形三角形。
形状分析:
- Circumradius / shortest edge:
- 外接圆半径/最短边;
- 值越大越畸形。
常见畸形:
- Needle:一条边极短;
- Cap:一角极小,像帽子;
- 两者都会引起插值不稳定、渲染噪声。
(4) 低畸变 Low Distortion
- 网格应尽可能忠实地表示原始几何;
- 拉伸或压缩会导致纹理失真、动画失效;
- 关键指标:面积/角度保持性、Jacobian determinant。
按ppt是这四个:
- 光滑性
- 低的几何噪声
- 网格的动态划分
- 低复杂性
- 三角形形状
- 数值健壮性
- 特征保持
- 低的法向噪声
-
网格质量优化(Mesh Optimization)
核心目标:
- 提升光滑性;
- 保持几何特征;
- 消除畸形元素。
方法:
- 重采样(Remeshing):重新生成网格,使其规则。
- 光滑算法(Fairing):
- Laplacian smoothing;
- Taubin smoothing;
- Mean curvature flow;
- 能量最小化:如最小二乘曲率能量。
-
-
网格噪声与网格光滑
-
什么是网格噪声?
- 定义:真实世界中通过3D扫描(如激光、结构光)得到的三角网格模型中常包含高频、不规则的小扰动,这些即为“网格噪声”。
- 常见来源:
- ✳️ 激光扫描仪 / 投影扫描仪的测量误差;
- ✳️ 环境光照/反射干扰;
- ✳️ 逆向工程中点云拟合误差。
-
网格噪声的特征
- 局部小突起或凹陷;
- 曲率变化剧烈;
- 不能被肉眼立即识别但影响后续计算(如纹理贴图、物理仿真)。
-
网格质量评估指标
-
曲率相关指标
-
平均曲率 H:
H = κ 1 + κ 2 2 H = \frac{\kappa_1 + \kappa_2}{2} H=2κ1+κ2 -
高斯曲率 K:
K = κ 1 ⋅ κ 2 K = \kappa_1 \cdot \kappa_2 K=κ1⋅κ2 -
高曲率处往往是噪声或尖锐几何特征。
-
-
能量函数
-
Strain Energy(应变能):
E = ∫ S ( κ 1 2 + κ 2 2 ) d A E = \int_S (\kappa_1^2 + \kappa_2^2) \, dA E=∫S(κ12+κ22)dA -
表示曲面弯曲“剧烈程度”,越剧烈则能量越高。
-
-
视觉分析
- Specular Shading:高光断裂表明法向不连续;
- Reflection Lines:反射线不平滑表明曲率突变;
- Curvature Map:颜色映射曲率变化,红色表示“危险区”。
-
-
网格去噪的目标与挑战
-
网格光滑(Mesh Smoothing)方法
-
核心思想
通过移动网格顶点(不改拓扑)来减少噪声、改善三角形质量、增强视觉平滑性。
-
基本流程(形状演化)
P new = P old + λ H ( P old ) \mathbf{P}_{\text{new}} = \mathbf{P}_{\text{old}} + \lambda \mathcal{H}(\mathbf{P}_{\text{old}}) Pnew=Pold+λH(Pold)
- P new \mathbf{P}_{\text{new}} Pnew:更新后顶点位置;
- λ \lambda λ:步长(控制光滑程度);
- H \mathcal{H} H:光滑算子(如 Laplace 算子);
-
显式 vs 隐式 光滑方法
方法 形式 优点 缺点 显式(Explicit) M n + 1 = M n + λ L ( M n ) \mathbf{M}_{n+1} = \mathbf{M}_n + \lambda \mathbf{L}(\mathbf{M}_n) Mn+1=Mn+λL(Mn) 简单、直观 需小步长,容易不稳定 隐式(Implicit) ( I − λ L ) M n + 1 = M n (\mathbf{I} - \lambda \mathbf{L})\mathbf{M}_{n+1} = \mathbf{M}_n (I−λL)Mn+1=Mn 稳定,可用大步长 需要求解线性系统,复杂
-
-
-
拉普拉斯光滑(Laplacian Smoothing)
-
核心思想
拉普拉斯光滑等价于一种“扩散过程” —— 就像热量在金属中扩散一样,网格顶点也向“邻域平均”方向流动。
数学模型(连续形式):
d P d t = L ( P ) \frac{d\mathbf{P}}{dt} = \mathbf{L}(\mathbf{P}) dtdP=L(P)
其中 P \mathbf{P} P 是顶点位置, L \mathbf{L} L 是拉普拉斯算子,代表“顶点 - 邻居中心”的方向。 -
拉普拉斯算子的定义(邻域平均)
最基本的均匀拉普拉斯算子定义为:
L ( v i ) = ∑ j ∈ N ( i ) 1 ∣ N ( i ) ∣ ( v j − v i ) \mathbf{L}(v_i) = \sum_{j \in N(i)} \frac{1}{|N(i)|}(v_j - v_i) L(vi)=j∈N(i)∑∣N(i)∣1(vj−vi)- N ( i ) N(i) N(i):顶点 v i v_i vi 的邻居集合;
- 表示顶点朝“邻域平均位置”移动。
也可以表示为:
v i new = v i + λ ∑ j ∈ N ( i ) w i j ( v j − v i ) v_i^{\text{new}} = v_i + \lambda \sum_{j \in N(i)} w_{ij} (v_j - v_i) vinew=vi+λj∈N(i)∑wij(vj−vi)
其中 w i j w_{ij} wij 是邻居 j j j 对 i i i 的影响权重。
-
-
加权拉普拉斯(Weighted Laplacian)
为更好反映网格几何特征,引入不同的加权策略:
1. Umbrella Weights(雨伞权重)
w i j = 1 ∣ N ( i ) ∣ w_{ij} = \frac{1}{|N(i)|} wij=∣N(i)∣1
- 所有邻点贡献相等;
- 简单但容易模糊尖锐特征。
2. Mean Value Weights(均值权重)
w i j = tan ( ϕ i j / 2 ) + tan ( ϕ i j + 1 / 2 ) w_{ij} = \tan(\phi_{ij}/2) + \tan(\phi_{ij+1}/2) wij=tan(ϕij/2)+tan(ϕij+1/2)
- ϕ \phi ϕ 是邻域角;
- 对于非均匀三角网格,效果优于 Umbrella。
3. Cotangent Weights(余切权重)
w i j = cot ( α i j ) + cot ( β i j ) w_{ij} = \cot(\alpha_{ij}) + \cot(\beta_{ij}) wij=cot(αij)+cot(βij)
- α i j , β i j \alpha_{ij}, \beta_{ij} αij,βij:边对角的两个角;
- 准确地考虑了网格局部几何;
- 广泛用于曲率估计和几何优化。
-
保留细节:限制沿法线方向平滑
为防止顶点在切向方向滑动导致细节丢失,可以只让顶点在法线方向上移动:
P new = P old + λ ⋅ ( L ( P old ) ⋅ n ) ⋅ n \mathbf{P}_{\text{new}} = \mathbf{P}_{\text{old}} + \lambda \cdot (\mathbf{L}(\mathbf{P}_{\text{old}}) \cdot \mathbf{n}) \cdot \mathbf{n} Pnew=Pold+λ⋅(L(Pold)⋅n)⋅n- n \mathbf{n} n:顶点法向量;
- 只在法线方向投影位移;
- 可以保留曲线棱边或结构特征。
-
拉普拉斯光滑等价于最小化以下二次能量函数:
E ( P ) = ∑ ( i , j ) ∈ edges ∥ v i − v j ∥ 2 E(\mathbf{P}) = \sum_{(i,j)\in \text{edges}} \| v_i - v_j \|^2 E(P)=(i,j)∈edges∑∥vi−vj∥2
- 这个能量表示“网格的不平滑程度”;
- 最小化该能量可使边尽可能均匀,曲面趋于光滑。
-
拉普拉斯光滑中的特征保留技术详解
-
为什么需要特征保留的拉普拉斯光滑?
问题:
标准的拉普拉斯光滑通过顶点向邻居平均位置靠拢来减少噪声,但也容易模糊模型的重要几何特征(如折线边、尖角、细节部位)。目标:
在实现整体平滑的同时,保留曲面重要形状结构。 -
形状保留方法概览
方法类型 原理 实现方式 固定点 / 区域 直接不动某些点 设置拉普拉斯为 0,即 L ( v i ) = 0 L(v_i) = 0 L(vi)=0 软约束 局部减少光滑强度 对不同区域设定不同 λ \lambda λ,如边缘附近小、内区大 全局优化 整体建模优化问题 一次性求解全局最小二乘问题 面约束 限制局部面片的重心变化 防止局部形状偏移 特征检测 预识别需保留的结构 边缘检测、法向量变化检测等 -
全局拉普拉斯光滑框架(Global Smoothing)
优势
- 一次性求解整个网格的顶点位置;
- 更适合配合多种约束;
- 具有数值稳定性和整体性。
-
添加约束实现特征保留
-
顶点约束(Vertex Constraints)
目的:保持某些关键点(如边缘、尖角)位置不变。
形式:
-
软约束:
∥ L X ′ ∥ 2 + μ − 2 ∑ i ∈ C ∥ v i ′ − v i ∥ 2 \| L X' \|^2 + \mu^{-2} \sum_{i \in C} \| v_i' - v_i \|^2 ∥LX′∥2+μ−2i∈C∑∥vi′−vi∥2 -
强约束(硬约束):
v i ′ = v i 直接固定 v_i' = v_i \quad \text{直接固定} vi′=vi直接固定
结果:保留特征点,其他区域仍可平滑。
-
-
面约束(Face Constraints)
目的:限制面片的整体形状变化(如三角形的重心不偏移)。
能量函数:
min X { ∥ L X ′ ∥ 2 + ∑ ⟨ i , j , k ⟩ ∈ T λ 2 ∥ ( v i ′ + v j ′ + v k ′ ) − ( v i + v j + v k ) ∥ 2 } \min_X \left\{ \| L X' \|^2 + \sum_{\langle i,j,k \rangle \in T} \lambda^2 \left\| (v_i'+v_j'+v_k') - (v_i+v_j+v_k) \right\|^2 \right\} Xmin⎩ ⎨ ⎧∥LX′∥2+⟨i,j,k⟩∈T∑λ2 (vi′+vj′+vk′)−(vi+vj+vk) 2⎭ ⎬ ⎫- T T T:所有三角面片索引集合;
- 控制重心不变,保留局部形状;
- 参数 λ \lambda λ 控制保留强度。
-
其他线性约束
约束类型 用途 边约束 保留边的长度或方向,避免折线模糊 一阶邻域重心约束 控制小区域不整体漂移 法向量约束 保持曲面的朝向不变(例如用于光滑法向) -
总目标函数为:
min X { ∥ L X ′ ∥ 2 + ∑ i ∈ C μ ∥ v i ′ − v i ∥ 2 + ∑ ⟨ i , j , k ⟩ ∈ T λ 2 ∥ ( v i ′ + v j ′ + v k ′ ) − ( v i + v j + v k ) ∥ 2 } \min_X \left\{ \| L X' \|^2 + \sum_{i \in C} \mu \| v_i' - v_i \|^2 + \sum_{\langle i,j,k \rangle \in T} \lambda^2 \| (v_i'+v_j'+v_k') - (v_i+v_j+v_k) \|^2 \right\} Xmin⎩ ⎨ ⎧∥LX′∥2+i∈C∑μ∥vi′−vi∥2+⟨i,j,k⟩∈T∑λ2∥(vi′+vj′+vk′)−(vi+vj+vk)∥2⎭ ⎬ ⎫
- 第一项:拉普拉斯平滑能量;
- 第二项:顶点位置保留;
- 第三项:面片重心保留;
- 参数 μ , λ \mu, \lambda μ,λ:控制权重,平衡保留与光滑程度。
-
线性系统求解方法
设系统矩阵为 A A A,未知顶点为 x x x,构成超定系统:
A x = b A x = b Ax=b
使用最小二乘法解得:
x = ( A T A ) − 1 A T b x = (A^T A)^{-1} A^T b x=(ATA)−1ATb
优点:- 数值稳定;
- 可加入任意线性约束;
- 利用稀疏矩阵求解器效率更高。
-
特征检测用于约束预处理
为自动设置约束位置,可使用启发式特征检测方法,例如:
✅ 法向量变化检测
- 若相邻面片法向量夹角大于阈值 → 识别为折线;
- 这些点加入顶点约束集合 C C C。
✅ 曲率检测(可选)
- 利用高斯曲率 / 平均曲率高值区识别尖角;
- 保留这些高曲率点或边界。
输入网格 → 特征检测 → 添加约束(点、面) ↓构造拉普拉斯矩阵 + 约束矩阵↓求解最小二乘系统↓输出平滑网格(保留特征)
-
-
-
视图
- 定义视图:从不同角度或方式观察物体生成的图像。
- 视图生成的关键因素:
- 物体本身的几何形状和尺寸。
- 观察者的视点位置和观察方向。
-
图形渲染管线(Graphics Pipeline):
- 几何管线:
- 变换(Transform):包括模型变换、视图变换、投影变换。
- 裁剪(Clip):移除视体外的几何体。
- 投影(Project):将3D场景映射到2D平面。
- 像素管线:处理像素操作(如纹理映射、颜色混合)。
- 框架:OpenGL程序控制管线,渲染结果存储在帧缓冲区(Frame Buffer)。
- 几何管线:
-
视图生成相关的变换类型:
- 3D变换:模型的平移、旋转、缩放等。
- 视图变换:将世界坐标系转换为相机坐标系。
- 相机变换:调整相机位置和方向(与视图变换类似)。
- **投影变换:**将3D场景映射到2D平面,分为:
- 正交投影(Orthographic):平行投影,保持尺寸不变。
- 透视投影(Perspective):模拟人眼,远处的物体显得更小。
-
经典视图的三个基本元素:
- 物体:需要渲染的3D几何体。
- 观察者与投影面:观察者的视点和投影平面(如屏幕)。
- 投影线:从物体到投影面的映射路径。
-
投影:将3D场景映射到2D平面。
两种主要投影类型:
- 正交投影:投影线平行,保持物体尺寸。
- 透视投影:投影线汇聚于一点,模拟远近大小变化。
-
平面几何投影的分类:
- 平行投影:
- 多视图正交投影:如正面、顶面、侧面图。
- 轴测投影:
- 等轴测(Isometric):三个轴角度相等。
- 二轴测(Dimetric):两个轴角度相等。
- 三轴测(Trimetric):三个轴角度不同。
- 斜投影:投影线与投影平面非垂直。
- 透视投影:
- 一点透视:一个消失点。
- 两点透视:两个消失点。
- 三点透视:三个消失点。
- 平行投影:
-
计算机视图生成的三个关键步骤:
- 相机定位:通过模型-视图矩阵(model-view matrix)设置相机位置和方向。
- 选择镜头:通过投影矩阵(projection matrix)定义投影类型(如透视或正交)。
- 裁剪:定义视体(view volume),移除体外的几何体。
-
OpenGL相机模型的默认设置:
- 相机与物体坐标系初始重合(单位模型-视图矩阵)。
- 相机位于原点,朝负z轴方向。
- 默认视体:边长为2的立方体,中心在原点。
- 默认投影矩阵:单位矩阵,相当于正交投影。
-
相机移动的实现:
通过旋转和平移序列调整相机到任意位置。
示例(侧视图):
glTranslatef(0.0, 0.0, -d); glRotatef(-90.0, 0.0, 1.0, 0.0);
- 旋转相机(绕y轴旋转-90°)。
- 平移相机(沿负z轴移动d)。
参数 解释 -90.0
旋转角度,单位是度(degree)。负号表示 顺时针旋转(沿指定轴的右手法则反方向) 0.0, 1.0, 0.0
旋转轴向量,即绕哪个轴旋转。这里是绕 y 轴 旋转,因为只有 y 分量是 1 模型-视图矩阵:C = T * R(先旋转后平移)。
**变换顺序:最后定义的变换(旋转)先应用,然后是平移。**即,后定义先使用
完整:
glMatrixMode (GL_MODELVIEW) glLoadIdentity(); glTranslatef(0.0, 0.0, -d); glRotatef(-90.0, 0.0, 1.0, 0.0);
-
视口内容的四个相机参数:
- 相机位置:视点坐标。
- 观察方向:相机指向的方向。
- 相机朝向:相机的上下方向(避免翻转)。
- 视口大小:投影平面的尺寸。
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz)
-
眼位置:相机所在点。
-
观察点:相机指向的点,定义观察方向。view direction=(atx-eyex, aty-eyey, atz-eyez)
-
上向量:定义相机的朝上方向,避免翻转。
gluLookAt生成模型-视图矩阵,将世界坐标系变换到相机坐标系。
相关文章:

山东大学计算机图形学期末复习整理5——CG10上
CG10上 Frenet-Serret框架 空间中一条曲线可以写成参数形式: C ( u ) ( x ( u ) , y ( u ) , z ( u ) ) \mathbf{C}(u) (x(u), y(u), z(u)) C(u)(x(u),y(u),z(u)) 这表示:当参数 u u u 变化时,曲线在三维空间中移动,生成一条轨…...

STM32移植LVGL8.3 (保姆级图文教程)
目录 前言设备清单2.8寸TFT-LCD屏原理与应用1️⃣基本参数2️⃣引脚说明3️⃣程序移植4️⃣硬件接线 LVGL8.3 移植流程1️⃣硬件及平台要求2️⃣版本说明3️⃣源码下载4️⃣源码移植 工程配置修改配置文件1️⃣lvgl_config.h2️⃣适配屏幕驱动3️⃣配置输入设备(触摸功能) 提供…...
AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解
在 MCU(单片机)项目中,我们经常需要与各种通信模组(GSM、Wi-Fi、蓝牙等)交互。而这类模组通常都通过串口(UART)与 MCU 通信,控制它们的“语言”就是——AT 指令。 一、什么是 AT 指…...

虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系
虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系1.Default Pawn与Camera的关系1.1. Default Pawn 是什么?1.2. Default Pawn 的主要组件1.3. Default…...

C++多态的详细讲解
【本节目标】 1. 多态的概念 2. 多态的定义及实现 3. 抽象类 4. 多态的原理 5. 单继承和多继承关系中的虚函数表 前言 需要声明的,本博客中的代码及解释都是在 vs2013 下的 x86 程序中,涉及的指针都是 4bytes 。 如果要其他平台下,部…...

vue项目启动报错
vue项目启动报错 一、问题二、解决 一、问题 从vue2更换到vue3之后,需要将node进行版本升级,之后启动项目出现了下面的问题。 Uncaught Error: A route named “PageNotFound” has been added as a child of a route with the same name. Route names …...
项目删除了,为什么vscode中的git还是存在未提交记录,应该怎么删除掉
Git的本地仓库(.git文件夹)可能仍然存在,即使项目文件已删除VSCode可能缓存了之前的Git状态Git的索引未被正确清理 解决方法: 彻底删除仓库: 确保完全删除项目文件夹及其中的.git目录或者在终端中执行 rm -rf .git&am…...

免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了
1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…...

SecureCRT 使用指南:安装、设置与高效操作
目录 一、SecureCRT 简介 1.1 什么是 SecureCRT? 1.2 核心功能亮点 1.3 软件特点 二、SecureCRT 安装与激活 2.1 安装步骤(Windows 系统) 2.2 激活与破解(仅供学习参考) 三、基础配置与优化 3.1 界面与编码设…...

Tomcat多应用部署与静态资源路径问题全解指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
web常见的攻击方式
web攻击(webAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码、修改网站权限、获取网站用户隐私等等,即使是代码在的很小的bug也有可能导致隐私信息被泄漏,站点安全就是保护站点不受未授权的…...

【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等
前言 又到熟悉的前言,接到个需求,要引入高德地图api,我就记录一下,要是有帮助记得点赞、收藏、关注😁。 后续有时间会慢慢完善一些文章:(画饼时间) map组件自定义气泡、mark标记点…...
java中如何优雅处理多租户系统的查询?
多租户系统通常是指一个应用服务多个客户(租户),每个租户的数据需要隔离,确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先,我应该明确多租户的实现方式。常见的多租户数据…...

排序算法之线性时间排序:计数排序,基数排序,桶排序详解
排序算法之线性时间排序:计数排序、基数排序、桶排序详解 前言一、计数排序(Counting Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析1.4 适用场景 二、基数排序(Radix Sort)2.1 算法原理2…...

Linux | mdadm 创建软 RAID
注:本文为 “Linux mdadm RAID” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Linux 下用 mdadm 创建软 RAID 以及避坑 喵ฅ・ﻌ・ฅ Oct 31, 2023 前言 linux 下组软 raid 用 mdadm 命令,multi…...
物联网工程毕业设计课题实践指南
1. 智能家居控制系统 1.1 基于ZigBee的智能家居控制 实践过程 硬件选型主控:CC2530/CC2531传感器:温湿度、光照、人体红外执行器:继电器、电机、LED灯系统架构 A[传感器层] --> B[ZigBee网络] B --> C[网关] C --> D[云平台] D --> E[手机APP] 开…...

CodeEdit:macOS上一款可以让Xcode退休的IDE
CodeEdit 是一款轻量级、原生构建的代码编辑器,完全免费且开源。它使用纯 swift 实现,而且专为 macOS 设计,旨在为开发者提供更高效、更可靠的编程环境,同时释放 Mac 的全部潜力。 Stars 数21,719Forks 数1,081 主要特点 macOS 原…...

LLaMA-Factory 微调 Qwen2-7B-Instruct
一、系统环境 使用的 autoDL 算力平台 1、下载基座模型 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com # (可选)配置 hf 国内镜像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat -…...

mac本地docker镜像上传指定虚拟机
在Mac本地将Docker镜像上传至指定虚拟机的完整步骤 1. 在Mac本地保存Docker镜像为文件 通过docker save命令将镜像打包为.tar文件,便于传输至虚拟机。 # 示例:保存名为"my_image"的镜像到当前目录 docker save -o my_image.tar my_image:ta…...

从代码学习深度学习 - 风格迁移 PyTorch版
文章目录 前言方法 (Methodology)阅读内容和风格图像预处理和后处理抽取图像特征定义损失函数内容损失 (Content Loss)风格损失 (Style Loss)全变分损失 (Total Variation Loss)总损失函数初始化合成图像训练模型总结前言 大家好!欢迎来到我们的深度学习代码学习系列。今天,…...

软件设计师考试《综合知识》设计模式之——工厂模式与抽象工厂模式考点分析
软件设计师考试《综合知识》工厂模式与抽象工厂模式考点分析 1. 分值占比与考察趋势(75分制) 年份题量分值占总分比例核心考点2023111.33%抽象工厂模式适用场景2022222.67%工厂方法 vs 抽象工厂区别2021111.33%工厂方法模式结构2020111.33%简单工厂模式…...

轻量级离线版二维码工具的技术分析与开发指南
摘要 本文介绍一款基于本地化运行的轻量级二维码处理工具。该工具采用标准QR Code规范实现,具备完整的生成与识别功能。通过实测验证其核心功能表现及适用场景。 主要功能模块分析 编码生成模块:支持文本/URL等多种数据类型转换;提供尺寸调…...
中级网络工程师知识点4
1.Portal认证:可以以网页的形式为用户提供身份认证和个性化信息服务。如台式电脑,笔记本,手机等智能终端 2.MAC认证:无法安装和使用802.1X客户端软件的终端,如打印机,门禁等非智能终端 3.CAPWAP隧道&…...

机器学习--特征工程具体案例
一、数据集介绍 sklearn库中的玩具数据集,葡萄酒数据集。在前两次发布的内容《机器学习基础中》有介绍。 1.1葡萄酒列标签名: wine.feature_names 结果: [alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phenols, flavanoi…...
LeetCode 每日一题 2025/5/12-2025/5/18
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/12 2094. 找出 3 位偶数5/13 3335. 字符串转换后的长度 I5/14 3337. 字符串转换后的长度 II5/15 2900. 最长相邻不相等子序列 I5/16 2901. 最长相邻不相等子序列 II5/17 …...

Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览
文章目录 前言SceneCaptureComponent2D实现步骤新建渲染目标新建材质UI控件激活3DPreview鼠标拖动旋转模型最后前言 我们在(电商展示/角色预览/装备查看)等应用场景中,经常会看到这种3D展示的页面。 即使用相机捕获一个3D的模型的视图,然后把这个视图显示在一个UI画布上,…...

电机控制杂谈(25)——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?
1. 背景 最近都在写论文回复信。有个审稿人问了一个问题——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?同时,为什么相电流五、七次谐波电流会在dq基波旋转坐标系构成六次谐波电流? 回答这个问题挺简单的,但在网…...

多模态大语言模型arxiv论文略读(七十八)
AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文标题:AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文作者:Zhen Xing, Qi Dai, Zejia Weng, Zuxuan W…...
项目中把webpack 打包改为vite 打包
项目痛点: 老vu e-cli1创建的项目,项目是ERP系统集成了很多很多管理,本地运行调试的时候,每次修改代码都需要等待3分钟左右的编译时间,严重影响开发效率. 解决方案: 采用vite构建项目工程 方案执行 第一步 使用vite脚手架构件一个项目,然后把build文件自定义的编译逻辑般到…...

【C语言】易错题 经典题型
出错原因:之前运行起来的可执行程序没有关闭 关闭即可 平均数(average) 输入3个整数,输出它们的平均值,保留3位小数。 #include <stdio.h> int main() {int a, b, c;scanf("%d %d %d", &a, &…...