2025.5.13山东大学软件学院计算机图形学期末考试回忆版本
2025.5.13山东大学软件学院计图期末考试回忆版本
学院:软件学院
老师:周元峰、魏广顺
一、简述题(2024原题一)
1.图形绘制流水线的组成和作用
2.双缓冲机制是什么,有什么作用?
3.Delaunay三角化的四条性质
二、坐标变换(往年原题)
- 通过以下代码,求Clipping window坐标
(xc,yc)
到screen坐标(xs,ys)
的变换,写出数学表达式。(题目无图)
gluOrtho2D(xmin, xmax, ymin, ymax);
glViewport(u, v, w, h);
glutInitWindowPosition(xpos, ypos);
glutInitWindowSize(ww, wh);
解题步骤:从 Clipping Window 坐标 (xc, yc)
到屏幕坐标 (xs, ys)
的完整变换
1. 坐标系说明
- Clipping Window:由
gluOrtho2D(xmin, xmax, ymin, ymax)
定义,坐标原点在左下角,范围[xmin, xmax] × [ymin, ymax]
。 - Viewport:由
glViewport(u, v, w, h)
定义,坐标原点在左下角,范围[u, u+w] × [v, v+h]
(相对于窗口客户区)。 - Window:由
glutInitWindowPosition(xpos, ypos)
和窗口大小定义,坐标原点在左下角(窗口客户区左下角为(xpos, ypos)
)。
注意:题目明确要求所有坐标原点均在左下角,但屏幕坐标原点在左上角,因此需要 Y 轴翻转。
2. 变换步骤
(1) Clipping Window → Viewport 坐标
将 Clipping Window 坐标线性映射到 Viewport 坐标(窗口客户区坐标):
x v = w ( x c − x min ) x max − x min x_v = \frac{w (x_c - x_{\text{min}})}{x_{\text{max}} - x_{\text{min}}} xv=xmax−xminw(xc−xmin)
y v = h ( y c − y min ) y max − y min y_v = \frac{h (y_c - y_{\text{min}})}{y_{\text{max}} - y_{\text{min}}} yv=ymax−yminh(yc−ymin)
其中:
(x_v, y_v)
是窗口客户区中的坐标(相对于窗口左下角)。(w, h)
是glViewport
的宽度和高度。
(2) Viewport 坐标 → 窗口客户区坐标
x w = u + x v x_w = u + x_v xw=u+xv
y w = u + y v y_w = u+y_v yw=u+yv
(u, v)
是glViewport
的起始位置。
(3) 窗口客户区坐标 → 屏幕坐标
将窗口客户区坐标转换为物理屏幕坐标:
-
窗口左下角在屏幕上的位置为
(xpos, ypos)
。 -
由于屏幕坐标原点在左上角,需翻转 Y 轴:
y s = y pos + wh − y w y_s = y_{\text{pos}} + \text{wh} - y_w ys=ypos+wh−ywy s = x pos + x w y_s = x_{\text{pos}} + x_w ys=xpos+xw
3. 完整数学表达式
从 Clipping Window 到屏幕坐标的完整变换为:
x s = x pos + u + w ( x c − x min ) x max − x min y s = y pos + w h − ( v + h ( y c − y min ) y max − y min ) \boxed{ \begin{aligned} x_s &= x_{\text{pos}} + u + \frac{w (x_c - x_{\text{min}})}{x_{\text{max}} - x_{\text{min}}} \\ y_s &= y_{\text{pos}} + wh - \left( v + \frac{h (y_c - y_{\text{min}})}{y_{\text{max}} - y_{\text{min}}} \right) \end{aligned} } xsys=xpos+u+xmax−xminw(xc−xmin)=ypos+wh−(v+ymax−yminh(yc−ymin))
其中:
(x_s, y_s)
是屏幕坐标(原点在左上角)。(xpos, ypos)
是窗口左下角在屏幕上的位置。wh
是窗口客户区的高度(即glutInitWindowSize(ww, wh)
中的wh
)。- 其他参数同前。
三、线性插值
- 已知三角形三个顶点 A ( 0 , 0 ) , B ( 6 , 1 ) , C ( 4 , 6 ) A(0, 0),B(6,1), C(4,6) A(0,0),B(6,1),C(4,6),按照面积坐标线性插值,求点 ( 4 , 3 ) (4,3) (4,3)的面积坐标权重
解题步骤:计算点 $ P(4,3) $ 在三角形 $ ABC $ 中的面积坐标权重
1. 面积坐标定义
对于三角形 A B C ABC ABC 和任意点 P P P,其面积坐标 ( λ 1 , λ 2 , λ 3 ) (\lambda_1, \lambda_2, \lambda_3) (λ1,λ2,λ3) 满足:
λ 1 = S △ P B C S △ A B C , λ 2 = S △ P A C S △ A B C , λ 3 = S △ P A B S △ A B C \lambda_1 = \frac{S_{\triangle PBC}}{S_{\triangle ABC}}, \quad \lambda_2 = \frac{S_{\triangle PAC}}{S_{\triangle ABC}}, \quad \lambda_3 = \frac{S_{\triangle PAB}}{S_{\triangle ABC}} λ1=S△ABCS△PBC,λ2=S△ABCS△PAC,λ3=S△ABCS△PAB
且满足 λ 1 + λ 2 + λ 3 = 1 \lambda_1 + \lambda_2 + \lambda_3 = 1 λ1+λ2+λ3=1。
2. 计算三角形面积
使用行列式公式计算三角形面积:
S = 1 2 ∣ x 1 ( y 2 − y 3 ) + x 2 ( y 3 − y 1 ) + x 3 ( y 1 − y 2 ) ∣ S = \frac{1}{2} \left| x_1(y_2 - y_3) + x_2(y_3 - y_1) + x_3(y_1 - y_2) \right| S=21∣x1(y2−y3)+x2(y3−y1)+x3(y1−y2)∣
(1) 计算 S △ A B C S_{\triangle ABC} S△ABC
顶点坐标: A ( 0 , 0 ) A(0,0) A(0,0)、 B ( 6 , 1 ) B(6,1) B(6,1)、 C ( 4 , 6 ) C(4,6) C(4,6)
S △ A B C = 1 2 ∣ 0 ( 1 − 6 ) + 6 ( 6 − 0 ) + 4 ( 0 − 1 ) ∣ = 1 2 ∣ 0 + 36 − 4 ∣ = 1 2 × 32 = 16 S_{\triangle ABC} = \frac{1}{2} \left| 0(1 - 6) + 6(6 - 0) + 4(0 - 1) \right| = \frac{1}{2} \left| 0 + 36 - 4 \right| = \frac{1}{2} \times 32 = 16 S△ABC=21∣0(1−6)+6(6−0)+4(0−1)∣=21∣0+36−4∣=21×32=16
(2) 计算 S △ P B C S_{\triangle PBC} S△PBC
点 P ( 4 , 3 ) P(4,3) P(4,3)、 B ( 6 , 1 ) B(6,1) B(6,1)、 C ( 4 , 6 ) C(4,6) C(4,6)
S △ P B C = 1 2 ∣ 4 ( 1 − 6 ) + 6 ( 6 − 3 ) + 4 ( 3 − 1 ) ∣ = 1 2 ∣ − 20 + 18 + 8 ∣ = 1 2 × 6 = 3 S_{\triangle PBC} = \frac{1}{2} \left| 4(1 - 6) + 6(6 - 3) + 4(3 - 1) \right| = \frac{1}{2} \left| -20 + 18 + 8 \right| = \frac{1}{2} \times 6 = 3 S△PBC=21∣4(1−6)+6(6−3)+4(3−1)∣=21∣−20+18+8∣=21×6=3
(3) 计算 S △ P A C S_{\triangle PAC} S△PAC
点 P ( 4 , 3 ) P(4,3) P(4,3)、 A ( 0 , 0 ) A(0,0) A(0,0)、 C ( 4 , 6 ) C(4,6) C(4,6)
S △ P A C = 1 2 ∣ 4 ( 0 − 6 ) + 0 ( 6 − 3 ) + 4 ( 3 − 0 ) ∣ = 1 2 ∣ − 24 + 0 + 12 ∣ = 1 2 × 12 = 6 S_{\triangle PAC} = \frac{1}{2} \left| 4(0 - 6) + 0(6 - 3) + 4(3 - 0) \right| = \frac{1}{2} \left| -24 + 0 + 12 \right| = \frac{1}{2} \times 12 = 6 S△PAC=21∣4(0−6)+0(6−3)+4(3−0)∣=21∣−24+0+12∣=21×12=6
(4) 计算 S △ P A B S_{\triangle PAB} S△PAB
点 P ( 4 , 3 ) P(4,3) P(4,3)、 A ( 0 , 0 ) A(0,0) A(0,0)、 B ( 6 , 1 ) B(6,1) B(6,1)
S △ P A B = 1 2 ∣ 4 ( 0 − 1 ) + 0 ( 1 − 3 ) + 6 ( 3 − 0 ) ∣ = 1 2 ∣ − 4 + 0 + 18 ∣ = 1 2 × 14 = 7 S_{\triangle PAB} = \frac{1}{2} \left| 4(0 - 1) + 0(1 - 3) + 6(3 - 0) \right| = \frac{1}{2} \left| -4 + 0 + 18 \right| = \frac{1}{2} \times 14 = 7 S△PAB=21∣4(0−1)+0(1−3)+6(3−0)∣=21∣−4+0+18∣=21×14=7
3. 计算面积坐标权重
λ 1 = S △ P B C S △ A B C = 3 16 , λ 2 = S △ P A C S △ A B C = 6 16 = 3 8 , λ 3 = S △ P A B S △ A B C = 7 16 \lambda_1 = \frac{S_{\triangle PBC}}{S_{\triangle ABC}} = \frac{3}{16}, \quad \lambda_2 = \frac{S_{\triangle PAC}}{S_{\triangle ABC}} = \frac{6}{16} = \frac{3}{8}, \quad \lambda_3 = \frac{S_{\triangle PAB}}{S_{\triangle ABC}} = \frac{7}{16} λ1=S△ABCS△PBC=163,λ2=S△ABCS△PAC=166=83,λ3=S△ABCS△PAB=167
4. 最终结果
点 P ( 4 , 3 ) P(4,3) P(4,3) 的面积坐标权重为:
( λ 1 , λ 2 , λ 3 ) = ( 3 16 , 3 8 , 7 16 ) (\lambda_1, \lambda_2, \lambda_3) = \left( \frac{3}{16}, \frac{3}{8}, \frac{7}{16} \right) (λ1,λ2,λ3)=(163,83,167)
四、坐标变换(ppt原题)
- 写出以点 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc)为中心,沿 x x x轴方向旋转 β \beta β角度的opengl代码
- 推导出以向量 v ( x v , y v , z v ) v(x_v,y_v,z_v) v(xv,yv,zv)为轴,旋转 θ \theta θ角度的变换矩阵
五、z-buffer(2024原题五)
- 复杂场景下(不包含透明或半透明物体)的消隐算法,写出具体的算法描述(z-buffer)
六、phong光照模型(2024原题六)
- phong模型的组成和Blinn的改进模型
- phong着色的优点是什么?为什么提高了绘图质量?
七、mipmap(2024原题七)
-
mipmap的原理
-
mipmap的存储量
-
如何实现分级
八、光栅化、反走样
- 简述Bresenham算法的主要思想和算法优秀之处(2024原题三)
- 简述直线反走样算法(SSAA、MSAA)