纹理地图集#

class arcade.texture_atlas.TextureAtlasBase(ctx: 'ArcadeContext' | None)[源代码]#

基类:ABC

纹理地图集的类属基础。

abstract remove(texture: Texture) None[源代码]#

从贴图集中删除纹理。

ctx#
class arcade.texture_atlas.AtlasRegion(atlas: TextureAtlas, x: int, y: int, width: int, height: int, texture_coordinates: Tuple[float, float, float, float, float, float, float, float] | None = None)[源代码]#

基类:

存储有关纹理位置的信息。

纹理坐标按以下顺序存储为8个浮点数(4个点,每个浮点数2个)的元组:上_左、上_右、下_左、下_右。

布局::

(0, 1)                                 (1, 1)
+--------------------------------------+
|          Atlas Texture               |
|                                      |
| (2)               (3)                |
+-----------------+                    |
|   Image         |                    |
|                 |                    |
|                 |                    |
|                 |                    |
|                 |                    |
| (0)             | (1)                |
+-----------------+--------------------+
(0, 0)                                 (1, 0)
参数:
  • atlas -- 该地区所属的地图集

  • texture -- 拱廊纹理

  • x -- 纹理的x位置

  • y -- 纹理的y位置

  • width -- 纹理的宽度(以像素为单位

  • height -- 纹理的高度,以像素为单位

  • texture_coordinates -- 纹理坐标(可选)

verify_image_size(image_data: ImageData)[源代码]#

验证图像大小是否正确。纹理的内部图像可以在任何时候被篡改,从而导致地图集更新失败。

height#
texture_coordinates#
width#
x#
y#
class arcade.texture_atlas.TextureAtlas(size: Tuple[int, int], *, border: int = 1, textures: Sequence[Texture] | None = None, auto_resize: bool = True, ctx: ArcadeContext | None = None, capacity: int = 2)[源代码]#

基类:TextureAtlasBase

具有上下文中的大小的纹理图集。

纹理图集是包含多个纹理的大型纹理,因此OpenGL可以轻松地在一次绘制操作中批量绘制数千或数十万个精灵。

这是一个相当简单的地图集,存储水平条带,条带的高度是纹理/图像与大的高度。

将纹理添加到此贴图集将生成纹理ID。此id用于使用精灵列表顶点数据来引用每个精灵使用的纹理。实际的纹理坐标位于一个浮动32纹理中,该图集负责保持最新。

这本图集涉及图像和纹理。图像是实际的图像数据。纹理是包含图像和其他有关变换等信息的arcade纹理对象。几个纹理可以共享应用了不同变换的同一图像。变换只是改变纹理坐标的顺序,以翻转、旋转或镜像图像。

参数:
  • size (Tuple[int, int]) -- 以像素为单位的地图集的宽度和高度

  • border -- 当前没有效果;应始终为1以避免纹理渗漏

  • textures -- 这本地图集的纹理

  • auto_resize -- 已满时自动调整地图集大小

  • ctx -- 此图片集的上下文(如果保留为空,将使用窗口上下文)

  • capacity -- 贴图集跟踪的纹理数量。这个数乘以4096。这意味着容量=2是8192个纹理。该值可能会影响地图集的性能。

add(texture: Texture) Tuple[int, AtlasRegion][源代码]#

将纹理添加到地图集。

参数:

texture -- 要添加的纹理

返回:

Texture_id,AtlasRegion元组

抛出:

AllocatorException -- 如果没有空间放置纹理

classmethod calculate_minimum_size(textures: Sequence[Texture], border: int = 1)[源代码]#

计算存储所提供的纹理序列所需的最小图集大小

参数:
  • textures -- 纹理序列

  • border -- 每个纹理周围的边框(以像素为单位

返回:

估计的最小大小,以(宽度、高度)元组表示

classmethod create_from_texture_sequence(textures: Sequence[Texture], border: int = 1) TextureAtlas[源代码]#

从一系列纹理创建一个大小合理的纹理贴图集。

参数:
  • textures -- 纹理序列(列表、集、元组、生成器等)

  • border -- 贴图集的边框(以像素为单位)(每个纹理之间的间距)

get_image_region_info(hash: str) AtlasRegion[源代码]#

通过HAS获取区域信息和图像

参数:

hash -- 图像的哈希

返回:

给定纹理名称的AtlasRegion

get_texture_id(texture: Texture) int[源代码]#

获取贴图集中纹理的内部ID

参数:

atlas_name -- 贴图集中纹理的名称

返回:

给定纹理名称的纹理ID

抛出:

Exception -- 如果纹理不在贴图集中

get_texture_region_info(atlas_name: str) AtlasRegion[源代码]#

按贴图集名称获取纹理的区域信息

返回:

给定纹理名称的AtlasRegion

has_image(image_data: ImageData) bool[源代码]#

检查图像是否已在地图集中

has_texture(texture: Texture) bool[源代码]#

检查纹理是否已在贴图集中

has_unique_texture(texture: Texture) bool[源代码]#

检查地图集是否已具有具有相同图像数据和折点顺序的纹理

read_texture_image_from_atlas(texture: Texture) Image[源代码]#

直接从GPU上的贴图集纹理读取纹理的像素数据。该图像的内容可以通过渲染到图集中进行更改,并且在您需要在Python端更新像素数据的情况下非常有用。

参数:

texture -- 要获取其图像的纹理

返回:

包含地图集中像素数据的枕头图像

rebuild() None[源代码]#

重建基础贴图集纹理。

该方法还尝试更有效地组织纹理,按大小对它们进行排序。纹理ID将保持不变,因此精灵列表不需要重建。

remove(texture: Texture) None[源代码]#

从贴图集中删除纹理。

这不会擦除贴图集纹理本身的像素数据,但会使该区域无人认领。当地图集重建时,该地区将被填海。

参数:

texture -- 要删除的纹理

render_into(texture: Texture, projection: Tuple[float, float, float, float] | None = None)[源代码]#

直接渲染到地图集的一个子部分中。子部分由此方法中提供的纹理的已分配空间定义。

默认情况下,投影将设置为与纹理区域大小匹配 0, 0 是左下角, width, height (指纹理)是右上角。

此方法应与 with 声明::

with atlas.render_into(texture):
    # Draw commands here

# Specify projection
with atlas.render_into(texture, projection=(0, 100, 0, 100))
    # Draw geometry
参数:
  • texture -- 要渲染到的纹理区域

  • projection -- 要用于渲染的正交投影。如果不需要更改投影,则可以将此参数留空。元组值为:(Left、Right、Button、Top)

resize(size: Tuple[int, int]) None[源代码]#

在GPU上调整地图集的大小。

这将把像素数据从旧的地图集复制到新的地图集,保留完全相同的数据。如果地图集是直接渲染到中的,并且我们不必将每个纹理从系统内存单独传输到图形内存,这将非常有用。

参数:

size -- 新尺码

save(path: str | Path, flip: bool = False, components: int = 4, draw_borders: bool = False, border_color: Tuple[int, int, int] = (255, 0, 0)) None[源代码]#

将纹理贴图集保存为PNG。

还可以在图像中绘制边框,以可视化地图集的区域。

参数:
  • path -- 将地图集保存到磁盘上的路径

  • flip -- 水平翻转图像

  • components -- 组件数量。(3=RGB,4=RGBA)

  • color -- 边框的RGB颜色

返回:

包含贴图集纹理的枕头图像

show(flip: bool = False, components: int = 4, draw_borders: bool = False, border_color: Tuple[int, int, int] = (255, 0, 0)) None[源代码]#

使用枕头显示纹理地图集。

还可以在图像中绘制边框,以可视化地图集的区域。

参数:
  • flip -- 水平翻转图像

  • components -- 组件数量。(3=RGB,4=RGBA)

  • draw_borders -- 将区域边框绘制为图像

  • color -- 边框的RGB颜色

to_image(flip: bool = False, components: int = 4, draw_borders: bool = False, border_color: Tuple[int, int, int] = (255, 0, 0)) Image[源代码]#

将地图集转换为枕头图像。

还可以在图像中绘制边框,以可视化地图集的区域。

参数:
  • flip -- 水平翻转图像

  • components -- 组件数量。(3=RGB,4=RGBA)

  • draw_borders -- 将区域边框绘制为图像

  • color -- 边框的RGB颜色

返回:

包含贴图集纹理的枕头图像

update_texture_image(texture: Texture)[源代码]#

更新贴图集纹理中纹理的内部图像。新的图像需要与原始图像的大小完全相同,这意味着纹理需要已经存在于地图集中。

这可以用在图像被以某种方式处理的情况下,我们需要一种快速的方法将这些更改同步到图形内存。这项操作相当昂贵,但仍比移除旧纹理、添加新纹理并重建整个地图集快几个数量级。

参数:

texture -- 要更新的纹理

update_texture_image_from_atlas(texture: Texture) None[源代码]#

使用图形处理器上的地图集纹理中的像素数据内容更新街机纹理的内部图像。如果渲染到贴图集并需要使用新的像素数据更新纹理,这会很有用。

参数:

texture -- 要更新的纹理

use_uv_texture(unit: int = 0) None[源代码]#

将纹理坐标纹理绑定到通道。此外,如果数据过时,则此方法将纹理坐标写入纹理。这是为了避免每次将纹理添加到贴图集时进行完全更新。

参数:

unit -- 用于绑定UV纹理的纹理单位

write_image(image: Image, x: int, y: int) None[源代码]#

将PIL图像写入特定地区的地图集。

参数:
  • image -- 枕头形象

  • x -- 写入纹理的x位置

  • y -- 写入纹理的y位置

auto_resize#

获取或设置地图集的自动调整大小标志。如果启用,地图集将在满时自动调整大小。

border#

以像素为单位的纹理边框

fbo#

此贴图集的帧缓冲区对象

height#

纹理图集的高度,以像素为单位

image_uv_texture#

纹理图像的坐标纹理。

images#

返回地图集中所有图像的列表。

从图像的内部弱集合构造新的列表。

max_height#

地图集的最大高度(以像素为单位

max_size#

地图集的最大大小(以像素为单位)(x,y)

max_width#

地图集的最大宽度(以像素为单位

size#

纹理图集的宽度和高度,以像素为单位

texture#

地图集纹理。

texture_uv_texture#

纹理坐标纹理纹理。

textures#

添加到贴图集的所有纹理实例,而不考虑其内部状态。看见 unique_textures() `用于具有唯一图像数据和变换的纹理。

unique_textures#

地图集中所有独特的纹理。

这些是使用具有相同散列和相同顶点顺序的图像的纹理。有关所有纹理的完整列表,请参阅 textures()

width#

纹理贴图集的宽度(以像素为单位