MCPcopy Create free account
hub / github.com/MrNeRF/LichtFeld-Studio / renderPointCloudAssetPreview

Function renderPointCloudAssetPreview

src/python/lfs/py_rendering.cpp:203–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

201 }
202
203 [[nodiscard]] std::optional<core::Tensor> renderPointCloudAssetPreview(
204 vis::RenderingManager& rendering_manager,
205 const core::PointCloud& point_cloud,
206 const int width,
207 const int height,
208 const float focal_length_mm,
209 const glm::mat3* custom_rotation = nullptr,
210 const glm::vec3* custom_translation = nullptr) {
211 if (point_cloud.size() == 0) {
212 return std::nullopt;
213 }
214
215 auto* const engine = rendering_manager.getRenderingEngine();
216 if (!engine) {
217 return std::nullopt;
218 }
219
220 Viewport preview_viewport(
221 static_cast<std::size_t>(width),
222 static_cast<std::size_t>(height));
223 if (custom_rotation && custom_translation) {
224 preview_viewport.setViewMatrix(*custom_rotation, *custom_translation);
225 } else {
226 preview_viewport.camera.resetToHome();
227 }
228
229 std::vector<glm::mat4> model_transforms{
230 rendering::dataWorldTransformToVisualizerWorld(glm::mat4(1.0f)),
231 };
232 auto transform_indices = std::make_shared<core::Tensor>(
233 core::Tensor::zeros(
234 {static_cast<std::size_t>(point_cloud.size())},
235 core::Device::CUDA,
236 core::DataType::Int32));
237
238 rendering::PointCloudRenderRequest request{};
239 request.frame_view.rotation = preview_viewport.getRotationMatrix();
240 request.frame_view.translation = preview_viewport.getTranslation();
241 request.frame_view.size = {width, height};
242 request.frame_view.focal_length_mm = focal_length_mm;
243 request.render.scaling_modifier = 1.0f;
244 request.render.voxel_size = 0.01f;
245 request.render.equirectangular = false;
246 request.scene.model_transforms = &model_transforms;
247 request.scene.transform_indices = std::move(transform_indices);
248 request.scene.node_visibility_mask = {true};
249 request.transparent_background = false;
250
251 auto render_result = engine->renderPointCloudImage(point_cloud, request);
252 if (!render_result || !render_result->image || !render_result->image->is_valid()) {
253 if (!render_result) {
254 LOG_DEBUG("Point-cloud asset preview render failed: {}", render_result.error());
255 }
256 return std::nullopt;
257 }
258 return render_result->image->clone();
259 }
260

Callers 1

Calls 12

moveFunction · 0.85
getRenderingEngineMethod · 0.80
setViewMatrixMethod · 0.80
resetToHomeMethod · 0.80
getRotationMatrixMethod · 0.80
getTranslationMethod · 0.80
renderPointCloudImageMethod · 0.80
sizeMethod · 0.45
is_validMethod · 0.45
errorMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected