我想渲染几个半透明的表面。但是我发现不能直接使用RGBA格式。
我尝试使用着色器,并查阅了官方文档,只找到了一些类和方法,没有任何教程或示例(例如 open3d::visualization::rendering::Material、open3d::visualization::rendering::MaterialRecord、open3d ::可视化::渲染::渲染器...)
open3d::visualization::Visualizer 的受保护成员 std::unordered_set< std::shared_ptr< glsl::GeometryRenderer >> Geometry_renderer_ptrs_,看起来像我想要的,尽管我找不到任何间接访问它的方法。
我还检查了github问题:https://github.com/isl-org/Open3D/issues/2890,但对我没有帮助。
Python 中的事情看起来简单多了,
import open3d as o3d
plane = o3d.geometry.TriangleMesh.create_box(5,0.1,2, create_uv_map=True, map_texture_to_each_face=True)
plane.compute_triangle_normals()
mat = o3d.visualization.rendering.MaterialRecord()
mat.shader = "defaultLitTransparency"
mat.albedo_img = o3d.io.read_image("../test_scripts/google_street.png")
o3d.visualization.draw({'name': 'plane', 'geometry': plane, 'material': mat})
我想知道如何才能达到与此相同的效果。如果可能的话,我想知道如何在 C++ 中的 Open3D 中使用自定义着色器和几何图形。 (我真的需要一些例子)
环境:open3d-devel-windows-amd64-0.18.0 二进制库
两天后我找到了答案。 Open3D for C++ 不提供半透明方法。我继承了原来的Visualizer类和Renderer类,用我自己的覆盖了原来的shader。结果