几何体#

几何方法#

arcade.gl.geometry.quad_2d_fs() arcade.gl.vertex_array.Geometry[源代码]#

使用标准化的设备坐标创建屏幕对齐的四边形

arcade.gl.geometry.quad_2d(size: Tuple[float, float] = (1.0, 1.0), pos: Tuple[float, float] = (0.0, 0.0)) arcade.gl.vertex_array.Geometry[源代码]#

使用带纹理坐标的2个三角形条带创建二维四边形几何体。

参数
  • size (tuple) -- 宽度和高度

  • pos (float) -- 居中位置x和y

返回类型

A Geometry 实例。

arcade.gl.geometry.screen_rectangle(bottom_left_x: float, bottom_left_y: float, width: float, height: float) arcade.gl.vertex_array.Geometry[源代码]#

使用带纹理坐标的2个三角形条带创建屏幕矩形。

参数
  • bottom_left_x (float) -- 左下角x位置

  • bottom_left_y (float) -- 左下角y位置

  • width (float) -- 矩形的宽度

  • height (float) -- 矩形的高度

arcade.gl.geometry.cube(size: Tuple[float, float, float] = (1.0, 1.0, 1.0), center: Tuple[float, float, float] = (0.0, 0.0, 0.0)) arcade.gl.vertex_array.Geometry[源代码]#

使用法线和纹理坐标创建立方体。

参数
  • size (tuple) -- 多维数据集的大小为三元组

  • center (tuple) -- 作为三元组的立方体的中心

返回类型

arcade.gl.Geometry

返回

一个立方体

几何体#

class arcade.gl.Geometry(ctx: Context, content: Optional[Sequence[arcade.gl.types.BufferDescription]], index_buffer: arcade.gl.buffer.Buffer = None, mode=None, index_element_size: int = 4)[源代码]#

基类:object

顶点数组的更高级别抽象。它在内部动态生成与传入程序匹配的Vertex数组实例。这意味着我们可以使用不同的程序渲染相同的几何体,只要 ProgramBufferDescription 具有兼容的属性。

几何图形对象应通过 arcade.gl.Context.geometry()

参数
  • ctx (Contex) -- 此对象所属的上下文

  • content (list) -- 缓冲区列表描述

  • index_buffer (Buffer) -- 索引/元素缓冲区

  • mode (int) -- 默认绘图模式

property ctx: Context#

此几何图形所属的上下文。

类型

Geometry

property index_buffer: Optional[arcade.gl.buffer.Buffer]#

索引/元素缓冲区(如果在创建时提供)。

类型

Buffer

property num_vertices: int#

获取或设置顶点数。在正确修改这一点时要小心,并绝对确定您正在做什么。

类型

集成

instance(program: arcade.gl.program.Program) arcade.gl.vertex_array.VertexArray[源代码]#

拿到 arcade.gl.VertexArray 与此程序兼容

render(program: arcade.gl.program.Program, *, mode: Optional[ctypes.c_uint] = None, first: int = 0, vertices: Optional[int] = None, instances: int = 1) None[源代码]#

使用特定程序渲染几何体。

几何体对象将知道缓冲区包含多少顶点,因此不需要覆盖顶点,除非您有特殊情况或在创建几何体实例后调整了缓冲区的大小。

参数
  • program (Program) -- 用于渲染的程序

  • mode (gl.GLenum) -- 覆盖应使用的基元模式

  • first (int) -- 偏移起点顶点

  • vertices (int) -- 覆盖要渲染的顶点数

  • instances (int) -- 要渲染的实例数

render_indirect(program: arcade.gl.program.Program, buffer: arcade.gl.buffer.Buffer, *, mode: Optional[ctypes.c_uint] = None, count: int = - 1, first: int = 0, stride: int = 0)[源代码]#

使用间接渲染将顶点数组渲染到帧缓冲区。

警告

这需要OpenGL 4.3

缓冲区应具有以下结构:

// Array rendering - no index buffer (16 bytes)
typedef  struct {
    uint  count;
    uint  instanceCount;
    uint  first;
    uint  baseInstance;
} DrawArraysIndirectCommand;

// Index rendering - with index buffer 20 bytes
typedef  struct {
    GLuint  count;
    GLuint  instanceCount;
    GLuint  firstIndex;
    GLuint  baseVertex;
    GLuint  baseInstance;
} DrawElementsIndirectCommand;

这个 stride 是缓冲区中每个重排命令之间的字节跨度。默认情况下,我们假设数组渲染(无索引缓冲区)为16,索引渲染(带索引缓冲区)为20

参数
  • program (Program) -- 要执行的程序

  • buffer (Buffer) -- 包含一个或多个绘制参数的缓冲区

  • mode (GLuint) -- 要呈现的基元类型。三角形、线条等。

  • count (int) -- 要运行的间接绘制调用数。如果省略,将执行缓冲区中的所有绘制命令。

  • first (int) -- 要开始的第一个间接绘制调用

  • stride (int) -- 绘制命令缓冲区的字节步长。如果缓冲区压缩得很紧,则保留默认值(0)。

transform(program: arcade.gl.program.Program, buffer: Union[arcade.gl.buffer.Buffer, List[arcade.gl.buffer.Buffer]], *, first: int = 0, vertices: Optional[int] = None, instances: int = 1, buffer_offset: int = 0) None[源代码]#

使用变换反馈进行渲染。结果不是呈现到屏幕或帧缓冲区,而是在 buffer 我们供应。

如果使用几何体着色器,则会自动检测输出基本体模式。

参数
  • program (Program) -- 用于渲染的程序

  • buffer (Union[Buffer, Sequence[Buffer]]) -- 我们转换为的缓冲区。这取决于计划 varyings_capture_mode 。我们可以转换为一个插入的缓冲区,也可以将每个属性转换为单独的缓冲区。

  • first (int) -- 偏移起点顶点

  • vertices (int) -- 要渲染的顶点数

  • instances (int) -- 要渲染的实例数

  • buffer_offset (int) -- 缓冲区的字节偏移量

flush() None[源代码]#

刷新内部生成的所有顶点阵列。

Geometry实例将为它在发出重渲染和变换调用时遇到的每一组唯一的输入属性存储一个顶点数组。此数据通常非常轻量级,通常不需要刷新。

VertexArray#

class arcade.gl.VertexArray(ctx: Context, program: arcade.gl.program.Program, content: Sequence[arcade.gl.types.BufferDescription], index_buffer: arcade.gl.buffer.Buffer = None, index_element_size: int = 4)[源代码]#

基类:object

顶点数组对象的包装(VAOS)。此对象不应从用户代码实例化。使用 arcade.gl.Geometry 取而代之的是。它会自动为您创建VAO实例。程序和顶点数组之间有许多复杂的交互,这些交互将自动为您完成。

property ctx: Context#

此对象所属的上下文

类型

arcade.gl.Context

property program: arcade.gl.program.Program#

已分配的计划

类型

arcade.gl.Program

property ibo: Optional[arcade.gl.buffer.Buffer]#

元素/索引缓冲区

类型

arcade.gl.Buffer

property num_vertices: int#

顶点数

类型

集成

delete()[源代码]#

销毁底层OpenGL资源。除非你清楚地知道自己在做什么,否则不要使用这个。

static delete_glo(ctx: Context, glo: ctypes.c_uint)[源代码]#

删除此对象。当对此对象进行垃圾回收时,会自动调用此方法。

render(mode: ctypes.c_uint, first: int = 0, vertices: int = 0, instances: int = 1)[源代码]#

将顶点数组渲染到当前活动的帧缓冲区。

参数
  • mode (GLuint) -- 要呈现的基元类型。三角形、线条等。

  • first (int) -- 要从中渲染的第一个顶点

  • vertices (int) -- 要渲染的顶点数

  • instances (int) -- OpenGL实例,用于反复使用顶点

render_indirect(buffer: arcade.gl.buffer.Buffer, mode: ctypes.c_uint, count, first, stride)[源代码]#

使用间接渲染将顶点数组渲染到帧缓冲区。

警告

这需要OpenGL 4.3

参数
  • buffer (Buffer) -- 包含一个或多个绘制参数的缓冲区

  • mode (GLuint) -- 要呈现的基元类型。三角形、线条等。

  • count (int) -- 要运行的间接绘制调用数

  • first (int) -- 要开始的第一个间接绘制调用

  • stride (int) -- 绘制命令缓冲区的字节步长。如果缓冲区压缩得很紧,则保留默认值(0)。

transform_interleaved(buffer: arcade.gl.buffer.Buffer, mode: ctypes.c_uint, output_mode: ctypes.c_uint, first: int = 0, vertices: int = 0, instances: int = 1, buffer_offset=0)[源代码]#

运行转换反馈。

参数
  • buffer (Buffer) -- 用于写入输出的缓冲区

  • mode (gl.GLenum) -- 输入原语模式

  • output_mode (gl.GLenum) -- 输出基元模式

  • first (int) -- 偏移起点顶点

  • vertices (int) -- 要渲染的顶点数

  • instances (int) -- 要渲染的实例数

  • buffer_offset (int) -- 缓冲区(目标)的字节偏移量

transform_separate(buffers: List[arcade.gl.buffer.Buffer], mode: ctypes.c_uint, output_mode: ctypes.c_uint, first: int = 0, vertices: int = 0, instances: int = 1, buffer_offset=0)[源代码]#
glo#