全局
MeshBVH
SerializedBVH
MeshBVHVisualizer
ExtendedTriangle
OrientedBox
Raycaster
StaticGeometryGenerator
GenerateMeshBVHWorker

StaticGeometryGenerator.useGroups

该方法用于设置是否使用顶点组来绘制网格。

语法

StaticGeometryGenerator.useGroups(enable:bool = True)

参数

  • enable:一个布尔值,用于设置是否启用顶点组,默认值为 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)
# => 绘制一个控制台上全部由红色方块组成的立方体

参考