如何使用C++在Open3D中渲染透明表面

问题描述 投票:0回答:1

我想渲染几个半透明的表面。但是我发现不能直接使用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 二进制库

c++ shader visualization graph-visualization open3d
1个回答
0
投票

两天后我找到了答案。 Open3D for C++ 不提供半透明方法。我继承了原来的Visualizer类和Renderer类,用我自己的覆盖了原来的shader。结果

© www.soinside.com 2019 - 2024. All rights reserved.