📅  最后修改于: 2023-12-03 14:59:05.227000             🧑  作者: Mango
在3D计算机图形学中,我们需要用到三维空间中的坐标系和坐标平面来描述和计算物体的位置、姿态和大小。本文将介绍3D空间中常用的坐标系和坐标平面。
坐标系是由三条互相垂直的坐标轴构成的。在3D空间中,我们通常使用右手坐标系(Right-Handed Coordinate System):
在代码中,我们可以使用三维向量来表示3D空间中的点和方向,如下所示:
import numpy as np
# 定义点和方向
p = np.array([1, 2, 3])
d = np.array([0, 0, 1])
# 打印点和方向
print("point:", p)
print("direction:", d)
坐标平面是三维空间中的一个平面,通常将其中两个坐标轴固定为常量,第三个坐标轴作为变量。我们可以使用不同的坐标平面来描述不同的视角和运动。
XY平面是以z轴为变量,将x轴和y轴固定为常量的平面。在图形学中,通常将XY平面作为2D坐标系。Z轴正方向为屏幕外,负方向为屏幕内。
和XY平面类似,XZ平面是以y轴为变量,将x轴和z轴固定为常量的平面。在图形学中,通常将XZ平面作为地面或水平面。Y轴正方向为平面上方,负方向为平面下方。
YZ平面是以x轴为变量,将y轴和z轴固定为常量的平面。在图形学中,通常将YZ平面作为侧面或垂直面。X轴正方向为面的外侧,负方向为面的内侧。
在代码中,我们可以使用三维向量和矩阵变换来描述和计算不同坐标系之间的转换,如下所示:
import numpy as np
# 定义坐标系和点
orig = np.array([0, 0, 0])
x_axis = np.array([1, 0, 0])
y_axis = np.array([0, 1, 0])
z_axis = np.array([0, 0, 1])
p = np.array([1, 2, 3])
# 将点从世界坐标系转换到相机坐标系
world_to_camera = np.array([
[-1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, -1, 0],
[0, 0, 0, 1]])
p_camera = world_to_camera.dot(np.append(p, 1))[:3]
# 将点从相机坐标系转换到图像坐标系
camera_to_image = np.array([
[500, 0, 320, 0],
[0, 500, 240, 0],
[0, 0, 1, 0]])
p_image = camera_to_image.dot(np.append(p_camera, 1))
# 打印结果
print("p:", p)
print("p_camera:", p_camera)
print("p_image:", p_image[:2])
本文介绍了3D空间中常用的坐标系和坐标平面,以及如何在代码中使用向量和矩阵变换来进行坐标系之间的转换。在实际的图形学应用中,我们通常需要使用更加复杂的技术来处理光照、阴影、材质等问题,但坐标系和坐标平面作为基础概念仍然是不可或缺的。