使用直接测定法

与表面醇或阵列结构不同, ImmediateGeometry 是实际节点。作为一个节点,可以快速添加到场景中并获得视觉输出。它使用类似于SurfaceTool的“OpenGL1.x”风格的API,但实际上它是为动态创建内容而设计的。

使用该节点生成复杂几何体(几千个顶点)效率很低,即使只执行一次。相反,它被设计成生成改变每一帧的简单几何图形。

开始之前,应通过调用 clear() . 这样可以确保不会基于上一帧中的几何图形进行构建。如果要在帧之间保留几何图形,请不要调用 clear() .

要开始生成几何图形,必须调用 begin() . begin() 采取了 PrimitiveType 作为一个论点。 PrimitiveType 是一个OpenGL概念,它指示GPU如何根据给定的顶点排列基本体,无论它是三角形、直线、点等。可以在 Mesh 类引用页。

一旦你打过电话 begin() 可以开始添加顶点了。一次添加一个顶点。首先,使用 set_****() (例如) set_normal() )然后你打电话来 add_vertex() 添加具有这些属性的顶点。例如:

# Add a vertex with normal and uv
set_normal(Vector3(0, 1, 0))
set_uv(Vector2(1, 1))
add_vertex(Vector3(0, 0, 1))

仅在调用之前添加的属性 add_vertex() 将包含在该顶点中。

最后,添加完所有顶点后,调用 end() 以表示已完成网格生成。

下面的示例代码绘制一个三角形。

extends ImmediateGeometry

void _process(delta):
    # Clean up before drawing.
    clear()

    # Begin draw.
    begin(Mesh.PRIMITIVE_TRIANGLES)

    # Prepare attributes for add_vertex.
    set_normal( Vector3(0, 0, 1))
    set_uv(Vector2(0, 0))
    # Call last for each vertex, adds the above attributes.
    add_vertex(Vector3(-1, -1, 0))

    set_normal(Vector3(0, 0, 1))
    set_uv(Vector2(0, 1))
    add_vertex(Vector3(-1, 1, 0))

    set_normal(Vector3(0, 0, 1))
    set_uv(Vector2(1, 1))
    add_vertex(Vector3(1, 1, 0))

    # End drawing.
    end()