非水密3D模型内部着色与OBJ纹理禁用技术咨询
解决方案
需求1:为非水密模型内部设置指定颜色
非水密模型旋转到下方显示黑色,是因为Open3D默认只渲染三角面的正面。只需开启双面渲染,并为背面指定蓝色即可:
- 先给模型设置正面基础颜色(可选,比如灰色)
- 获取可视化器的渲染选项,开启
mesh_show_back_face,并将mesh_back_color设为蓝色
修改后的代码:
import open3d as o3d import time file1 = 'wall_right.stl' mesh = o3d.io.read_triangle_mesh(file1, False) mesh.compute_vertex_normals() # 设置模型正面的基础颜色(可根据需求调整) mesh.paint_uniform_color([0.8, 0.8, 0.8]) vis = o3d.visualization.Visualizer() vis.create_window() # 配置渲染选项,开启双面渲染并设置背面颜色 render_opt = vis.get_render_option() render_opt.mesh_show_back_face = True render_opt.mesh_back_color = [0, 0, 1] # 蓝色 vis.clear_geometries() vis.add_geometry(mesh) vis.poll_events() vis.update_renderer() time.sleep(3) vis.destroy_window()
需求2:加载纹理后禁用纹理显示
先正常加载带纹理的OBJ文件,再通过渲染选项关闭纹理显示,强制使用模型颜色:
- 启用
read_triangle_mesh(file1, True)加载纹理 - 获取渲染选项,设置
mesh_show_texture = False禁用纹理
修改后的代码:
import open3d as o3d import time file1 = 'your_textured_model.obj' # 替换为带纹理的OBJ文件路径 mesh = o3d.io.read_triangle_mesh(file1, True) # 加载纹理 mesh.compute_vertex_normals() # 禁用纹理后会显示这个颜色(可按需调整) mesh.paint_uniform_color([0.7, 0.7, 0.7]) vis = o3d.visualization.Visualizer() vis.create_window() # 关闭纹理显示 render_opt = vis.get_render_option() render_opt.mesh_show_texture = False vis.clear_geometries() vis.add_geometry(mesh) vis.poll_events() vis.update_renderer() time.sleep(3) vis.destroy_window()
内容的提问来源于stack exchange,提问作者SEU
相关产品推荐
相关产品推荐

