mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-07-30 23:08:25 +02:00
[ui][3D] add EnvironmentMapEntity to display equirectangular images
Load EXR files in the 3D viewport as environment maps mapped on a sphere "attached" to the camera. * improve exr loading strategy by considering depthmaps and env maps * update to DepthMapEntity 2.1 (required to get the loading status)
This commit is contained in:
parent
fbfb7d6143
commit
63ffb20819
5 changed files with 82 additions and 9 deletions
|
@ -1,7 +1,7 @@
|
|||
import QtQuick 2.9
|
||||
import Qt3D.Core 2.1
|
||||
import Qt3D.Render 2.1
|
||||
import Qt3D.Extras 2.1
|
||||
import Qt3D.Extras 2.10
|
||||
import QtQuick.Scene3D 2.0
|
||||
import "Materials"
|
||||
import Utils 1.0
|
||||
|
@ -20,6 +20,9 @@ import Utils 1.0
|
|||
property var object: null
|
||||
property int renderMode
|
||||
|
||||
/// Scene's current camera
|
||||
property Camera camera: null
|
||||
|
||||
property bool cached: false
|
||||
|
||||
onSourceChanged: {
|
||||
|
@ -44,7 +47,7 @@ import Utils 1.0
|
|||
|
||||
switch(Filepath.extension(source)) {
|
||||
case ".abc": if(Viewer3DSettings.supportAlembic) component = abcLoaderEntityComponent; break;
|
||||
case ".exr": if(Viewer3DSettings.supportDepthMap) component = depthMapLoaderComponent; break;
|
||||
case ".exr": if(Viewer3DSettings.supportDepthMap) component = exrLoaderComponent; break;
|
||||
case ".obj":
|
||||
default: component = sceneLoaderEntityComponent; break;
|
||||
}
|
||||
|
@ -103,14 +106,31 @@ import Utils 1.0
|
|||
}
|
||||
|
||||
Component {
|
||||
id: depthMapLoaderComponent
|
||||
id: exrLoaderComponent
|
||||
MediaLoaderEntity {
|
||||
id: depthMapLoaderEntity
|
||||
id: exrLoaderEntity
|
||||
Component.onCompleted: {
|
||||
var obj = Viewer3DSettings.depthMapLoaderComp.createObject(depthMapLoaderEntity, {
|
||||
'source': source
|
||||
});
|
||||
faceCount = Scene3DHelper.faceCount(obj);
|
||||
// EXR loading strategy:
|
||||
// - [1] as a depth map
|
||||
var obj = Viewer3DSettings.depthMapLoaderComp.createObject(
|
||||
exrLoaderEntity, {
|
||||
'source': source
|
||||
});
|
||||
|
||||
if(obj.status === SceneLoader.Ready)
|
||||
{
|
||||
faceCount = Scene3DHelper.faceCount(obj);
|
||||
root.status = SceneLoader.Ready;
|
||||
return;
|
||||
}
|
||||
|
||||
// - [2] as an environment map
|
||||
obj.destroy()
|
||||
obj = Qt.createComponent("EnvironmentMapEntity.qml").createObject(
|
||||
exrLoaderEntity, {
|
||||
'source': source,
|
||||
'position': Qt.binding(function() { return root.camera.position })
|
||||
});
|
||||
root.status = SceneLoader.Ready;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue