【计算机图形学 | 基于MFC三维图形开发】期末考试知识点汇总(下)

文章目录

  • 视频教程
  • 第四章 二维变换与裁剪
    • 矩阵基础回顾
    • 二维几何变换之 平移
    • 二维几何变换之 比例
    • 二维几何变换之 旋转
    • 二维几何变换之 反射
    • 复合变换
    • 直线裁剪:Cohen-Sutherland 算法
    • 直线裁剪:中点分割算法
    • 直线裁剪:Liang-Barsky 算法
    • 多边形裁剪:Sutherland-Hodgman 算法
  • 第五章 三维变换与投影
    • 三维几何变换之 平移
    • 三维几何变换之 比例
    • 三维几何变换之 旋转
    • 三维几何变换之 反射
    • 投影
    • 三视图的变换矩阵
    • 透视投影
  • 第六章 建模与消隐
    • 三维建模
    • 消隐

视频教程

孔令德 | 计算机图形学网上课堂:30个知识点的微课讲解

在这里插入图片描述

第四章 二维变换与裁剪

矩阵基础回顾

矩阵是一个由行和列组成的矩形阵列,其中的元素可以是数字、符号或数学表达式。例如,一个 2 × 3 2 \times 3 2×3的矩阵可以表示为:

A = ( a 11 a 12 a 13 a 21 a 22 a 23 ) A = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} A=(a11a21a12a22a13a23)

其中, a i j a_{ij} aij表示矩阵 A A A中第 i i i行第 j j j列的元素。

矩阵的加法:两个大小相同的矩阵 A A A, B B B 相加,结果是另一个矩阵 C C C

在这里插入图片描述
矩阵的乘法:设有两个矩阵 A A A B B B,其中 A A A 是一个 m × n m×n m×n 矩阵, B B B 是一个 n × p n×p n×p矩阵,那么它们的乘积 C C C,即 C = A B C = AB C=AB,是一个 m × p m×p m×p矩阵。

比如我们有两个3行3列的矩阵A和B:

A = ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) A = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix} A= a11a21a31a12a22a32a13a23a33

B = ( b 11 b 12 b 13 b 21 b 22 b 23 b 31 b 32 b 33 ) B = \begin{pmatrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{33} \end{pmatrix} B= b11b21b31b12b22b32b13b23b33

它们的乘积C = AB可以表示为:

C = A B = ( a 11 b 11 + a 12 b 21 + a 13 b 31 a 11 b 12 + a 12 b 22 + a 13 b 32 a 11 b 13 + a 12 b 23 + a 13 b 33 a 21 b 11 + a 22 b 21 + a 23 b 31 a 21 b 12 + a 22 b 22 + a 23 b 32 a 21 b 13 + a 22 b 23 + a 23 b 33 a 31 b 11 + a 32 b 21 + a 33 b 31 a 31 b 12 + a 32 b 22 + a 33 b 32 a 31 b 13 + a 32 b 23 + a 33 b 33 ) C = AB = \begin{pmatrix} a_{11}b_{11} + a_{12}b_{21} + a_{13}b_{31} & a_{11}b_{12} + a_{12}b_{22} + a_{13}b_{32} & a_{11}b_{13} + a_{12}b_{23} + a_{13}b_{33} \\ a_{21}b_{11} + a_{22}b_{21} + a_{23}b_{31} & a_{21}b_{12} + a_{22}b_{22} + a_{23}b_{32} & a_{21}b_{13} + a_{22}b_{23} + a_{23}b_{33} \\ a_{31}b_{11} + a_{32}b_{21} + a_{33}b_{31} & a_{31}b_{12} + a_{32}b_{22} + a_{33}b_{32} & a_{31}b_{13} + a_{32}b_{23} + a_{33}b_{33} \end{pmatrix} C=AB= a11b11+a12b21+a13b31a21b11+a22b21+a23b31a31b11+a32b21+a33b31a11b12+a12b22+a13b32a21b12+a22b22+a23b32a31b12+a32b22+a33b32a11b13+a12b23+a13b33a21b13+a22b23+a23b33a31b13+a32b23+a33b33


线性变换是从一个向量空间到另一个向量空间的函数 f f f,满足两个主要条件:加法性(additivity)和齐次性(homogeneity)。具体来说,对于任意向量 u \mathbf{u} u v \mathbf{v} v以及任意标量 c c c,线性变换满足:

  1. 加法性: f ( u + v ) = f ( u ) + f ( v ) f(\mathbf{u} + \mathbf{v}) = f(\mathbf{u}) + f(\mathbf{v}) f(u+v)=f(u)+f(v)
  2. 齐次性: f ( c u ) = c f ( u ) f(c\mathbf{u}) = cf(\mathbf{u}) f(cu)=cf(u)

线性变换可以通过矩阵乘法来实现。假设有一个线性变换 T T T,它可以用矩阵 M M M表示,那么对于任意向量 x \mathbf{x} x,其变换结果 y \mathbf{y} y可以通过以下方式计算:

y = M x \mathbf{y} = M\mathbf{x} y=Mx

其中, x \mathbf{x} x是一个列向量,表示输入向量, y \mathbf{y} y是变换后的列向量。


二维几何变换之 平移

比如我们有一个点 P ( x , y ) P(x, y) P(x,y),我们想将它平移 Δ x \Delta x Δx 在x轴方向和 Δ y \Delta y Δy 在y轴方向,那么平移后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标可以通过下面的公式计算得到:

x ′ = x + Δ x y ′ = y + Δ y \begin{align*} x' &= x + \Delta x \\ y' &= y + \Delta y \end{align*} xy=x+Δx=y+Δy

此时,这个变换可以通过一个特殊的3x3矩阵(变换矩阵 T T T)来表示。为了使用矩阵乘法,我们需要将二维坐标扩展到三维坐标,即 P = [ x , y , 1 ] P = [x, y, 1] P=[x,y,1]。这样,平移变换的矩阵 T T T 和变换后的点 P ′ P' P 可以表示为:

T = [ 1 0 0 0 1 0 Δ x Δ y 1 ] T = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \Delta x & \Delta y & 1 \end{bmatrix} T= 10Δx01Δy001

那么:

P ′ = P ⋅ T = [ x , y , 1 ] ⋅ [ 1 0 0 0 1 0 Δ x Δ y 1 ] = [ x + Δ x , y + Δ y , 1 ] P' = P \cdot T = [x, y, 1] \cdot \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \Delta x & \Delta y & 1 \end{bmatrix} = [x + \Delta x, y + \Delta y, 1] P=PT=[x,y,1] 10Δx01Δy001 =[x+Δx,y+Δy,1]

这样,通过矩阵乘法,我们可以很方便地计算出平移变换后的坐标点。


二维几何变换之 比例

二维坐标的比例变换(或称缩放变换)是另一种基本的几何变换,它根据给定的比例因子在x轴和y轴方向上分别改变点的坐标。

比如我们有一个点 P ( x , y ) P(x, y) P(x,y),想要根据比例因子 α \alpha α 在x轴方向和比例因子 β \beta β 在y轴方向上缩放这个点,那么缩放后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标可以通过下面的公式计算得到:

x ′ = α x y ′ = β y \begin{align*} x' &= \alpha x \\ y' &= \beta y \end{align*} xy=αx=βy

为了使用矩阵乘法,我们同样需要将二维坐标扩展到三维坐标,即 P = [ x , y , 1 ] P = [x, y, 1] P=[x,y,1]。这样,比例变换的矩阵 T T T 和变换后的点 P ′ P' P 可以表示为:

T = [ α 0 0 0 β 0 0 0 1 ] T = \begin{bmatrix} \alpha & 0 & 0 \\ 0 & \beta & 0 \\ 0 & 0 & 1 \end{bmatrix} T= α000β0001

那么:

P ′ = P ⋅ T = [ x , y , 1 ] ⋅ [ α 0 0 0 β 0 0 0 1 ] = [ α x , β y , 1 ] P' = P \cdot T = [x, y, 1] \cdot \begin{bmatrix} \alpha & 0 & 0 \\ 0 & \beta & 0 \\ 0 & 0 & 1 \end{bmatrix} = [\alpha x, \beta y, 1] P=PT=[x,y,1] α000β0001 =[αx,βy,1]


二维几何变换之 旋转

二维坐标的旋转变换可以根据旋转角度在平面内相对于原点对点进行旋转。旋转变换可以是逆时针(正)或顺时针方向(负)。

对于一个点 P ( x , y ) P(x, y) P(x,y),如果我们想将它相对于坐标原点旋转 θ \theta θ 角度,旋转后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标可以通过下面的公式计算得到:

x ′ = x cos ⁡ ( θ ) − y sin ⁡ ( θ ) y ′ = x sin ⁡ ( θ ) + y cos ⁡ ( θ ) \begin{align*} x' &= x \cos(\theta) - y \sin(\theta) \\ y' &= x \sin(\theta) + y \cos(\theta) \end{align*} xy=xcos(θ)ysin(θ)=xsin(θ)+ycos(θ)

那么变换矩阵 T T T 是:

T = [ cos ⁡ ( θ ) sin ⁡ ( θ ) 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 1 ] T = \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 \\ -\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} T= cos(θ)sin(θ)0sin(θ)cos(θ)0001

那么:

P ′ = P ⋅ T = [ x , y , 1 ] ⋅ [ cos ⁡ ( θ ) sin ⁡ ( θ ) 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 1 ] P' = P \cdot T = [x, y, 1] \cdot \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 \\ -\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} P=PT=[x,y,1] cos(θ)sin(θ)0sin(θ)cos(θ)0001

注意,上述式子是 绕原点逆时针旋转 的变换矩阵。如果是顺时针,可以将 θ \theta θ 取为负值,如下所示:

T = [ cos ⁡ ( − θ ) sin ⁡ ( − θ ) 0 − sin ⁡ ( − θ ) cos ⁡ ( − θ ) 0 0 0 1 ] = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 1 ] T = \begin{bmatrix} \cos(-\theta) & \sin(-\theta) & 0 \\ -\sin(-\theta) & \cos(-\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos(\theta) & -\sin(\theta) & 0 \\ \sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} T= cos(θ)sin(θ)0sin(θ)cos(θ)0001 = cos(θ)sin(θ)0sin(θ)cos(θ)0001

下面给出基本的三角函数值表格:

角度 sin ⁡ \sin sin cos ⁡ \cos cos tan ⁡ \tan tan
0 ∘ 0^\circ 0 0 0 0 1 1 1 0 0 0
3 0 ∘ 30^\circ 30 1 2 \frac{1}{2} 21 3 2 \frac{\sqrt{3}}{2} 23 1 3 \frac{1}{\sqrt{3}} 3 1
4 5 ∘ 45^\circ 45 2 2 \frac{\sqrt{2}}{2} 22 2 2 \frac{\sqrt{2}}{2} 22 1 1 1
6 0 ∘ 60^\circ 60 3 2 \frac{\sqrt{3}}{2} 23 1 2 \frac{1}{2} 21 3 \sqrt{3} 3
9 0 ∘ 90^\circ 90 1 1 1 0 0 0未定义

在这里插入图片描述


二维几何变换之 反射

二维坐标的反射变换矩阵,根据反射轴(原点、x轴、y轴)的不同而不同。

当一个点 P ( x , y ) P(x, y) P(x,y) 关于原点进行反射时,其变换后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标为 ( − x , − y ) (-x, -y) (x,y)。对应的变换矩阵 T 原点 T_{原点} T原点 为:

T 原点 = [ − 1 0 0 0 − 1 0 0 0 1 ] T_{原点} = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} T原点= 100010001

当一个点 P ( x , y ) P(x, y) P(x,y) 关于 x x x 轴进行反射时,其变换后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标为 ( x , − y ) (x, -y) (x,y)。对应的变换矩阵 T x 轴 T_{x轴} Tx 为:

T x 轴 = [ 1 0 0 0 − 1 0 0 0 1 ] T_{x轴} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} Tx= 100010001

同理,点 P ( x , y ) P(x, y) P(x,y) 关于y轴进行反射时,其变换后的点 P ′ ( x ′ , y ′ ) P'(x', y') P(x,y) 的坐标为 ( − x , y ) (-x, y) (x,y)。对应的变换矩阵 T y 轴 T_{y轴} Ty 为:

T y 轴 = [ − 1 0 0 0 1 0 0 0 1 ] T_{y轴} = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} Ty= 100010001


复合变换

当变换方向不与坐标轴重合时,我们可以先根据某个参考点,将其平移到原点位置,然后对平移后的图像进行变换,再根据参考点的位置移回原位。


单选题:图形变换中引入齐次坐标的目的是( C )。

A.便于实现缩放变换

B.便于实现平移变换

C. 统一表示几种基本变换,容易计算

D.便于实现错切变换


单选题:以下关于图形变换的论述不正确的是(D)。

A.平移变换不改变图形大小和形状,只改变图形位置

B.拓扑关系不变的几何变换不改变图形的连接关系和平行关系

C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变

D.复合变换可以使用一系列连续的简单变换代替, 将这些简单变换的变换矩阵累加起来就得到复合变换矩阵。

备注:是累乘,不是累加。


单选题:实现定点缩放,需要将模型的某个定点先平移到什么位置?(B)

A模型的中心

B坐标系原点

C模型的某个顶点

D以上都不对


单选题:二维图像中,使用下面的变换矩阵变换的结果是(A )。

[ 1 0 0 0 1 0 2 2 1 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 2 & 2 & 1 \end{bmatrix} 102012001

A.图形沿X轴,Y轴各平移2个单位

B.图形放大两倍

C.图形沿X轴,Y轴各平移1个单位,再放大两倍

D.图形不变


单选题:有二维三角形A(2,5)B(1,1)C(6,3),将其基于B点进行定点缩放,放大两倍,则变换之后A点坐标将变成?(B)

A.(4,10)

B. (3,9)

C. (2,8)

D.以上都不对

解析:

对于这道题,我们根据 B B B 点作为参考点,首先平移到坐标原点,此时变换矩阵为:

T 1 = [ 1 0 0 0 1 0 − 1 − 1 1 ] T_1 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -1 & -1 & 1 \end{bmatrix} T1= 101011001

然后将根据坐标原点放大两倍,此时变换矩阵为:

T 2 = [ 2 0 0 0 2 0 0 0 1 ] T_2 = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{bmatrix} T2= 200020001

最后再平移回去:

T 3 = [ 1 0 0 0 1 0 1 1 1 ] T_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 1 & 1 & 1 \end{bmatrix} T3= 101011001

由于A的坐标为(2,5),则设坐标A的齐次矩阵表示为:

P = [ 2 5 1 ] P = \begin{bmatrix} 2 & 5 & 1 \\ \end{bmatrix} P=[251]

代入以下公式,计算即可:

P ′ = P ⋅ T 1 ⋅ T 2 ⋅ T 3 = [ 3 , 9 , 1 ] P' = P \cdot T_1 \cdot T_2 \cdot T_3 = [3, 9, 1] P=PT1T2T3=[3,9,1]

因此答案为(3, 9)。


单选题:有二维三角形A(2,5)B(1,1)C(6,3),将其进行逆时针旋转90度,则旋转之后A点坐标将变成?(A)

A(-5,2)

B(5,2)

C.(5,-2)

D(-5,-2)

解析

由于A的坐标为(2,5),则设坐标A的齐次矩阵表示为:

P = [ 2 5 1 ] P = \begin{bmatrix} 2 & 5 & 1 \\ \end{bmatrix} P=[251]

代入以下公式,计算即可:

P ′ = [ 2 5 1 ] ⋅ [ cos ⁡ ( 9 0 ∘ ) sin ⁡ ( 9 0 ∘ ) 0 − sin ⁡ ( 9 0 ∘ ) cos ⁡ ( 9 0 ∘ ) 0 0 0 1 ] = [ − 5 , 2 , 1 ] P' = \begin{bmatrix} 2 & 5 & 1 \\ \end{bmatrix} \cdot \begin{bmatrix} \cos(90^\circ) & \sin(90^\circ) & 0 \\ -\sin(90^\circ) & \cos(90^\circ) & 0 \\ 0 & 0 & 1 \end{bmatrix} = [-5, 2, 1] P=[251] cos(90)sin(90)0sin(90)cos(90)0001 =[5,2,1]

因此答案为(-5,2)。


单选题:有二维三角形 A(2,5)B(1,1)C(6,3),将其基于 B点 进行定点逆时针旋转90度,则旋转之后A点坐标将变成?(A)

A.(-3,2)

B.(-4,1)

C.(-3,1)

D.(-3,-2)

解析

对于这道题,我们根据 B B B 点作为参考点,首先平移到坐标原点,此时变换矩阵为:

T 1 = [ 1 0 0 0 1 0 − 1 − 1 1 ] T_1 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -1 & -1 & 1 \end{bmatrix} T1= 101011001

然后将根据坐标原点逆时针旋转 9 0 ∘ 90^\circ 90 角,此时变换矩阵为:

T 2 = [ cos ⁡ ( 9 0 ∘ ) sin ⁡ ( 9 0 ∘ ) 0 − sin ⁡ ( 9 0 ∘ ) cos ⁡ ( 9 0 ∘ ) 0 0 0 1 ] = [ 0 1 0 − 1 0 0 0 0 1 ] T_2 = \begin{bmatrix} \cos(90^\circ) & \sin(90^\circ) & 0 \\ -\sin(90^\circ) & \cos(90^\circ) & 0 \\ 0 & 0 & 1 \end{bmatrix}= \begin{bmatrix} 0 & 1 & 0 \\ -1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} T2= cos(90)sin(90)0sin(90)cos(90)0001 = 010100001

最后再平移回去:

T 3 = [ 1 0 0 0 1 0 1 1 1 ] T_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 1 & 1 & 1 \end{bmatrix} T3= 101011001

由于A的坐标为(2,5),则设坐标A的齐次矩阵表示为:

P = [ 2 5 1 ] P = \begin{bmatrix} 2 & 5 & 1 \\ \end{bmatrix} P=[251]

代入以下公式,计算即可:

P ′ = P ⋅ T 1 ⋅ T 2 ⋅ T 3 = [ − 3 , 2 , 1 ] P' = P \cdot T_1 \cdot T_2 \cdot T_3 = [-3, 2, 1] P=PT1T2T3=[3,2,1]

因此答案为(-3,2)。


直线裁剪:Cohen-Sutherland 算法

算法思想:将裁剪面所在的平面划分成九个区域:

在这里插入图片描述
算法的核心思想是:

在这里插入图片描述

下面我们来详细看看。首先,这里的 4 位二进制码 R C = C 4 C 3 C 2 C 1 RC = C_4C_3C_2C_1 RC=C4C3C2C1 分别表示:

C 4 C_4 C4 C 3 C_3 C3 C 2 C_2 C2 C 1 C_1 C1
  • 第1位 C 1 C_1 C1:如果该端点位于窗口的左边,则 C 1 = 1 C_1 = 1 C1=1,否则 C 1 = 0 C_1 = 0 C1=0
  • 第2位 C 2 C_2 C2:如果该端点位于窗口的右边,则 C 2 = 1 C_2 = 1 C2=1,否则 C 2 = 0 C_2 = 0 C2=0
  • 第3位 C 3 C_3 C3:如果该端点位于窗口的下边,则 C 3 = 1 C_3 = 1 C3=1,否则 C 3 = 0 C_3 = 0 C3=0
  • 第4位 C 4 C_4 C4:如果该端点位于窗口的上边,则 C 4 = 1 C_4 = 1 C4=1,否则 C 4 = 0 C_4 = 0 C4=0

根据直线两个端点的编码规则进行一些位操作,我们可以清楚直线段所处的位置。

规则一:如果直线段两个端点的编码 按位或 的结果为0,即 R C 0 ∣ R C 1 = 0 RC_{0} | RC_{1} = 0 RC0RC1=0,说明线段在裁剪面内部需保留

大概长这样:

在这里插入图片描述
此时:

  • P 0 P_0 P0 的编码: R C 0 = 0000 RC_{0} = 0000 RC0=0000,即位于窗口的内部。
  • P 1 P_1 P1 的编码: R C 1 = 0000 RC_{1} = 0000 RC1=0000,即位于窗口的内部。

规则二:如果直线段两个端点的编码 按位并 的结果不等于 0,即 R C 0 & R C 1 ≠ 0 RC_{0} \& RC_{1} \neq 0 RC0&RC1=0,说明线段在裁剪面外部需删除

大概长这样:

在这里插入图片描述
此时:

  • P 0 P_0 P0 的编码: R C 0 = 0110 RC_{0} = 0110 RC0=0110,即位于窗口的右下。
  • P 1 P_1 P1 的编码: R C 1 = 0010 RC_{1} = 0010 RC1=0010,即位于窗口的右边。

规则三: 如果直线的位置既不满足“规则一”也不满足“规则二”,那么此时需要与窗口进行 “求交” 运算。

比如有这样的直线:
在这里插入图片描述

  • P 0 P_0 P0 的编码: R C 0 = 0010 RC_{0} = 0010 RC0=0010,即位于窗口的右侧。
  • P 1 P_1 P1 的编码: R C 1 = 0100 RC_{1} = 0100 RC1=0100,即位于窗口的下侧。

此时直线段必然与窗口边界(或者窗口边界的延长线相交),现在需要我们来计算一下与窗口的交点。设右边界与 P 0 P 1 P_0P_1 P0P1 的交点为 P P P

在这里插入图片描述

由于直线 P P 0 P P_0 PP0 在窗口的右边,所以删除(舍弃即可)。将 P P P 点的坐标与编码替换为 P 0 P_0 P0 点,并交换 P 0 P 1 P_0P_1 P0P1 的坐标及其编码,使得 P 0 P_0 P0 点总处于窗口之外:

在这里插入图片描述
由于直线 P P 0 P P_0 PP0 在窗口的下边,所以删除(舍弃即可)。将 P P P 点的坐标与编码替换为 P 0 P_0 P0 点,如下所示:

在这里插入图片描述


单选题:在Cohen-Sutherland直线裁剪算法中,假设两个端点的编码为C1,C2,则判断直线完全保留的判别式是( A )。

A.C1 | C2 == 0

B.C1 & C2 == 0

C.C1 || C2 == 0

D.C1 && C2 == 0


单选题:在Cohen-Sutherland直线裁剪算法中,假设两个端点的编码为C1,C2,则判断直线完全去除的判别式是( B )。

A C1 | C2 == 0

B C1 & C2 != 0

C C1 || C2 == 0

D C1 && C2 == 0


大题:设有如图所示的剪裁窗口和线段 P 1 P 2 P_1P_2 P1P2,试用 Cohen-Sutherland 线段剪裁算法写出图中各个区域的区域码,并详细叙述对直线 P 1 P 2 P_1P_2 P1P2 的剪裁过程。在这里插入图片描述

答:

裁剪过程如下:

  1. 首先,计算区域码:
    • P 1 P_1 P1的区域码 C 1 C_1 C1 0001 0001 0001
    • P 2 P_2 P2的区域码 C 2 C_2 C2 1000 1000 1000
  2. 区域测试 1:C1 | C2 = 1001 != 0000,证明不完全在裁剪面内部。
  3. 区域测试 2:C1 & C2 = 0000,证明不在裁剪面外部,需要进一步求交点。
  4. C1 & 0001 != 0 C1 & 0010 == 0C1 & 0100 != 0 C1 & 1000 == 0
  5. 解方程组,求出交点 P P P
  6. P 1 = P P_1 = P P1=P
  7. 交换 P 1 P_1 P1 P 2 P_2 P2 转 1.

直线裁剪:中点分割算法

核心思路:前几步和 Cohen-Sutherland 算法一样,但是在求交点时,通过不断二分线段并检测与窗口边界的交点来确定线段的可见部分。

算法步骤如下:

  1. 对线段两端点P1、P2进行编码得到C1、C2。
  2. 判断线段可见性:
    • C 1 = C 2 = 0 C1=C2=0 C1=C2=0 ,线段完全在窗口内,保留。
    • C 1 & C 2 ≠ 0 C1 \& C2 ≠0 C1&C2=0 ,线段完全在窗口外,舍弃。
    • 否则,需要求交点。
  3. 求交点过程(核心)
    • 确保窗外端点为P1,若不是则交换P1、P2。
    • 保留端点P2到暂存器。
    • 对P1重新编码得C1。
    • 使用中点公式求中点P,并编码得C。
    • 根据中点分割法规则调整P1或P2位置:
      • 若P1与P同侧(C1&C!=0),移动P1至P;
      • 否则,移动P2至P。
    • 重复上述过程,直至P1与P2足够接近,视为找到交点,然后从暂存器取出P2原始值,继续流程。

此算法通过逐步逼近的方式,有效地找到线段与窗口边界的交点,从而确定线段的可见部分。


单选题:中点分割法求交点的规则,当线段P1P2求出中点P后,如果P1与P不同侧,移动P2点,P1与P不同侧的表达式为:( ),其中,C1,C,C2分别是P1,P,P2点的区域编码。(D)

A.(C1&& C)!=0

B.(C1| C)!=0

C.(C1&& C)==0

D.(C1& C)==0


直线裁剪:Liang-Barsky 算法

L i a n g − B a r s k y Liang-Barsky LiangBarsky 算法是一种基于直线参数方程的裁剪算法,它将二维裁剪问题转化为一维裁剪问题,通过计算直线与裁剪窗口边界的交点来确定直线段在裁剪窗口内的可见部分。

设直线起点为 P 0 ( x 0 , y 0 ) P_0(x_0, y_0) P0(x0,y0),终点为 P 1 ( x 1 , y 1 ) P_1(x_1, y_1) P1(x1,y1),则直线参数方程为:

P = P 0 + t ( P 1 − P 0 ) P = P_0 + t(P_1 - P_0) P=P0+t(P1P0)

展开式为:

{ x = x 0 + t ( x 1 − x 0 ) y = y 0 + t ( y 1 − y 0 ) , 0 ≤ t ≤ 1 \begin{cases} x = x_0 + t (x_1 - x_0) \\ y = y_0 + t(y_1 - y_0) & , ~~~ 0\leq t \leq 1 \end{cases} {x=x0+t(x1x0)y=y0+t(y1y0),   0t1

设裁剪窗口的坐标为 ( w x l , w y t ) (wxl, wyt) (wxl,wyt) ( w x r , w y b ) (wxr, wyb) (wxr,wyb),则直线段的裁剪条件可以表示为一组不等式,将直线段与窗口边界的相交问题转化为参数 t t t 的一维裁剪问题。

通过定义 u n u_n un v n v_n vn 来表示直线段与裁剪窗口边界的关系,其中 n = 1 , 2 , 3 , 4 n=1,2,3,4 n=1,2,3,4 分别代表窗口的左、右、下、上边界。

裁剪条件可以统一表示为:

t ⋅ u n ≤ v n t \cdot u_n \leq v_n tunvn

裁剪窗口的每条边界线将平面分为两个区域:可见侧不可见侧。直线段从可见侧延伸到不可见侧或反之,通过计算 t m i n t_{min} tmin t m a x t_{max} tmax 来确定直线段在裁剪窗口内的可见部分。

L i a n g − B a r s k y Liang-Barsky LiangBarsky 算法的思路就是:

  • 对于直线段的起点:使用原来的起点 t = 0 t=0 t=0 和由外到内穿过裁剪框的交点判断,取其最大值;
  • 对于直线段的终点,使用原来的终点和由内到外穿过裁剪框的交点判断,取其最小值。

直线段位于窗口内的参数条件是: t m a x ≤ t m i n t_{max} \leq t_{min} tmaxtmin

注意:

  • 对于垂直直线段( Δ x = 0 \Delta x = 0 Δx=0),需要特别判断其是否在窗口的左右边界之内。
  • 对于水平直线段( Δ y = 0 \Delta y = 0 Δy=0),需要判断其是否在窗口的上下边界之内。

单选题:Liang-Barsky算法裁剪直线段时,对于直线段的起点,使用原来的起点t=0和由外到内穿过裁剪框的交点(入点)判断,取其最大值;对于直线段的终点,使用原来的终点和由内到外穿过裁剪框的交点(出点)判断,取其最小值。直线段位于窗口内的参数条件是 ( C ):

A. t m a x ≥ t m i n t_{max} \geq t_{min} tmaxtmin

B. t m a x > t m i n t_{max} > t_{min} tmax>tmin

C. t m a x ≤ t m i n t_{max} \leq t_{min} tmaxtmin

D. t m a x = t m i n t_{max} = t_{min} tmax=tmin


填空题:使用Liang-barsky直线裁剪算法裁剪下面的直线,回答下面的问题:

在这里插入图片描述
问题一:假设P1点为起点,P2点为终点,直线的方向从P1–>P2。则直线和上裁剪边的交点是【 ____ 】(填 出点 或者 入点),直线和右裁剪边的交点是【 ____ 】(填 出点 或者 入点)。

问题二:假设 t m a x = m a x ( 0 , t 入 ) t_{max} = max ( ~0, t_{入}) tmax=max( 0,t) t m i n = m i n ( 1 , t 出 ) t_{min} = min ( ~ 1, t_{出}) tmin=min( 1,t)。则满足【 ____ 】条件,直线部分在窗口内。

答案:

  • 【入点】、【出点】
  • t m a x ≤ t m i n t_{max} \leq t_{min} tmaxtmin

多边形裁剪:Sutherland-Hodgman 算法

Sutherland-Hodgman 裁剪算法又称为逐边裁剪算法,基本思想是用裁剪窗口的 4 条边依次对多边形进行裁剪。窗口边界的裁剪顺序无关紧要,这里采用 左、右、下、上 的顺序。

多边形裁剪算法的输出结果为裁剪后的多边形顶点序列

在算法的每一步中,仅考虑窗口的一条边以及延长线构成的裁剪线,该线把平面分为两部分:

  • 一部分包含窗口,称为可见侧
  • 另一部分落在窗口之外,称为不可见侧

对于裁剪窗口的每一条边,多边形的任一顶点只有两种相对位置关系,即位于裁剪窗口的外侧(不可见侧)或内侧(可见侧),共有4种情形:

在这里插入图片描述

设边的起点为 P k P_k Pk,终点为 P k + 1 P_{k+1} Pk+1,边与裁剪窗口的交点为 P P P ,则有以下四种情况:

  • 图 ( a ):将 P k P_k Pk 加入到输出列表中。
  • 图 ( b ):输出列表中不加入任何顶点。
  • 图 ( c ):将 P P P P k P_k Pk 加入到输出列表中。
  • 图 ( d ):将 P P P 加入到输出列表中。

每次处理后,输出一个顶点序列,作为下一次裁剪的输入。通过对多边形的每条边依次进行这样的裁剪处理,最终得到的顶点序列即为多边形关于矩形窗口裁剪后的结果。


单选题:在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点 P k P_k Pk 到端点 P k + 1 P_{k+1} Pk+1)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点。请问哪种情况下输出的顶点是错误的? ( C ) (C) (C)

在这里插入图片描述

A、 P k P_k Pk P k + 1 P_{k+1} Pk+1 均在可见的一侧,则 P k + 1 P_{k+1} Pk+1

B、 P P P P k + 1 P_{k+1} Pk+1 均在不可见的一侧,则输出 0 0 0 个顶点。

C、 P k P_k Pk 在可见一侧, P k + 1 P_{k+1} Pk+1 在不可见一侧,则输出线段 P k P k + 1 P_kP_{k+1} PkPk+1 与裁剪边的交点。

D、 P k P_k Pk 在不可见的一侧, P k + 1 P_{k+1} Pk+1 在可见的一侧,则输出线段 P k P k + 1 P_kP_{k+1} PkPk+1 与裁剪线的交点。

第五章 三维变换与投影

单选题:已知三维空间一点的齐次坐标为(4,6,8,2),这一点的空间坐标是:(B)

A.(4,6,8)

B.(2,3,4)

C.(4,6,8,2)

D.(2,3,4,1)

解析

这道题涉及到规范化齐次坐标 的知识点。

规范化齐次坐标是指将齐次坐标转换为其等价的最简形式,使得最后一个坐标(通常代表尺度因子)为1。在三维空间中,一个点的齐次坐标形式为 ((x, y, z, w)),其中 (w) 是尺度因子。要将这个齐次坐标规范化,我们需要将 (x, y, z) 每个坐标都除以 (w),得到 ( x w , y w , z w , 1 ) (\frac{x}{w}, \frac{y}{w}, \frac{z}{w}, 1) (wx,wy,wz,1)

题目中给出的齐次坐标为 ( 4 , 6 , 8 , 2 ) (4, 6, 8, 2) (4,6,8,2)。要找到这一点的空间坐标,我们需要将 x , y , z x, y, z x,y,z 每个坐标除以尺度因子 w = 2 w = 2 w=2,得到:

  • x ′ = 4 2 = 2 x' = \frac{4}{2} = 2 x=24=2
  • y ′ = 6 2 = 3 y' = \frac{6}{2} = 3 y=26=3
  • z ′ = 8 2 = 4 z' = \frac{8}{2} = 4 z=28=4

因此,这一点的空间坐标是 ( 2 , 3 , 4 ) (2, 3, 4) (2,3,4),选项 B 正确。


三维几何变换之 平移

三维空间中的点 P ( x , y , z ) P(x, y, z) P(x,y,z),平移 Δ x \Delta x Δx 在x轴方向、 Δ y \Delta y Δy 在y轴方向和 Δ z \Delta z Δz 在z轴方向,平移后的点 P ′ ( x ′ , y ′ , z ′ ) P'(x', y', z') P(x,y,z) 的坐标为:

x ′ = x + Δ x y ′ = y + Δ y z ′ = z + Δ z \begin{align*} x' &= x + \Delta x \\ y' &= y + \Delta y \\ z' &= z + \Delta z \end{align*} xyz=x+Δx=y+Δy=z+Δz

变换矩阵 T T T 为:

T = [ 1 0 0 0 0 1 0 0 0 0 1 0 Δ x Δ y Δ z 1 ] T = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \Delta x & \Delta y & \Delta z & 1 \end{bmatrix} T= 100Δx010Δy001Δz0001


三维几何变换之 比例

三维空间中的点 P ( x , y , z ) P(x, y, z) P(x,y,z),按比例因子 α \alpha α β \beta β γ \gamma γ 在x、y、z轴方向上缩放,缩放后的点 P ′ ( x ′ , y ′ , z ′ ) P'(x', y', z') P(x,y,z) 的坐标为:

x ′ = α x y ′ = β y z ′ = γ z \begin{align*} x' &= \alpha x \\ y' &= \beta y \\ z' &= \gamma z \end{align*} xyz=αx=βy=γz

变换矩阵 T T T 为:

T = [ α 0 0 0 0 β 0 0 0 0 γ 0 0 0 0 1 ] T = \begin{bmatrix} \alpha & 0 & 0 & 0 \\ 0 & \beta & 0 & 0 \\ 0 & 0 & \gamma & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} T= α0000β0000γ00001


三维几何变换之 旋转

三维空间中的点 P ( x , y , z ) P(x, y, z) P(x,y,z),绕x轴旋转 θ \theta θ 角度,旋转后的点 P ′ ( x ′ , y ′ , z ′ ) P'(x', y', z') P(x,y,z) 的坐标为:

x ′ = x y ′ = y cos ⁡ ( θ ) − z sin ⁡ ( θ ) z ′ = y sin ⁡ ( θ ) + z cos ⁡ ( θ ) \begin{align*} x' &= x \\ y' &= y \cos(\theta) - z \sin(\theta) \\ z' &= y \sin(\theta) + z \cos(\theta) \end{align*} xyz=x=ycos(θ)zsin(θ)=ysin(θ)+zcos(θ)

x x x 轴旋转的变换矩阵 T x T_x Tx 为:

T x = [ 1 0 0 0 0 cos ⁡ ( θ ) sin ⁡ ( θ ) 0 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 0 1 ] T_x = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos(\theta) & \sin(\theta) & 0 \\ 0 & -\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tx= 10000cos(θ)sin(θ)00sin(θ)cos(θ)00001

类似的,绕 y y y 轴旋转的变换矩阵 T y T_y Ty 为:

T y = [ cos ⁡ ( θ ) 0 − sin ⁡ ( θ ) 0 0 1 0 0 sin ⁡ ( θ ) 0 cos ⁡ ( θ ) 0 0 0 0 1 ] T_y = \begin{bmatrix} \cos(\theta) & 0 & -\sin(\theta) & 0 \\ 0 & 1 & 0 & 0 \\ \sin(\theta) & 0 & \cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Ty= cos(θ)0sin(θ)00100sin(θ)0cos(θ)00001

z z z 轴旋转的变换矩阵 T z T_z Tz 为:

T z = [ cos ⁡ ( θ ) sin ⁡ ( θ ) 0 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 0 1 0 0 0 0 1 ] T_z = \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 & 0 \\ -\sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tz= cos(θ)sin(θ)00sin(θ)cos(θ)0000100001


三维几何变换之 反射

三维空间中的点 P ( x , y , z ) P(x, y, z) P(x,y,z) 关于某个平面(如 x y xy xy 平面、 y z yz yz 平面、 z x zx zx 平面)的反射,反射后的点 P ′ ( x ′ , y ′ , z ′ ) P'(x', y', z') P(x,y,z) 的坐标变换如下:

关于 x y xy xy 平面的反射, z ′ = − z z' = -z z=z,变换矩阵 T x y T_{xy} Txy 为:

T x y = [ 1 0 0 0 0 1 0 0 0 0 − 1 0 0 0 0 1 ] T_{xy} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Txy= 1000010000100001

关于 y z yz yz 平面的反射, x ′ = − x x' = -x x=x,变换矩阵 T y z T_{yz} Tyz 为:

T y z = [ − 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] T_{yz} = \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tyz= 1000010000100001

