该方法用于设置是否使用顶点组来绘制网格。
StaticGeometryGenerator.useGroups(enable:bool = True)
True
。该方法没有返回值。
该方法用于设置是否使用顶点组来绘制网格。如果启用顶点组,则该网格中每个顶点都会属于一个或多个顶点组,而网格的各个部分则可以单独设置渲染属性(例如材质、渲染顺序等)。
如果使用此方法,则需要在创建网格时指定每个顶点属于哪个顶点组。这可以通过调用 addGroup()
方法实现。如果没有指定任何顶点组,则网格中的所有部分都将使用相同的渲染属性。
以下示例演示了如何使用 useGroups()
方法启用/禁用顶点组绘制。
from three import *
from js import Array
# 创建一个包含 3 个顶点组的网格
geometry = BufferGeometry()
geometry.setAttribute('position', Float32Array([
# 网格点数据(X、Y、Z)
0.0, 0.0, 0.0,
0.0, 1.0, 0.0,
1.0, 1.0, 0.0,
1.0, 0.0, 0.0,
0.0, 0.0, -1.0,
0.0, 1.0, -1.0,
1.0, 1.0, -1.0,
1.0, 0.0, -1.0,
]))
geometry.setIndex([0, 1, 2, 0, 2, 3, 4, 6, 5, 4, 7, 6])
geometry.addGroup(0, 6, 0) # 前 6 个点构成四边形,第 0 组
geometry.addGroup(6, 6, 1) # 后 6 个点构成四边形,第 1 组
geometry.addGroup(0, 3, 2) # 前三个点构成三角形,第 2 组
# 创建一个材质
material = MeshBasicMaterial(color=0xff0000)
# 创建一个网格对象
mesh = Mesh(geometry, material)
# 启用顶点组
mesh.geometry.useGroups(enable=True)
# 启用渲染器并渲染
scene = Scene()
camera = PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000)
camera.position.z = 2
renderer = WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
# 绘制第一种情况:使用顶点组,每个部分使用不同材质
mesh.geometry.groups[0]['materialIndex'] = 0 # 第 0 组使用默认材质
mesh.geometry.groups[1]['materialIndex'] = 1 # 第 1 组使用自定义材质
mesh.geometry.groups[2]['materialIndex'] = 2 # 第 2 组使用自定义材质
renderer.render(scene, camera)
# => 绘制一个控制台上的红色方块(前后两个正方形)和红色三角形
# 绘制第二种情况:不使用顶点组,所有部分使用相同材质
mesh.geometry.useGroups(enable=False)
mesh.material = material.clone() # 复制当前材质
renderer.render(scene, camera)
# => 绘制一个控制台上全部由红色方块组成的立方体