Jupyter AI

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

📅 发表日期: 2024年8月11日

分类: 🖼️计算机图形学入门

👁️阅读: --

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

坐标系统

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

1. 世界坐标系统

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

2. 视图坐标系统

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

3. 设备坐标系统

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

4. 屏幕坐标系统

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

坐标转换

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

坐标变换矩阵

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

  • 平移矩阵 T

    T=[100tx010ty001tz0001]T = \begin{bmatrix} 1 & 0 & 0 & tx \\ 0 & 1 & 0 & ty \\ 0 & 0 & 1 & tz \\ 0 & 0 & 0 & 1 \end{bmatrix}
  • 旋转矩阵 R(绕 z 轴):

    R=[cos(θ)sin(θ)00sin(θ)cos(θ)0000100001]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=[sx0000sy0000sz00001]S = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

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

示例:坐标转换

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

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),有时为了更方便地执行变换,使用齐次坐标表示为 (x,y,z,1)(x, y, z, 1)

2. 线的表示

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

3. 多边形的表示

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

4. 网格的表示

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

结语

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