4 计算机图形学基础之坐标系统与表示

在上一篇中,我们简要介绍了计算机图形学的基本概念。在本篇中,我们将重点讨论计算机图形学中的坐标系统和数据表示。这些内容为后续的基本图形绘制打下了坚实的基础。

坐标系统

在计算机图形学中,坐标系统是我们描述和操作对象位置的基础。主要的坐标系统有:

1. 世界坐标系统

世界坐标系统是我们在三维空间中定义物体位置的绝对坐标系,通常用 (X, Y, Z) 来表示。

2. 视图坐标系统

视图坐标系统是由观察者的位置和视角定义的坐标系统。它是由世界坐标系经过一些变换(如平移、旋转)后得到的。视图坐标中的 (0, 0, 0) 通常表示观察者的位置。

3. 设备坐标系统

设备坐标系统是指图形显示设备内使用的坐标系统。例如,在一个屏幕上,左上角通常被定义为 (0, 0),右下角则为 (width, height)。这个坐标系不仅影响图形的呈现,还会影响绘制算法的实现。

4. 屏幕坐标系统

屏幕坐标系统更进一步,是一个二维坐标系统,通常忽略了 Z 坐标。它使用 (x, y) 来表示位置,并且原点一般位于屏幕的左上角。

坐标转换

在图形应用中,我们需要进行坐标系统之间的转换。例如,从世界坐标系转换到视图坐标系,或是从视图坐标系转换到设备坐标系。这些转换通常通过矩阵运算来实现。

坐标变换矩阵

坐标变换涉及到旋转、平移和缩放,这些可以通过矩阵表示:

  • 平移矩阵 T

    $$
    T =
    \begin{bmatrix}
    1 & 0 & 0 & tx \
    0 & 1 & 0 & ty \
    0 & 0 & 1 & tz \
    0 & 0 & 0 & 1
    \end{bmatrix}
    $$

  • 旋转矩阵 R(绕 z 轴):

    $$
    R =
    \begin{bmatrix}
    \cos(\theta) & -\sin(\theta) & 0 & 0 \
    \sin(\theta) & \cos(\theta) & 0 & 0 \
    0 & 0 & 1 & 0 \
    0 & 0 & 0 & 1
    \end{bmatrix}
    $$

  • 缩放矩阵 S

    $$
    S =
    \begin{bmatrix}
    s_x & 0 & 0 & 0 \
    0 & s_y & 0 & 0 \
    0 & 0 & s_z & 0 \
    0 & 0 & 0 & 1
    \end{bmatrix}
    $$

通过将上述矩阵相乘,我们可以生成一个复合变换矩阵,将物体的坐标从一个坐标系转换到另一个坐标系。

示例:坐标转换

假设我们有一个在世界坐标系中表示的点 $P_w = (x, y, z)$,我们希望将其转换到视图坐标系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np

# 定义平移矩阵
def translation_matrix(tx, ty, tz):
return np.array([[1, 0, 0, tx],
[0, 1, 0, ty],
[0, 0, 1, tz],
[0, 0, 0, 1]])

# 定义旋转矩阵
def rotation_matrix(theta):
cos_theta = np.cos(theta)
sin_theta = np.sin(theta)
return np.array([[cos_theta, -sin_theta, 0, 0],
[sin_theta, cos_theta, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])

# 假设平移量为 (1, 2, 3) 并旋转 45 度
tx, ty, tz = 1, 2, 3
theta = np.pi / 4 # 45 degrees

# 组合变换
T = translation_matrix(tx, ty, tz)
R = rotation_matrix(theta)
transform_matrix = np.dot(T, R)

# 定义一个点 P_w
P_w = np.array([x, y, z, 1]) # 齐次坐标

# 进行坐标转换
P_v = np.dot(transform_matrix, P_w)
print("视图坐标系中的坐标:", P_v[:3]) # 取前三个元素

数据表示

在计算机图形学中,数据的表示方式直接影响到图形处理的效率和效果。主要有以下几种表示方式:

1. 点的表示

一个点在三维空间中的表示通常为一个三维向量 $(x, y, z)$,有时为了更方便地执行变换,使用齐次坐标表示为 $(x, y, z, 1)$。

2. 线的表示

线可以通过其两个端点的坐标来表示。假设有两个点 A(x_1, y_1, z_1)B(x_2, y_2, z_2),则线段 AB 可以表示为一系列点或通过方程来表示。

3. 多边形的表示

多边形(如三角形)通常由多个顶点表示。三角形可以被定义为三个顶点的集合 $T(v_1, v_2, v_3)$,在绘制时可以使用 顶点缓冲区 来提高效率。

4. 网格的表示

网格是一组相互连接的多边形,常用在 3D 模型中。网格通常使用顶点列表和索引列表来进行表示。

结语

本文详细介绍了计算机图形学中的坐标系统和数据表示。理解这些基础知识至关重要,因为它们为接下来的图形绘制原理提供了必要的理论基础。在下一篇中,我们将继续探索基本图形绘制的原理

4 计算机图形学基础之坐标系统与表示

https://zglg.work/computer-graph-zero/4/

作者

IT教程网(郭震)

发布于

2024-08-11

更新于

2024-08-12

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论