使用直接测定法¶
与表面醇或阵列结构不同, 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()