You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Open3D绘制球体或在现有网格中标注?含三角形标注需求

Open3D 绘制球体、网格标注及指定三角形高亮方案

1. 绘制独立球体

用Open3D创建球体很直接,核心调用create_sphere方法,可自定义半径、中心位置和分辨率(分辨率越高球体越平滑)。代码示例:

import open3d as o3d

# 创建球体:半径0.5,中心在(0,0,0),分辨率20
sphere = o3d.geometry.TriangleMesh.create_sphere(radius=0.5, center=[0,0,0], resolution=20)
# 给球体设置颜色(可选)
sphere.paint_uniform_color([1, 0, 0])  # 红色

# 启动可视化
o3d.visualization.draw_geometries([sphere])

2. 在已有网格上做标注(用球体标记关键点)

如果要在现有网格模型上标注特定位置(比如顶点、面中心),可以创建小球体作为标记,和原网格一同渲染。示例如下:

import open3d as o3d

# 加载你的网格模型
mesh = o3d.io.read_triangle_mesh("your_mesh.ply")

# 假设要标注网格的第0个顶点
target_vertex = mesh.vertices[0]
# 创建小尺寸球体作为标记
marker = o3d.geometry.TriangleMesh.create_sphere(radius=0.1, center=target_vertex)
marker.paint_uniform_color([0, 1, 0])  # 绿色标记

# 将原网格和标记一起可视化
o3d.visualization.draw_geometries([mesh, marker])

3. 基于已知三角形坐标高亮指定三角形

针对你提到的已知三角形XYZ坐标、要高亮两个绿色三角形的需求,有两种实用方案:

方案1:找到原网格中对应三角形,修改其颜色

如果目标三角形属于已加载的网格模型,可以通过顶点坐标匹配找到三角形索引,单独设置颜色:

import open3d as o3d
import numpy as np

# 加载原网格
mesh = o3d.io.read_triangle_mesh("your_mesh.ply")
# 先给网格设置默认灰色
mesh.paint_uniform_color([0.5, 0.5, 0.5])

# 假设你已知两个目标三角形的顶点坐标
target_triangles = [
    np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]),
    np.array([[10.0, 11.0, 12.0], [13.0, 14.0, 15.0], [16.0, 17.0, 18.0]])
]

# 遍历网格所有三角形,匹配坐标(注意浮点精度用np.allclose)
for tri_idx in range(len(mesh.triangles)):
    tri_vertices = np.array([mesh.vertices[i] for i in mesh.triangles[tri_idx]])
    for target_tri in target_triangles:
        if np.allclose(tri_vertices, target_tri, atol=1e-6):
            # 给匹配到的三角形设置绿色
            mesh.vertex_colors[mesh.triangles[tri_idx]] = [0, 1, 0]
            break

# 可视化修改后的网格
o3d.visualization.draw_geometries([mesh])

方案2:直接绘制独立的绿色三角形网格

如果不想修改原网格,或目标三角形不属于原网格,可以直接构造新的三角形网格,和原网格一同渲染:

import open3d as o3d
import numpy as np

# 加载原网格
mesh = o3d.io.read_triangle_mesh("your_mesh.ply")

# 已知的两个三角形顶点坐标
tri1_verts = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])
tri2_verts = np.array([[10.0, 11.0, 12.0], [13.0, 14.0, 15.0], [16.0, 17.0, 18.0]])

# 创建第一个绿色三角形
green_tri1 = o3d.geometry.TriangleMesh()
green_tri1.vertices = o3d.utility.Vector3dVector(tri1_verts)
green_tri1.triangles = o3d.utility.Vector3iVector([[0, 1, 2]])
green_tri1.paint_uniform_color([0, 1, 0])

# 创建第二个绿色三角形
green_tri2 = o3d.geometry.TriangleMesh()
green_tri2.vertices = o3d.utility.Vector3dVector(tri2_verts)
green_tri2.triangles = o3d.utility.Vector3iVector([[0, 1, 2]])
green_tri2.paint_uniform_color([0, 1, 0])

# 一起可视化原网格和两个绿色三角形
o3d.visualization.draw_geometries([mesh, green_tri1, green_tri2])

注意:浮点坐标匹配时必须用np.allclose,避免精度误差导致匹配失败。

内容的提问来源于stack exchange,提问作者Ali Waqas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:41:26