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

使用geomdl进行NURBS/B-Spline 3D可视化失败(显示空白图像)

问题:geomdl 3D可视化空白无坐标轴,2D示例正常

问题描述

  • 通过conda安装geomdl库用于创建NURBS曲面,2D示例可正常运行,但3D示例显示空白图像,无坐标轴,即使指定显示坐标轴也无效
  • 已尝试卸载重装geomdl,问题未解决

测试代码:

from geomdl import BSpline
from geomdl import utilities
from geomdl.visualization import VisMPL

ctrlpts = [[5.0, 5.0, 0.0], [5.0, 10.0, 0.0], [10.0, 10.0, 5.0], [10.0, 5.0, 5.0], [5.0, 5.0, 5.0], [5.0, 10.0, 10.0], [10.0, 10.0, 10.0], [10.0, 5.0, 10.0], [5.0, 5.0, 15.0], [5.0, 10.0, 15.0], [10.0, 10.0, 15.0], [10.0, 5.0, 20.0], [5.0, 5.0, 20.0]]

# Create a B-Spline curve instance
curve = BSpline.Curve()

# Set up curve
curve.degree = 3
curve.ctrlpts = ctrlpts

# Auto-generate knot vector
curve.knotvector = utilities.generate_knot_vector(curve.degree, curve.ctrlpts_size)

# Set evaluation delta
curve.delta = 0.01

# Plot the control point polygon and the evaluated curve
curve.vis = VisMPL.VisCurve3D()
curve.render()

解决方案

方案1:手动创建3D轴并绑定

显式初始化Matplotlib的3D轴,确保渲染环境正确生成:

from geomdl import BSpline
from geomdl import utilities
from geomdl.visualization import VisMPL
import matplotlib.pyplot as plt

ctrlpts = [[5.0, 5.0, 0.0], [5.0, 10.0, 0.0], [10.0, 10.0, 5.0], [10.0, 5.0, 5.0], [5.0, 5.0, 5.0], [5.0, 10.0, 10.0], [10.0, 10.0, 10.0], [10.0, 5.0, 10.0], [5.0, 5.0, 15.0], [5.0, 10.0, 15.0], [10.0, 10.0, 15.0], [10.0, 5.0, 20.0], [5.0, 5.0, 20.0]]

curve = BSpline.Curve()
curve.degree = 3
curve.ctrlpts = ctrlpts
curve.knotvector = utilities.generate_knot_vector(curve.degree, curve.ctrlpts_size)
curve.delta = 0.01

# 手动创建3D绘图环境
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 将轴绑定到可视化对象
curve.vis = VisMPL.VisCurve3D(ax=ax)
curve.render()

# 强制开启坐标轴并设置标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.axis('on')
plt.show()

方案2:更新Matplotlib版本

conda环境下执行命令更新Matplotlib,确保版本与geomdl 5.x兼容(建议Matplotlib >=3.0):

conda update matplotlib

方案3:切换Matplotlib后端

部分默认后端对3D渲染支持不佳,在代码开头添加后端指定(根据系统选择合适选项):

import matplotlib
# Windows推荐Qt5Agg,Linux推荐GTK3Agg,macOS可尝试TkAgg
matplotlib.use('Qt5Agg')

from geomdl import BSpline
# 后续代码保持不变...

说明

  • 手动创建3D轴可避免VisMPL自动初始化时的轴创建失败问题
  • 旧版Matplotlib存在3D渲染bug,更新后可解决兼容性问题
  • 切换后端能适配不同系统的渲染环境,解决空白显示问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:13:19