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 | import numpy as np |
数据表示
在计算机图形学中,数据的表示方式直接影响到图形处理的效率和效果。主要有以下几种表示方式:
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 计算机图形学基础之坐标系统与表示