导入场景时,如果没有摄像机,创建一个缺省摄像机
This commit is contained in:
@@ -30,6 +30,19 @@ set(DV_UTILS_SCENE_SOURCE_FILES
|
|||||||
)
|
)
|
||||||
source_group("source/scene" FILES ${DV_UTILS_SCENE_SOURCE_FILES})
|
source_group("source/scene" FILES ${DV_UTILS_SCENE_SOURCE_FILES})
|
||||||
|
|
||||||
|
#################
|
||||||
|
# camera
|
||||||
|
#################
|
||||||
|
set(DV_UTILS_CAMERA_INCLUDE_FILES
|
||||||
|
include/camera/dvu_default_camera.h
|
||||||
|
)
|
||||||
|
source_group("include/camera" FILES ${DV_UTILS_CAMERA_INCLUDE_FILES})
|
||||||
|
|
||||||
|
set(DV_UTILS_CAMERA_SOURCE_FILES
|
||||||
|
source/camera/dvu_default_camera.cpp
|
||||||
|
)
|
||||||
|
source_group("source/camera" FILES ${DV_UTILS_CAMERA_SOURCE_FILES})
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${DV_AUTO_INCLUDE_PATH}
|
${DV_AUTO_INCLUDE_PATH}
|
||||||
${DV_CORE_INCLUDE_PATH}
|
${DV_CORE_INCLUDE_PATH}
|
||||||
@@ -43,6 +56,8 @@ add_library(dv_utils SHARED
|
|||||||
${DV_UTILS_SCENE_SOURCE_FILES}
|
${DV_UTILS_SCENE_SOURCE_FILES}
|
||||||
${DV_UTILS_BUFFER_INCLUDE_FILES}
|
${DV_UTILS_BUFFER_INCLUDE_FILES}
|
||||||
${DV_UTILS_BUFFER_SOURCE_FILES}
|
${DV_UTILS_BUFFER_SOURCE_FILES}
|
||||||
|
${DV_UTILS_CAMERA_INCLUDE_FILES}
|
||||||
|
${DV_UTILS_CAMERA_SOURCE_FILES}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(dv_utils
|
target_link_libraries(dv_utils
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "dvu_config.h"
|
||||||
|
#include "scene/dvc_scene.h"
|
||||||
|
|
||||||
|
DV_UTILS_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
bool DV_UTILS_API create_default_camera(davinci::Scene& scene);
|
||||||
|
|
||||||
|
DV_UTILS_END_NAMESPACE
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#include "camera/dvu_default_camera.h"
|
||||||
|
#include "scene/dvc_scene_node.h"
|
||||||
|
#include "scene/component/dvc_camera_component.h"
|
||||||
|
|
||||||
|
#include "math/dvc_matrix4.h"
|
||||||
|
#include "math/dvc_vector3.h"
|
||||||
|
#include "math/dvc_vector4.h"
|
||||||
|
|
||||||
|
DV_UTILS_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
bool create_default_camera(davinci::Scene& scene)
|
||||||
|
{
|
||||||
|
//------default camera define
|
||||||
|
static const davinci::fVector4 kDefaultCameraRotation(
|
||||||
|
-0.20997299253940582f, 0.3857799470424652f, 0.09062844514846802f, 0.8937962055206299f);
|
||||||
|
static const davinci::fVector3 kDefaultCameraTranslation(
|
||||||
|
7.358891487121582f, 4.958309173583984f, 6.925790786743164f);
|
||||||
|
static const float kDefaultCameraAspectRatio = 1.7777777777777777f;
|
||||||
|
static const float kDefaultCamaraFov = 0.39959652046304894f;
|
||||||
|
static const float kDefaultCameraNearClip = 0.1f;
|
||||||
|
static const float kDefaultCameraFarClip = 100.f;
|
||||||
|
//-----default camera define
|
||||||
|
|
||||||
|
|
||||||
|
//create camera scene node
|
||||||
|
davinci::SceneNodePtr sceneNode = scene.newSceneNode("__DEFAULT_CAMERA__");
|
||||||
|
|
||||||
|
//transform
|
||||||
|
davinci::fMatrix4 transform = davinci::fMatrix4::IDENTITY;
|
||||||
|
|
||||||
|
//rotation
|
||||||
|
transform = davinci::fMatrix4::makeRotate(kDefaultCameraRotation) * transform;
|
||||||
|
|
||||||
|
//translation
|
||||||
|
transform = davinci::fMatrix4::makeTrans(kDefaultCameraTranslation) * transform;
|
||||||
|
sceneNode->setTransform(transform);
|
||||||
|
|
||||||
|
//camera define
|
||||||
|
davinci::CameraComponent::CameraDefine cameraDefine;
|
||||||
|
cameraDefine.aspect = kDefaultCameraAspectRatio;
|
||||||
|
cameraDefine.fov = kDefaultCamaraFov;
|
||||||
|
cameraDefine.nearClip = kDefaultCameraNearClip;
|
||||||
|
cameraDefine.farClip = kDefaultCameraFarClip;
|
||||||
|
|
||||||
|
//camera component
|
||||||
|
davinci::CameraComponentPtr cameraComponent = std::make_shared<davinci::CameraComponent>(sceneNode);
|
||||||
|
cameraComponent->setCameraDefine(cameraDefine);
|
||||||
|
sceneNode->addComponent(std::dynamic_pointer_cast<davinci::SceneComponent>(cameraComponent));
|
||||||
|
|
||||||
|
//add to scene root node
|
||||||
|
scene.getRootSceneNode()->addChild(sceneNode);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
DV_UTILS_END_NAMESPACE
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
|
//
|
||||||
|
// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
|
||||||
|
//
|
||||||
#include "scene/dvu_load_gltf.h"
|
#include "scene/dvu_load_gltf.h"
|
||||||
|
#include "camera/dvu_default_camera.h"
|
||||||
#include "scene/dvc_scene.h"
|
#include "scene/dvc_scene.h"
|
||||||
#include "scene/dvc_scene_node.h"
|
#include "scene/dvc_scene_node.h"
|
||||||
#include "scene/component/dvc_mesh_component.h"
|
#include "scene/component/dvc_mesh_component.h"
|
||||||
@@ -321,6 +325,15 @@ bool _loadSceneNodes(const tinygltf::Model& gltfModel, davinci::Scene& scene, co
|
|||||||
{
|
{
|
||||||
transform = davinci::fMatrix4::makeTrans(gltfNode.translation[0], gltfNode.translation[1], gltfNode.translation[2]) * transform;
|
transform = davinci::fMatrix4::makeTrans(gltfNode.translation[0], gltfNode.translation[1], gltfNode.translation[2]) * transform;
|
||||||
}
|
}
|
||||||
|
if(!gltfNode.matrix.empty())
|
||||||
|
{
|
||||||
|
davinci::fMatrix4 matrix(
|
||||||
|
gltfNode.matrix[0], gltfNode.matrix[1], gltfNode.matrix[2], gltfNode.matrix[3],
|
||||||
|
gltfNode.matrix[4], gltfNode.matrix[5], gltfNode.matrix[6], gltfNode.matrix[7],
|
||||||
|
gltfNode.matrix[8], gltfNode.matrix[9], gltfNode.matrix[10], gltfNode.matrix[11],
|
||||||
|
gltfNode.matrix[12], gltfNode.matrix[13], gltfNode.matrix[14], gltfNode.matrix[15]);
|
||||||
|
transform = matrix.transpose() * transform;
|
||||||
|
}
|
||||||
sceneNode->setTransform(transform);
|
sceneNode->setTransform(transform);
|
||||||
|
|
||||||
//add mesh component
|
//add mesh component
|
||||||
@@ -515,6 +528,13 @@ bool load_scene_from_gltf(const char* szSceneFiles, davinci::Scene& scene)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//create default camera
|
||||||
|
davinci::SceneNodeConstPtr cameraNode = scene.getNodeWithComponent<davinci::CameraComponent>();
|
||||||
|
if (cameraNode.get()==nullptr)
|
||||||
|
{
|
||||||
|
create_default_camera(scene);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user