pyglet.math

矩阵和向量数学。

该模块提供了向量和矩阵对象,包括ve2、ve3、ve4、mat3和mat4。支持最常见的矩阵和向量运算。其中包括用于旋转、缩放和变换的辅助方法。这个 Mat4 包括用于创建正交投影矩阵和透视投影矩阵的类方法。

矩阵的行为就像它们在GLSL中一样:它们以列为主的顺序指定,并在向量的左侧相乘,向量被视为列。

备注

出于性能原因,矩阵类型子类 tuple 。因此,它们是不变的。所有操作都返回一个新对象;该对象不会就地更新。

class Mat3

3x3矩阵

Mat3 是一个不变的3x3矩阵,包括最常见的运算符。

可以创建一个包含12个值的列表或元组的矩阵。如果未提供任何值,则会创建一个“单位矩阵”(主对角线上为1.0)。Mat3对象是不可变的,因此所有操作都返回一个新的Mat3对象。

备注

使用“@”运算符执行矩阵乘法。

static __new__(
cls: type[Mat3T],
values: Iterable[float] = (1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0),
) Mat3T
返回类型:

TypeVar (Mat3T, bound = Mat3)

rotate(phi: float) Mat3
返回类型:

Mat3

scale(sx: float, sy: float) Mat3
返回类型:

Mat3

shear(sx: float, sy: float) Mat3
返回类型:

Mat3

translate(tx: float, ty: float) Mat3
返回类型:

Mat3

class Mat4

4x4矩阵

Mat4 是一个不变的4x4矩阵,它包含最常见的运算符。这包括用于创建要由OpenGL使用的正交投影矩阵和透视投影矩阵的类方法。

可以创建一个包含16个值的列表或元组的矩阵。如果未提供任何值,则会创建一个“单位矩阵”(主对角线上为1.0)。Mat4对象是不可变的,因此所有操作都返回一个新的Mat4对象。

备注

使用“@”运算符执行矩阵乘法。

static __new__(
cls: type[Mat4T],
values: Iterable[float] = (1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0),
) Mat4T
返回类型:

TypeVar (Mat4T, bound = Mat4)

column(index: int) tuple

将特定列作为元组获取。

返回类型:

tuple

classmethod from_rotation(angle: float, vector: Vec3) Mat4

从一个角度和一个矢量创建一个旋转矩阵。

参数:
  • angle (float) -- 所需的角度,以弧度为单位。

  • vector (Vec3) -- Vec 3指示方向。

返回类型:

Mat4

classmethod from_scale(vector: Vec3) Mat4T

从一个矢量3创建一个比例矩阵。

返回类型:

TypeVar (Mat4T, bound = Mat4)

classmethod from_translation(vector: Vec3) Mat4T

从一个矢量3创建一个转换矩阵。

返回类型:

TypeVar (Mat4T, bound = Mat4)

classmethod look_at(
position: Vec3,
target: Vec3,
up: Vec3,
)

创建指向目标的查看矩阵。

该方法采用三个Vec 3,描述观看者的位置、他们正在观看的位置和向上的轴(通常在Y轴上为正值)。生成的Mat 4可以用作投影矩阵。

参数:
  • position (Vec3) -- 观看者在场景中的位置。

  • target (Vec3) -- 观众正在关注的点。

  • up (Vec3) -- 通常,在场景中指向“向上”的载体 Vec3(0.0, 1.0, 0.0)

classmethod orthogonal_projection(
left: float,
right: float,
bottom: float,
top: float,
z_near: float,
z_far: float,
) Mat4T

创建用于OpenGL的Mat4正交投影矩阵。

给定左、右、底、顶值和近/远z平面,创建4x4投影矩阵。这对于设置 projection

返回类型:

TypeVar (Mat4T, bound = Mat4)

classmethod perspective_projection(
aspect: float,
z_near: float,
z_far: float,
fov: float = 60,
) Mat4T

创建用于OpenGL的Mat4透视投影矩阵。

给定所需的纵横比、近/远平面和FOV(视场),创建4x4投影矩阵。这对于设置 projection

返回类型:

TypeVar (Mat4T, bound = Mat4)

rotate(angle: float, vector: Vec3) Mat4

获取x、y或z轴上的旋转矩阵。

返回类型:

Mat4

row(index: int) tuple

将特定行作为元组获取。

返回类型:

tuple

scale(vector: Vec3) Mat4

获取x、y或z轴上的比例矩阵。

返回类型:

Mat4

translate(vector: Vec3) Mat4

获得沿x、y和z轴的平移矩阵。

返回类型:

Mat4

transpose() Mat4

得到这个矩阵的转置。

返回类型:

Mat4

class Quaternion

四元

static __new__(
cls,
w: float = 1.0,
x: float = 0.0,
y: float = 0.0,
z: float = 0.0,
) Quaternion
返回类型:

Quaternion

conjugate() Quaternion
返回类型:

Quaternion

dot(other: Quaternion) float
返回类型:

float

classmethod from_mat3() Quaternion
返回类型:

Quaternion

classmethod from_mat4() Quaternion
返回类型:

Quaternion

normalize() Quaternion
返回类型:

Quaternion

to_mat3() Mat3
返回类型:

Mat3

to_mat4() Mat4
返回类型:

Mat4

property mag: float

四元数的大小或长度。

坐标和原点之间的距离。abs的副本(quaternion_instance)。

property w: float
property x: float
property y: float
property z: float
class Vec2

表示为XY坐标对的二维载体。

__init__(x: float = 0.0, y: float = 0.0) None
clamp(min_val: float, max_val: float) Vec2

将向量的X和Y分量的值限制在给定值内。

返回类型:

Vec2

distance(other: Vec2) float

计算此向量与另一个2D向量之间的距离。

返回类型:

float

dot(other: Vec2) float

计算这个向量和另一个2D向量的点积。

返回类型:

float

from_heading(heading: float) Vec2

创建与给定标题相同大小的新载体。

实际上,该载体旋转到新标题。

参数:

heading (float) -- 所需的航向,以弧度为单位。

返回类型:

Vec2

from_magnitude(magnitude: float) Vec2

创建给定量级的新载体

将通过首先规范化,然后缩放该载体来创建新的载体。标题保持不变。

返回类型:

Vec2

static from_polar(mag: float, angle: float) Vec2

从给定的极坐标创建新的矢量。

参数:
  • mag (float) -- 所需的量级。

  • angle (float) -- 角度,以弧度为单位。

返回类型:

Vec2

lerp(other: Vec2, alpha: float) Vec2

创建一个在该向量和另一个向量之间线性内插的新的ve2。

参数:
  • other (Vec2) -- 另一个Vec 2实例。

  • alpha (float) -- 此载体与另一载体之间的插值量。这应该是0.0和1.0之间的值。例如:0.5是两个载体之间的中点。

返回类型:

Vec2

limit(maximum: float) Vec2

将向量的大小限制为传递的最大值。

返回类型:

Vec2

normalize() Vec2

将向量归一化,使其幅值为1。即使其成为单位向量。

返回类型:

Vec2

reflect(vector: Vec2) Vec2

从给定的规范化载体创建新的Vec 2反射(跳)。

参数:

vector (Vec2) -- 一个规格化的载体。

返回类型:

Vec2

rotate(angle: float) Vec2

创建按角度旋转的新载体。幅度保持不变。

参数:

angle (float) -- 所需的角度,以弧度为单位。

返回类型:

Vec2

property heading: float

以弧度为单位的矢量角度。

property mag: float

幅度或分量的长度。

坐标和原点之间的距离。abs的副本(vec2_instance)。

x
y
class Vec3

表示为XY Z坐标的三维载体。

__init__(x: float = 0.0, y: float = 0.0, z: float = 0.0) None
clamp(min_val: float, max_val: float) Vec3

将向量的X、Y和Z分量的值限制在给定值内。

返回类型:

Vec3

cross(other: Vec3) Vec3

计算此向量与另一个3D向量的叉积。

返回类型:

Vec3

distance(other: Vec3) float

获取此向量与另一个3D向量之间的距离。

返回类型:

float

dot(other: Vec3) float

计算此向量和另一个3D向量的点积。

返回类型:

float

from_magnitude(magnitude: float) Vec3

创建给定量级的新载体

将通过首先规范化,然后缩放该载体来创建新的载体。标题保持不变。

返回类型:

Vec3

lerp(other: Vec3, alpha: float) Vec3

创建一个在该向量和另一个向量之间线性内插的新的向量3。

参数:
  • other (Vec3) -- 另一个Vec 3实例。

  • alpha (float) -- 此载体与另一载体之间的插值量。这应该是0.0和1.0之间的值。例如:0.5是两个载体之间的中点。

返回类型:

Vec3

limit(maximum: float) Vec3

将向量的大小限制为传递的最大值。

返回类型:

Vec3

normalize() Vec3

将向量归一化,使其幅值为1。即使其成为单位向量。

返回类型:

Vec3

property mag: float

幅度或分量的长度。

坐标和原点之间的距离。abs的副本(vector_instance)。

x
y
z
class Vec4

表示为X Y Z W坐标的二维载体。

__init__(x: float = 0.0, y: float = 0.0, z: float = 0.0, w: float = 0.0) None
clamp(min_val: float, max_val: float) Vec4
返回类型:

Vec4

distance(other: Vec4) float
返回类型:

float

dot(other: Vec4) float
返回类型:

float

lerp(other: Vec4, alpha: float) Vec4

创建一个新的Vec 4,线性插值在此载体和另一个Vec 4之间。

参数:
  • other (Vec4) -- 另一个Vec 4实例。

  • alpha (float) -- 此载体与另一载体之间的插值量。这应该是0.0和1.0之间的值。例如:0.5是两个载体之间的中点。

返回类型:

Vec4

normalize() Vec4

将向量归一化,使其幅值为1。即使其成为单位向量。

返回类型:

Vec4

w
x
y
z
clamp(num: float, min_val: float, max_val: float) float

将一个值限制在最小和最大限制之间。

返回类型:

float