关于 z x zx zx 平面的反射, y ′ = − y y' = -y y=y,变换矩阵 T z x T_{zx} Tzx 为:

T z x = [ 1 0 0 0 0 − 1 0 0 0 0 1 0 0 0 0 1 ] T_{zx} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tzx= 1000010000100001

当然,也有关于坐标轴的反射变换。比如,关于 x x x 轴的反射, y ′ = − y y' = -y y=y z ′ = − z z' = -z z=z,变换矩阵 T x T_x Tx 为:

T x = [ 1 0 0 0 0 − 1 0 0 0 0 − 1 0 0 0 0 1 ] T_x = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tx= 1000010000100001

关于 y y y 轴的反射, x ′ = − x x' = -x x=x z ′ = − z z' = -z z=z,变换矩阵 T y T_y Ty 为:

T y = [ − 1 0 0 0 0 1 0 0 0 0 − 1 0 0 0 0 1 ] T_y = \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Ty= 1000010000100001

关于 z z z 轴的反射, x ′ = − x x' = -x x=x y ′ = − y y' = -y y=y,变换矩阵 T z T_z Tz 为:

T z = [ − 1 0 0 0 0 − 1 0 0 0 0 1 0 0 0 0 1 ] T_z = \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Tz= 1000010000100001


投影

概念:投影变换是将三维的物体和场景映射到二维的成像平面上


投影的分类

  • 平行投影
    • 进一步分为:正投影、斜投影
    • 投影中心在投影面的无限远处,所有的投影线可以视为相互平行
    • 平行投影的最大特点:无论物体距离视点多远,投影后的物体尺寸保持不变。
  • 透视投影:
    • 透视投影中的所有投影线会汇聚到一点(投影中心)
    • 投影中心到投影面的距离有限。透视投影中,投影的物体离投影面越远,投影越小,距离不能无限远。
    • 相互平行但是与视平面不平行的一组直线汇聚于一点——灭点
    • 主灭点:平行于坐标轴的平行线产生的灭点。

透视投影


单选题:下面关于投影变换的说法正确的是:(B)

A.平行投影是指投影平面和投影线相互垂直

B.正轴测投影的投影平面不垂直于任何坐标轴

C.斜等测投影的特点是垂直于投影面的直线投影长度是原来的一半

D.三视图是斜平行投影


填空题:投影的作用是实现三维到二维的转换,投影按照投影点的位置,可以分为 【 ___ 】 和 【 ___ 】 。

答:

  • 平行投影
  • 透视投影

三视图的变换矩阵

  1. 主视图变换矩阵
    T 主视图 = [ 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] T_{主视图} = \begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} T主视图= 0000010000100001

  2. 俯视图变换矩阵
    T 俯视图 = [ 0 − 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 ] T_{俯视图} = \begin{bmatrix} 0 & -1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} T俯视图= 0000100000100001

  3. 侧视图变换矩阵
    T 侧视图 = [ 0 0 − 1 0 0 1 0 0 0 0 0 0 0 0 0 1 ] T_{侧视图} = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} T侧视图= 0000010010000001


单选题:平行投影中的三视图不包括(C )。

A. 俯视图

B. 正视图

C. 透视视图

D. 侧视图


透视投影

世界坐标系、观察坐标系和屏幕坐标系的关系如下:
透视变换坐标系

在这里插入图片描述


单选题:关于透视投影,下面的说法错误的是:(C)

A.透视投影具备近大远小的特点

B.透视投影的投影中心不能忽略其位置

C.透视投影中所有平行线都会汇聚一点

D.透视投影的投影(成像)大小与三维物体与投影面的距离有关


单选题:下面各种坐标变换中,会产生变换前后维度的改变的是?( C )

A.模型变换

B. 观察变换

C.投影变换

D.视口变换


单选题:透视投影中主灭点最多可有几个?( C )

A.1

B. 2

C.3

D.4


填空题:已知三维空间中两点 A(0,0)B(2,2)构成一条旋转轴AB,一个三维模型围绕AB轴旋转90°,请给出变换过程,填写下面的空:

(1)在XOY平面内围绕 【 __ 】轴,旋转 【 __°】,让旋转轴与 x 轴对齐。

(2)围绕【 __ 】轴旋转 90°。

(3)在 XOY 平面内围绕【 __ 】轴,旋转【 __° 】,让旋转轴恢复AB位置。

答:

  • 【Z】
  • 【-45】
  • 【X】
  • 【Z】
  • 【45】

简答题:解释其中的参数含义,在下面的选择中选填:

在这里插入图片描述
问题:

  • R R R 是【】
  • d d d 是【】
  • θ θ θ 是【】
  • φ φ φ 是【】

答:

  • R R R 是【视点到世界坐标中心的距离
  • d d d 是【观察坐标系原点到投影平面的距离
  • θ θ θ 是【视线在XOZ平面投影和z轴正向的夹角
  • φ φ φ 是【视线和y轴正向的夹角

简答题:请简述投影变换的作用和投影变换的分类。

答:

投影变换的作用,就是将三维的物品或场景给映射到二维的成像平面上。投影变换可以分为两类:

  • 平行投影
    • 平行投影还可以进一步分为:正投影、斜投影
    • 投影中心在投影面的无限远处,所有的投影线可以视为相互平行
    • 平行投影的最大特点:无论物体距离视点多远,投影后的物体尺寸保持不变。
  • 透视投影
    • 透视投影中的所有投影线会汇聚到一点(投影中心)
    • 投影中心到投影面的距离有限。透视投影中,投影的物体离投影面越远,投影越小,距离不能无限远。

第六章 建模与消隐

三维建模

建模是指根据实际对象的特征和规律,用计算机语言描述对象的过程


建模分为:

  • 数据模型:规则形体的建模方法
  • 过程模型:不规则形体的建模方法;

数据模型的表示有线框模型表面模型实体模型三种。


描述一个物体不仅需要顶点表描述其几何信息,而且还需要借助于边表和面表描述其拓扑信息。


消隐

消隐的基本概念:绘制物体的时候,有一些面和线是被其他物体或者自身遮挡住的,这些面和线需要被去掉。


消隐的分类:

  • 图像空间消隐:Z-缓冲器算法
  • 对象空间消隐:背面消隐算法

背面剔除消隐算法:利用视线方向S和物体表面法向N之间的关系

  • N S < 0:不可见
  • N S 0:可见

Z-缓冲器算法

简述Z-buffer深度缓冲器算法的基本思路(可用伪代码描述)。

算法流程:

for(场景中的每一个多边形)
{扫描转换该多边形;for(多边形所覆盖的每一个像素点(x,y){计算多边形在该像素点的深度值z(x,y)ifz(x,y) <= Z-buf中对应此像素点(x,y)的z值){把多边形在(x,y)处的深度值z(x,y)存入Z-buf中的(x,y)处;                 把多边形在(x,y)处的亮度值存入f-buf中的(x,y)处;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github主页这样优化,让人眼前一亮

我的主页&#xff08;一之十六&#xff09; 1. 创建与账户ID同名的仓库 注意&#xff1a;记得勾选Add a README file 2. markdown语法自定义README.md 3. 辅助工具 优秀profile&#xff1a;https://zzetao.github.io/awesome-github-profile/动态文字&#xff1a;https://r…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑&#xff1a;通过整合业务与财务数据&#xff0c;为决策提供准确、实时的信息基础&#xff0c;确保分析的深度与广度。促进业务与财务协同&#xff1a;打破信息孤岛&#xff0c;实现业务流程与财务管…

python 压缩数据

requests 是 Python 中一个非常流行的 HTTP 库&#xff0c;用于发送各种 HTTP 请求。下面是一个使用 requests 库发送简单 GET 请求和 POST 请求的示例&#xff1a; 首先&#xff0c;确保你已经安装了 requests 库。如果还没有安装&#xff0c;可以使用 pip 进行安装&#xff…

WEB攻防【4】——JavaWeb项目/JWT身份攻击/组件安全/访问控制

一、知识点 1、Javaweb常见安全及代码逻辑 Javaweb的架构&#xff1a; 如何通过包查找到文件&#xff0c;通过URL对应源码的文件&#xff0c;或者通过源码文件对应URL地址。 2、目录遍历&身份验证&逻辑&JWT Javaweb里面有身份认证的JWT的技术&#xff0c;pyth…

基于web的产品管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于web的产品管理系统,java项目。 ecli…

docker安装rocketMq5x以上的版本

1.背景 安装RocketMQ 5.x以上的版本主要是因为新版本引入了许多性能优化、新功能以及对已有特性的增强&#xff0c;这些改进可以帮助提升消息队列系统的稳定性和效率。 1.性能提升&#xff1a;RocketMQ 5.x版本通常包括了对消息处理速度、吞吐量和延迟的优化&#xff0c;使得系…

【linux 部署 springboot项目】

一、部署项目在linux上 注意&#xff1a; linux的版本是CentOS7.5&#xff0c;云服务器是阿里云。 1.1 用idea打包jar包 1.1.1 在pom.xml中加入打包依赖 <!-- 这个插件&#xff0c;可以将应用打包成一个可执行的jar包 --> <build><plugins><plugin>…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…

计网之IP

IP IP基本认识 不使用NAT时&#xff0c;源IP地址和目的IP地址不变&#xff0c;只要源MAC和目的MAC地址在变化 IP地址 D类是组播地址&#xff0c;E类是保留地址 无分类地址CIDR 解决直接分类的B类65536太多&#xff0c;C类256太少a.b.c.d/x的前x位属于网路号&#xff0c;剩…

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…

spring boot初始化的几个总结

spring intializr File->New->Project 注意&#xff1a;Spring Initializer中 Java版本选择模块已经不支持1.8了。 Spring Boot 3.x要求 Java最低版本为17&#xff0c; 最新的SpringBoot版本已经要求Java22了 所以&#xff0c;你可以升级Java版本&#xff0c;使用Spri…

「漏洞复现」时空智友ERP系统updater.uploadStudioFile 任意文件上传漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

谷歌开发者新号上架攻略:开发者实战经验分享

前段时间&#xff0c;不少开发者朋友们在纷纷在吐槽新账号没法上架成功。以前谷歌对新号是真的很严格&#xff0c;但现在情况似乎有所好转。 今天&#xff0c;和大家聊聊如何在新号成功上架上“快人一步”&#xff0c;以及怎样增加账号权重提高上架成功率。 首先&#xff0c;我…

Linux文件系统与设备文件

一、Linux文件操作 Linux的文件系统API主要涉及创建、打开、读写、定位、关闭文件 创建 int creat(const char *filename, mode_t mode);mode: 代表新建文件的存取权限&#xff0c;需要和umask相与才能确定最终权限(mode&umask)。 umask代表文件在创建时需要去掉的存取…

MySQL高级-索引-使用规则-SQL提示(use、ignore、force)

文章目录 1、查看表 tb_user2、展示索引3、为profession、age、status创建 联合索引4、查询 profession软件工程5、执行计划 profession软件工程6、创建profession单列索引7、再次执行计划 profession软件工程8、SQL提示8.1、use index(idx_user_pro)8.2、ignore index(idx_use…

最流行的文件同步软件

PanguFlow是一款免费的文件同步软件&#xff0c;他支持文件的全量同步、支持文件的增量同步、支持文件的实时备份&#xff0c;支持双向同步&#xff0c;支持三向同步甚至多向同步&#xff0c;支持无人值守运行。 PanguFlow数据同步软件下载地址https://pan.baidu.com/s/1GLjFR…

springcloud第4季 seata报could not find any implementation for class

一 问题说明 1.1 描述 在使用seata2.0alibaba-cloud 2022.0.0.0-RC2nacos 2.2.3 模拟下订单分布式事务场景&#xff0c;出现如下问题&#xff1a;java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 查看服务端&#xff1a;java.util.ServiceCo…

imx6ull/linux应用编程学习(6)jpeg和png的图片显示

1.JPEG图片显示 JPEG&#xff08;Joint Photographic Experts Group&#xff09;是由国际标准组织为静态图像所建立的第一个国际数字图像压缩标准&#xff0c;也是至今一直在使用的、应用最广的图像压缩标准。JPEG 由于可以提供有损压缩&#xff0c;因此压缩比可以达到其他传统…

【解释】i.MX6ULL_IO_电气属性说明

【解释】i.MX6ULL_IO_电气属性说明 文章目录 1 Hyst1.1 迟滞&#xff08;Hysteresis&#xff09;是什么&#xff1f;1.2 GPIO的Hyst. Enable Field 参数1.3 应用场景 2 Pull / Keep Select Field2.1 PUE_0_Keeper — Keeper2.2 PUE_1_Pull — Pull2.3 选择Keeper还是Pull 3 Dr…

企业化运维(6)_redis数据库

Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 redis是一个key-value存储系统。和Memcached类似&#xff0…