From d7715c5520de7fba3fb3566124ba62861dc1eac7 Mon Sep 17 00:00:00 2001 From: xissburg Date: Fri, 28 Jun 2019 15:02:13 -0500 Subject: [PATCH 1/7] Option to build static lib. Remove pluginTest and move tests into a Samples folder. Refactor tests/samples. Move assets into a Media directory. Delete and ignore build dir. Remove Ogre_glTF::loaderAdapter::getMesh and replace it with Ogre_glTF::loaderAdapter::getFirstSceneNode() which returns the hierarchy in the gltf file starting from the first root node found. Create Ogre::TagPoint for items that are children of bones. Do not use inverseBindMatrices to build skeleton. Use bone node transform instead. Support skeletons with multiple roots. --- .gitignore | 3 + CMake/Ogre_glTF_ConfigTargets.cmake | 40 ++++ CMakeLists.txt | 98 ++------ {build => Media}/BrainStem.glb | Bin {build => Media}/CesiumMan.glb | Bin {build => Media}/Corset.glb | Bin {build => Media}/Monster.glb | Bin {build => Media}/MyCube.glb | Bin {build => Media}/RiggedFigure.glb | Bin {build => Media}/RiggedSimple.glb | Bin Media/blob.glb | Bin 0 -> 193172 bytes .../PBR/damagedHelmet/textures/Default_AO.jpg | Bin ...t_MetalSmooth_converted_metalRoughness.jpg | Bin .../damagedHelmet/textures/Default_albedo.jpg | Bin .../textures/Default_emissive.jpg | Bin .../damagedHelmet/textures/Default_normal.jpg | Bin {build => Media}/damagedHelmet/LICENSE.txt | 0 .../damagedHelmet/damagedHelmet.bin | Bin .../damagedHelmet/damagedHelmet.gltf | 0 {misc => Media}/gizmo.blend | Bin {build => Media}/gizmo.glb | Bin {build => Media}/gltfFiles.zip | Bin {build => Media}/marker.glb | Bin Media/spring.glb | Bin 0 -> 121184 bytes README.md | 2 + Samples/CMakeLists.txt | 7 + Samples/Common/CMakeLists.txt | 2 + Samples/Common/SamplesCommon.cpp | 0 Samples/Common/SamplesCommon.h | 95 ++++++++ Samples/LoadMesh/CMakeLists.txt | 1 + Samples/LoadMesh/main.cpp | 102 ++++++++ Samples/SkinnedMesh/CMakeLists.txt | 1 + Samples/SkinnedMesh/main.cpp | 137 +++++++++++ include/Ogre_glTF.hpp | 55 +---- pluginTest/main.cpp | 177 -------------- src/Ogre_glTF.cpp | 222 ++++++++++++++--- src/Ogre_glTF_materialLoader.cpp | 5 +- src/Ogre_glTF_modelConverter.cpp | 76 +++--- src/Ogre_glTF_skeletonImporter.cpp | 110 ++++++--- .../Ogre_glTF_internal_utils.hpp | 12 + .../Ogre_glTF_modelConverter.hpp | 9 +- .../Ogre_glTF_skeletonImporter.hpp | 6 +- test/main.cpp | 223 ------------------ 43 files changed, 722 insertions(+), 661 deletions(-) create mode 100644 CMake/Ogre_glTF_ConfigTargets.cmake rename {build => Media}/BrainStem.glb (100%) rename {build => Media}/CesiumMan.glb (100%) rename {build => Media}/Corset.glb (100%) rename {build => Media}/Monster.glb (100%) rename {build => Media}/MyCube.glb (100%) rename {build => Media}/RiggedFigure.glb (100%) rename {build => Media}/RiggedSimple.glb (100%) create mode 100644 Media/blob.glb rename {build => Media}/damagedHelmet/Assets/Models/PBR/damagedHelmet/textures/Default_AO.jpg (100%) rename {build => Media}/damagedHelmet/Assets/Models/PBR/damagedHelmet/textures/Default_MetalSmooth_converted_metalRoughness.jpg (100%) rename {build => Media}/damagedHelmet/Assets/Models/PBR/damagedHelmet/textures/Default_albedo.jpg (100%) rename {build => Media}/damagedHelmet/Assets/Models/PBR/damagedHelmet/textures/Default_emissive.jpg (100%) rename {build => Media}/damagedHelmet/Assets/Models/PBR/damagedHelmet/textures/Default_normal.jpg (100%) rename {build => Media}/damagedHelmet/LICENSE.txt (100%) rename {build => Media}/damagedHelmet/damagedHelmet.bin (100%) rename {build => Media}/damagedHelmet/damagedHelmet.gltf (100%) rename {misc => Media}/gizmo.blend (100%) rename {build => Media}/gizmo.glb (100%) rename {build => Media}/gltfFiles.zip (100%) rename {build => Media}/marker.glb (100%) create mode 100644 Media/spring.glb create mode 100644 Samples/CMakeLists.txt create mode 100644 Samples/Common/CMakeLists.txt create mode 100644 Samples/Common/SamplesCommon.cpp create mode 100644 Samples/Common/SamplesCommon.h create mode 100644 Samples/LoadMesh/CMakeLists.txt create mode 100644 Samples/LoadMesh/main.cpp create mode 100644 Samples/SkinnedMesh/CMakeLists.txt create mode 100644 Samples/SkinnedMesh/main.cpp delete mode 100644 pluginTest/main.cpp delete mode 100644 test/main.cpp diff --git a/.gitignore b/.gitignore index 2094115..c0602fe 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ Doxygen/ *.exe *.out *.app + +# VSCode +.vscode diff --git a/CMake/Ogre_glTF_ConfigTargets.cmake b/CMake/Ogre_glTF_ConfigTargets.cmake new file mode 100644 index 0000000..c525730 --- /dev/null +++ b/CMake/Ogre_glTF_ConfigTargets.cmake @@ -0,0 +1,40 @@ +function(Ogre_glTF_config_sample PROJECTNAME) + file(GLOB SOURCES ./*.cpp ./*.hpp ./include/*.hpp) + + add_executable(${PROJECTNAME} WIN32 MACOSX_BUNDLE ${SAMPLES_COMMON_HEADER_FILES} ${SAMPLES_COMMON_SOURCE_FILES} ${SOURCES}) + add_dependencies(${PROJECTNAME} Ogre_glTF) + + target_include_directories( ${PROJECTNAME} PUBLIC + #Ogre and the physics based high level material system + ${OGRE_INCLUDE_DIRS} + ${OGRE_HlmsPbs_INCLUDE_DIRS} + ${OGRE_INCLUDE_DIR}/Hlms/Common + ${CMAKE_SOURCE_DIR}/Samples/Common + ) + + target_link_libraries(${PROJECTNAME} + ${OGRE_LIBRARIES} + ${OGRE_HlmsPbs_LIBRARIES} + Ogre_glTF + ) + + if (Ogre_glTF_STATIC AND UNIX) + target_link_libraries(${PROJECTNAME} + ${OGRE_RenderSystem_GL3Plus_LIBRARIES} + ) + + if (NOT APPLE) + target_link_libraries(${PROJECTNAME} + dl + pthread + Xt + X11 + Xaw + Xrandr + ) + endif () + endif () + + set_target_properties(${PROJECTNAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +endfunction(Ogre_glTF_config_sample) \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a84323b..c846c0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(Ogre_glTF) set(CMAKE_CXX_STANDARD 14) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_INSTALL_PREFIX "./output") -set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 -D_DEBUG=1") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 -D_DEBUG=1") if(NOT CMAKE_DEBUG_POSTFIX) set(CMAKE_DEBUG_POSTFIX "_d") @@ -14,26 +14,28 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMake) -#get Ogre from your system. May need to set some variable for Windows folks +include(Ogre_glTF_ConfigTargets) + +option(Ogre_glTF_STATIC "Static build" FALSE) + +if (Ogre_glTF_STATIC) + add_definitions(-DOgre_glTF_STATIC) + set(Ogre_glTF_LIB_TYPE STATIC) + set(Ogre_glTF_LIB_SUFFIX "Static") +else () + set(Ogre_glTF_LIB_TYPE SHARED) + set(Ogre_glTF_LIB_SUFFIX "") +endif () + +#Get Ogre from your system. May need to set some variables for Windows folks find_package(OGRE COMPONENTS HlmsPbs REQUIRED) file(GLOB librarySources ./src/*.cpp ./src/private_headers/*.hpp ./include/*.hpp) -file(GLOB testSources ./test/*.cpp ./test/*.hpp ./include/*.hpp) -file(GLOB pluginTestSources ./pluginTest/*.cpp ./pluginTest/*.hpp ./include/*.hpp) -add_library(Ogre_glTF SHARED ${librarySources}) -#add_library(Ogre_glTF_static STATIC ${librarySources}) +add_library(${PROJECT_NAME} ${Ogre_glTF_LIB_TYPE} ${librarySources}) -target_compile_definitions(Ogre_glTF PUBLIC Ogre_glTF_DLL_EXPORT_CONFIG_ON) +target_compile_definitions(${PROJECT_NAME} PUBLIC Ogre_glTF_DLL_EXPORT_CONFIG_ON) -if(MSVC) - add_executable(Ogre_glTF_TEST WIN32 ${testSources}) - add_executable(Ogre_gltf_PluginTest WIN32 ${pluginTestSources}) - #add_executable(Ogre_glTF_TEST_static WIN32 ${testSources}) -else() - add_executable(Ogre_glTF_TEST ${testSources}) - add_executable(Ogre_gltf_PluginTest ${pluginTestSources}) - #add_executable(Ogre_glTF_TEST_static ${testSources}) -endif(MSVC) +set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}${Ogre_glTF_LIB_SUFFIX}) target_include_directories( Ogre_glTF PUBLIC #Ogre and the physics based high level material system @@ -46,75 +48,15 @@ target_include_directories( Ogre_glTF PUBLIC ./thirdParty/tinygltf/ ) -#target_include_directories( Ogre_glTF_static PUBLIC -# #Ogre and the physics based high level material system -# ${OGRE_INCLUDE_DIRS} -# ${OGRE_HlmsPbs_INCLUDE_DIRS} - -# #local include directory -# ./include -# ./src/private_headers -# ./thirdParty/tinygltf/ -#) - -target_include_directories( Ogre_glTF_TEST PUBLIC - #Ogre and the physics based high level material system - ${OGRE_INCLUDE_DIRS} - ${OGRE_HlmsPbs_INCLUDE_DIRS} - ${OGRE_INCLUDE_DIR}/Hlms/Common - - #local include directory - ./include -) - - -# target_include_directories( Ogre_glTF_TEST_static PUBLIC -# #Ogre and the physics based high level material system -# ${OGRE_INCLUDE_DIRS} -# ${OGRE_HlmsPbs_INCLUDE_DIRS} -# -# #local include directory -# ./include -#) - -target_include_directories(Ogre_gltf_PluginTest PUBLIC - ${OGRE_INCLUDE_DIRS} - ${OGRE_HlmsPbs_INCLUDE_DIRS} - ${OGRE_INCLUDE_DIR}/Hlms/Common - ./include -) - target_link_libraries(Ogre_glTF ${OGRE_LIBRARIES} ${OGRE_HlmsPbs_LIBRARIES} ) -target_link_libraries(Ogre_glTF_TEST - ${OGRE_LIBRARIES} - ${OGRE_HlmsPbs_LIBRARIES} - - #the library we just built - Ogre_glTF -) - -target_link_libraries(Ogre_gltf_PluginTest - ${OGRE_LIBRARIES} - ${OGRE_HlmsPbs_LIBRARIES} -) - -add_dependencies(Ogre_gltf_PluginTest Ogre_glTF) - -#target_link_libraries(Ogre_glTF_TEST_static -# ${OGRE_LIBRARIES} -# ${OGRE_HlmsPbs_LIBRARIES} -# -# #the library we just built -# Ogre_glTF_static -#) +add_subdirectory(Samples) #installation -install(TARGETS Ogre_glTF DESTINATION "bin") install(FILES ./include/Ogre_glTF.hpp ./include/Ogre_glTF_OgrePlugin.hpp @@ -122,3 +64,5 @@ install(FILES ./include/Ogre_glTF_DLL.hpp DESTINATION "include") + +install(TARGETS Ogre_glTF DESTINATION "bin") diff --git a/build/BrainStem.glb b/Media/BrainStem.glb similarity index 100% rename from build/BrainStem.glb rename to Media/BrainStem.glb diff --git a/build/CesiumMan.glb b/Media/CesiumMan.glb similarity index 100% rename from build/CesiumMan.glb rename to Media/CesiumMan.glb diff --git a/build/Corset.glb b/Media/Corset.glb similarity index 100% rename from build/Corset.glb rename to Media/Corset.glb diff --git a/build/Monster.glb b/Media/Monster.glb similarity index 100% rename from build/Monster.glb rename to Media/Monster.glb diff --git a/build/MyCube.glb b/Media/MyCube.glb similarity index 100% rename from build/MyCube.glb rename to Media/MyCube.glb diff --git a/build/RiggedFigure.glb b/Media/RiggedFigure.glb similarity index 100% rename from build/RiggedFigure.glb rename to Media/RiggedFigure.glb diff --git a/build/RiggedSimple.glb b/Media/RiggedSimple.glb similarity index 100% rename from build/RiggedSimple.glb rename to Media/RiggedSimple.glb diff --git a/Media/blob.glb b/Media/blob.glb new file mode 100644 index 0000000000000000000000000000000000000000..8430cf76471a89e6c5fa88a534447c6105159be5 GIT binary patch literal 193172 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%0D_Ae7$05RCA#-#yh|F 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 +IV&U(;}8RY#S>^-e~ULC?BRsv@R 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 V1OMa4`};ReW!_w8gwC>!{{_0KVR!%l literal 0 HcmV?d00001 diff --git a/README.md b/README.md index dc7f864..1105be6 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ auto glTFLoader = gltfPluginAccessor::findPlugin()->getLoader(); Ogre::Item* cesiumMan = glTFLoader->getModelData("CesiumMan.glb", glTFLoaderInterface::LoadFrom::ResourceManager).makeItem(smgr); ``` +In case you cloned without `--recursive`, `cd` into the `Ogre_glTF` directory and use `git submodule update --init --recursive` to download dependencies correctly. + ## Building the source code diff --git a/Samples/CMakeLists.txt b/Samples/CMakeLists.txt new file mode 100644 index 0000000..cd3bab0 --- /dev/null +++ b/Samples/CMakeLists.txt @@ -0,0 +1,7 @@ +add_subdirectory(Common) +add_subdirectory(LoadMesh) +add_subdirectory(SkinnedMesh) + +add_custom_target(CopyHLMS ALL + ${CMAKE_COMMAND} -E copy_directory ${OGRE_MEDIA_DIR}/Hlms ${PROJECT_BINARY_DIR}/Media/Hlms +) \ No newline at end of file diff --git a/Samples/Common/CMakeLists.txt b/Samples/Common/CMakeLists.txt new file mode 100644 index 0000000..9796b01 --- /dev/null +++ b/Samples/Common/CMakeLists.txt @@ -0,0 +1,2 @@ +set(SAMPLES_COMMON_HEADER_FILES SamplesCommon.h) +set(SAMPLES_COMMON_SOURCE_FILES SamplesCommon.cpp) \ No newline at end of file diff --git a/Samples/Common/SamplesCommon.cpp b/Samples/Common/SamplesCommon.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Samples/Common/SamplesCommon.h b/Samples/Common/SamplesCommon.h new file mode 100644 index 0000000..8133155 --- /dev/null +++ b/Samples/Common/SamplesCommon.h @@ -0,0 +1,95 @@ +#include +//To create workspace definitions and workspaces +#include +//To use the hlms +#include +#include +//To load Hlms +#include +//To use objects +#include +#include +#include +#include +//To play animations +#include +//To use smart pointers +#include + +//The library we are trying out in this program +#include + +#ifdef _DEBUG +const char GL_RENDER_PLUGIN[] = "RenderSystem_GL3Plus_d"; +#else +const char GL_RENDER_PLUGIN[] = "RenderSystem_GL3Plus"; +#endif + +#ifdef _WIN32 +#ifdef _DEBUG +const char D3D11_RENDER_PLUGIN[] = "RenderSystem_Direct3D11_d"; +#else +const char D3D11_RENDER_PLUGIN[] = "RenderSystem_Direct3D11"; +#endif +#endif + +#ifdef Ogre_glTF_STATIC +#include +#endif + +#ifdef _WIN32 +#define NOMINMAX +#include +#define main() WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) +#else +#define main() main(int argc, char* argv[]) +#endif + +void DeclareHlmsLibrary(Ogre::String dataFolder) +{ + //Make sure the string we got is a valid path + if(dataFolder.empty()) + dataFolder = "./"; + else if(dataFolder[dataFolder.size() - 1] != '/') + dataFolder += '/'; + + //For retrieval of the paths to the different folders needed + Ogre::String dataFolderPath; + Ogre::StringVector libraryFoldersPaths; + +#ifdef USE_UNLIT //We are loading materials based on physics + //Get the path to all the subdirectories used by HlmsUnlit + Ogre::HlmsUnlit::getDefaultPaths(dataFolderPath, libraryFoldersPaths); + + //Create the Ogre::Archive objects needed + Ogre::Archive* archiveUnlit = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); + Ogre::ArchiveVec archiveUnlitLibraryFolders; + for(const auto& libraryFolderPath : libraryFoldersPaths) + { + Ogre::Archive* archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); + archiveUnlitLibraryFolders.push_back(archiveLibrary); + } + + //Create and register the unlit Hlms + Ogre::HlmsUnlit* hlmsUnlit = OGRE_NEW Ogre::HlmsUnlit(archiveUnlit, &archiveUnlitLibraryFolders); + Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsUnlit); + hlmsUnlit->setDebugOutputPath(false, false); +#endif + + //Do the same for HlmsPbs: + Ogre::HlmsPbs::getDefaultPaths(dataFolderPath, libraryFoldersPaths); + Ogre::Archive* archivePbs = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); + + //Get the library archive(s) + Ogre::ArchiveVec archivePbsLibraryFolders; + for(const auto& libraryFolderPath : libraryFoldersPaths) + { + Ogre::Archive* archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); + archivePbsLibraryFolders.push_back(archiveLibrary); + } + + //Create and register + Ogre::HlmsPbs* hlmsPbs = OGRE_NEW Ogre::HlmsPbs(archivePbs, &archivePbsLibraryFolders); + Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs); + hlmsPbs->setDebugOutputPath(false, false); +} \ No newline at end of file diff --git a/Samples/LoadMesh/CMakeLists.txt b/Samples/LoadMesh/CMakeLists.txt new file mode 100644 index 0000000..a4e8048 --- /dev/null +++ b/Samples/LoadMesh/CMakeLists.txt @@ -0,0 +1 @@ +Ogre_glTF_config_sample(LoadMesh) \ No newline at end of file diff --git a/Samples/LoadMesh/main.cpp b/Samples/LoadMesh/main.cpp new file mode 100644 index 0000000..56e278b --- /dev/null +++ b/Samples/LoadMesh/main.cpp @@ -0,0 +1,102 @@ +#include "SamplesCommon.h" + +int main() +{ +#ifdef Ogre_glTF_STATIC + // Must instantiate before Root so that it'll be destroyed afterwards. + // Otherwise we get a crash on Ogre::Root::shutdownPlugins() +#if __linux__ + auto glPlugin = std::make_unique(); +#endif +#endif + + //Init Ogre + auto root = std::make_unique(); + Ogre::LogManager::getSingleton().setLogDetail(Ogre::LoggingLevel::LL_BOREME); + +#ifdef Ogre_glTF_STATIC +#if __linux__ + root->installPlugin(glPlugin.get()); +#endif +#else + root->loadPlugin(GL_RENDER_PLUGIN); +#ifdef _WIN32 + root->loadPlugin(D3D11_RENDER_PLUGIN); +#endif +#endif + root->showConfigDialog(); + root->getRenderSystem()->setConfigOption("FSAA", "16"); + root->getRenderSystem()->setConfigOption("sRGB Gamma Conversion", "Yes"); + root->initialise(false); + + //Create a window and a scene + Ogre::NameValuePairList params; + params["FSAA"] = "16"; + const auto window = root->createRenderWindow("glTF test!", 800, 600, false, ¶ms); + + auto smgr = root->createSceneManager(Ogre::ST_GENERIC, 2, Ogre::INSTANCING_CULLING_THREADED); + smgr->showBoundingBoxes(true); + smgr->setDisplaySceneNodes(true); + auto camera = smgr->createCamera("cam"); + + //Setup rendering pipeline + auto compositor = root->getCompositorManager2(); + const char workspaceName[] = "workspace0"; + compositor->createBasicWorkspaceDef(workspaceName, Ogre::ColourValue { 0.2f, 0.3f, 0.4f }); + auto workspace = compositor->addWorkspace(smgr, window, camera, workspaceName, true); + + DeclareHlmsLibrary("./Media"); + + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../Media/gltfFiles.zip", "Zip"); + Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(true); + + auto gltf = std::make_unique(); + Ogre::SceneNode* objectNode = nullptr; + + try + { + auto adapter = gltf->loadFromFileSystem("../Media/damagedHelmet/damagedHelmet.gltf"); + objectNode = adapter.getFirstSceneNode(smgr); + } + catch(std::exception& e) + { + Ogre::LogManager::getSingleton().logMessage(e.what()); + return -1; + } + + camera->setNearClipDistance(0.001f); + camera->setFarClipDistance(100); + camera->setPosition(2.5f, 0.6f, 2.5f); + camera->lookAt({ 0, -0.1f, 0 }); + camera->setAutoAspectRatio(true); + + auto light = smgr->createLight(); + smgr->getRootSceneNode()->createChildSceneNode()->attachObject(light); + light->setType(Ogre::Light::LT_DIRECTIONAL); + light->setDirection(Ogre::Vector3 { -1, -1, -0.5f }); + light->setPowerScale(5); + + light = smgr->createLight(); + smgr->getRootSceneNode()->createChildSceneNode()->attachObject(light); + light->setType(Ogre::Light::LT_DIRECTIONAL); + light->setDirection(Ogre::Vector3 { +1, +1, +0.5f }); + light->setPowerScale(5); + + auto last = root->getTimer()->getMilliseconds(); + auto now = last; + Ogre::Real accumulator = 0; + + while(!window->isClosed()) + { + now = root->getTimer()->getMilliseconds(); + accumulator += (now - last) / 1000.0f; + last = now; + + objectNode->setOrientation(Ogre::Quaternion(Ogre::Radian(accumulator), Ogre::Vector3::UNIT_Y)); + + root->renderOneFrame(); + Ogre::WindowEventUtilities::messagePump(); + } + + return 0; +} diff --git a/Samples/SkinnedMesh/CMakeLists.txt b/Samples/SkinnedMesh/CMakeLists.txt new file mode 100644 index 0000000..90ffb5c --- /dev/null +++ b/Samples/SkinnedMesh/CMakeLists.txt @@ -0,0 +1 @@ +Ogre_glTF_config_sample(SkinnedMesh) \ No newline at end of file diff --git a/Samples/SkinnedMesh/main.cpp b/Samples/SkinnedMesh/main.cpp new file mode 100644 index 0000000..d751350 --- /dev/null +++ b/Samples/SkinnedMesh/main.cpp @@ -0,0 +1,137 @@ +#include "SamplesCommon.h" + +Ogre::CompositorWorkspace* SetupCompositor(Ogre::Root* root, Ogre::RenderWindow* const window, Ogre::SceneManager* smgr, Ogre::Camera* camera) +{ + //Setup rendering pipeline + auto compositor = root->getCompositorManager2(); + const char workspaceName[] = "workspace0"; + compositor->createBasicWorkspaceDef(workspaceName, Ogre::ColourValue { 0.2f, 0.3f, 0.4f }); + auto workspace = compositor->addWorkspace(smgr, window, camera, workspaceName, true); + + return workspace; +} + +int main() +{ +#ifdef Ogre_glTF_STATIC + // Must instantiate before Root so that it'll be destroyed afterwards. + // Otherwise we get a crash on Ogre::Root::shutdownPlugins() +#if __linux__ + auto glPlugin = std::make_unique(); +#endif +#endif + + //Init Ogre + auto root = std::make_unique(); + Ogre::LogManager::getSingleton().setLogDetail(Ogre::LoggingLevel::LL_BOREME); + +#ifdef Ogre_glTF_STATIC +#if __linux__ + root->installPlugin(glPlugin.get()); +#endif +#else + root->loadPlugin(GL_RENDER_PLUGIN); +#ifdef _WIN32 + root->loadPlugin(D3D11_RENDER_PLUGIN); +#endif +#endif + root->showConfigDialog(); + root->getRenderSystem()->setConfigOption("FSAA", "16"); + root->getRenderSystem()->setConfigOption("sRGB Gamma Conversion", "Yes"); + root->initialise(false); + + //Create a window and a scene + Ogre::NameValuePairList params; + params["FSAA"] = "16"; + const auto window = root->createRenderWindow("glTF test!", 800, 600, false, ¶ms); + + auto smgr = root->createSceneManager(Ogre::ST_GENERIC, 2, Ogre::INSTANCING_CULLING_THREADED); + smgr->setForward3D(true, 4, 4, 5, 96, 3, 200); + auto camera = smgr->createCamera("cam"); + camera->setNearClipDistance(0.001f); + camera->setFarClipDistance(100); + camera->setAutoAspectRatio(true); + camera->setPosition(2, 2, 2); + camera->lookAt(0, 1, 0); + + //Load workspace and hlms + auto workspace = SetupCompositor(root.get(), window, smgr, camera); + + DeclareHlmsLibrary("./Media"); + + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../Media/gltfFiles.zip", "Zip"); + Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(true); + + auto gltf = std::make_unique(); + Ogre::SceneNode* objectNode = nullptr; + + try + { + auto adapter = gltf->loadGlbResource("CesiumMan.glb"); + objectNode = adapter.getFirstSceneNode(smgr); + } + catch(std::exception& e) + { + Ogre::LogManager::getSingleton().logMessage(e.what()); + return -1; + } + + //Add light + auto light = smgr->createLight(); + light->setType(Ogre::Light::LightTypes::LT_POINT); + light->setPowerScale(5); + auto lightNode = smgr->getRootSceneNode()->createChildSceneNode(); + lightNode->attachObject(light); + lightNode->setPosition(1, 1, 1); + + //Setup animation and update it over time + Ogre::SkeletonAnimation* animation = nullptr; + // Find a node that contains an item that contains an skeleton + auto childIt = objectNode->getChildIterator(); + + while(childIt.hasMoreElements()) + { + auto sceneNode = static_cast(childIt.getNext()); + if(sceneNode->numAttachedObjects() > 0) + { + auto itemIt = sceneNode->getAttachedObjectIterator(); + + while(itemIt.hasMoreElements()) + { + auto item = static_cast(itemIt.getNext()); + auto skeleton = item->getSkeletonInstance(); + + if(skeleton) + { + const auto animationName = (skeleton->getAnimations().front().getName()); + animation = item->getSkeletonInstance()->getAnimation(animationName); + animation->setEnabled(true); + animation->setLoop(true); + break; + } + } + } + } + + + auto timer = root->getTimer(); + auto now = timer->getMilliseconds(); + auto last = now; + auto duration = now - last; + + //Update + while(!window->isClosed()) + { + //Add time to animation + now = timer->getMilliseconds(); + duration = (now - last); + animation->addTime(Ogre::Real(duration) / 1000.0f); + last = now; + + //Render + root->renderOneFrame(); + Ogre::WindowEventUtilities::messagePump(); + } + + return 0; +} diff --git a/include/Ogre_glTF.hpp b/include/Ogre_glTF.hpp index 25c6e6f..4848b24 100644 --- a/include/Ogre_glTF.hpp +++ b/include/Ogre_glTF.hpp @@ -11,40 +11,6 @@ namespace Ogre_glTF //Forward declare main class class glTFLoader; - ///Structure that contains the information of the model that you loaded - struct ModelInformation - { - ///Easy method to build an item to use - /// \param smgr pointer to the scene manager where to create the item - /// \param sceneType tell if it will be static or dynamic - Ogre::Item* makeItem(Ogre::SceneManager* smgr, Ogre::SceneMemoryMgrTypes sceneType = Ogre::SCENE_DYNAMIC) - { - auto item = smgr->createItem(mesh, sceneType); - for(size_t i = 0; i < item->getNumSubItems(); ++i) { item->getSubItem(i)->setDatablock(pbrMaterialList[i]); } - return item; - } - - ///Smart pointer to the loaded mesh - Ogre::MeshPtr mesh; - ///List of materials that correspond to each of the submeshes in the model - std::vector pbrMaterialList; - - ///Local transform on the glTF node this model came from - struct ModelTransform - { - Ogre::Vector3 position = Ogre::Vector3::ZERO; - Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE; - Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY; - - void apply (Ogre::SceneNode* node) - { - node->setPosition(position); - node->setScale(scale); - node->setOrientation(orientation); - } - } transform; - }; - ///Plugin accessible interface that plugin users can use struct glTFLoaderInterface { @@ -53,12 +19,6 @@ namespace Ogre_glTF ///location where to load the data enum class LoadFrom { FileSystem, ResourceManager }; - - ///Get the model data - ///\param modelName name of the resource being loaded - ///\param loadLocation flag that signal if the model is loaded directly from the filesystem, or from Ogre's resource manager - virtual ModelInformation getModelData(const std::string& modelName, LoadFrom loadLocation) = 0; - }; ///Class that hold the loaded content of a glTF file and that can create Ogre objects from it @@ -87,9 +47,6 @@ namespace Ogre_glTF ///Deleted assignment constructor : non copyable class loaderAdapter& operator=(const loaderAdapter&) = delete; - ///Return the mesh loaded from the glTF file - Ogre::MeshPtr getMesh() const; - ///Return one of the datablocks loaded from the gltf file. ///\param index of the datablocks used. In a multi-material file, it should be one different per primitive (submesh). Ogre::HlmsDatablock* getDatablock(size_t index = 0) const; @@ -97,12 +54,13 @@ namespace Ogre_glTF ///Return the number of datablock stored size_t getDatablockCount(); - ///Get the local transform to apply to the node to align the model with what you would expect. - ModelInformation::ModelTransform getTransform(); - ///Construct an item for this object /// \param smgr pointer to the scene manager where we are creating the item - Ogre::Item* getItem(Ogre::SceneManager* smgr) const; + Ogre::SceneNode* getFirstSceneNode(Ogre::SceneManager* smgr) const; + + Ogre::SceneNode* getSceneNode(size_t index, Ogre::SceneNode* parentSceneNode, Ogre::SceneManager* smgr) const; + + void createTagPoints(int boneIndex, Ogre::SkeletonInstance* skeletonInstance, Ogre::SceneManager* smgr) const; ///Move constructor : object is movable /// \param other object to move @@ -148,9 +106,6 @@ namespace Ogre_glTF ///Load a GLB from Ogre's resource manager loaderAdapter loadGlbResource(const std::string& name) const; - ///Get the model data. Contains everything you need to create object from the model contained on the glTF asset - ModelInformation getModelData(const std::string& modelName, LoadFrom loadLocation) override; - ///Deleted copy constructor glTFLoader(const glTFLoader&) = delete; diff --git a/pluginTest/main.cpp b/pluginTest/main.cpp deleted file mode 100644 index d0fc51c..0000000 --- a/pluginTest/main.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include -#include -#include -#include - -#include "Ogre_glTF_OgrePlugin.hpp" - -#ifdef _DEBUG -const char GL_RENDER_PLUGIN[] = "./RenderSystem_GL3Plus_d"; -#else -const char GL_RENDER_PLUGIN[] = "./RenderSystem_GL3Plus"; -#endif - -#ifdef _WIN32 -#ifdef _DEBUG -const char D3D11_RENDER_PLUGIN[] = "./RenderSystem_Direct3D11_d"; -const char Ogre_glTF_PluginPath[] = "./Debug/Ogre_glTF_d"; -#else -const char D3D11_RENDER_PLUGIN[] = "./RenderSystem_Direct3D11"; -const char Ogre_glTF_PluginPath[] = "./Release/Ogre_glTF"; -#endif -#endif - -//Redefine the entry point of the program to use int main() on Windows -#ifdef _WIN32 -#define NOMINMAX -#include -#define main() WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) -#else -#define main() main(int argc, char* argv[]) -#endif - -using namespace Ogre; -using namespace Ogre_glTF; - -void declareHlmsLibrary(String dataFolder) -{ - //Make sure the string we got is a valid path - if(dataFolder.empty()) - dataFolder = "./"; - else if(dataFolder[dataFolder.size() - 1] != '/') - dataFolder += '/'; - - //For retrieval of the paths to the different folders needed - String dataFolderPath; - StringVector libraryFoldersPaths; - -#ifdef USE_UNLIT //We are loading materials based on physics - //Get the path to all the subdirectories used by HlmsUnlit - Ogre::HlmsUnlit::getDefaultPaths(dataFolderPath, libraryFoldersPaths); - - //Create the Ogre::Archive objects needed - Ogre::Archive* archiveUnlit = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); - Ogre::ArchiveVec archiveUnlitLibraryFolders; - for(const auto& libraryFolderPath : libraryFoldersPaths) - { - Ogre::Archive* archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); - archiveUnlitLibraryFolders.push_back(archiveLibrary); - } - - //Create and register the unlit Hlms - Ogre::HlmsUnlit* hlmsUnlit = OGRE_NEW Ogre::HlmsUnlit(archiveUnlit, &archiveUnlitLibraryFolders); - Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsUnlit); - hlmsUnlit->setDebugOutputPath(false, false); -#endif - - //Do the same for HlmsPbs: - HlmsPbs::getDefaultPaths(dataFolderPath, libraryFoldersPaths); - Archive* archivePbs = ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); - - //Get the library archive(s) - ArchiveVec archivePbsLibraryFolders; - for(const auto& libraryFolderPath : libraryFoldersPaths) - { - Archive* archiveLibrary = ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); - archivePbsLibraryFolders.push_back(archiveLibrary); - } - - //Create and register - HlmsPbs* hlmsPbs = OGRE_NEW HlmsPbs(archivePbs, &archivePbsLibraryFolders); - Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs); - hlmsPbs->setDebugOutputPath(false, false); -} - -CompositorWorkspace* setupCompositor(Root* root, RenderWindow* const window, SceneManager* smgr, Camera* camera) -{ - //Setup rendering pipeline - auto compositor = root->getCompositorManager2(); - const char workspaceName[] = "workspace0"; - compositor->createBasicWorkspaceDef(workspaceName, ColourValue { 0.2f, 0.3f, 0.4f }); - auto workspace = compositor->addWorkspace(smgr, window, camera, workspaceName, true); - - return workspace; -} - -int main() -{ - //Create Ogre's root, and load every plugins you normally do (could use plugin.cfg for same effect) - auto root = std::make_unique(); - LogManager::getSingleton().setLogDetail(LL_BOREME); - root->loadPlugin(GL_RENDER_PLUGIN); -#ifdef _WIN32 - root->loadPlugin(D3D11_RENDER_PLUGIN); - //Append the Ogre_glTF plugin to that list - root->loadPlugin(Ogre_glTF_PluginPath); -#else - root->loadPlugin("./libOgre_glTF.so"); -#endif - - //Startup Ogre as you would generally do it - root->showConfigDialog(); - root->getRenderSystem()->setConfigOption("FSAA", "16"); - root->getRenderSystem()->setConfigOption("sRGB Gamma Conversion", "Yes"); - root->initialise(false); - - //Create a window and a scene - NameValuePairList params; - params["FSAA"] = "16"; - params["gamma"] = "true"; - const auto window = root->createRenderWindow("glTF test!", 800, 600, false, ¶ms); - auto smgr = root->createSceneManager(ST_GENERIC, 2, INSTANCING_CULLING_THREADED); - smgr->setForward3D(true, 4, 4, 5, 96, 3, 200); - auto camera = smgr->createCamera("cam"); - camera->setNearClipDistance(0.001f); - camera->setFarClipDistance(100); - camera->setAutoAspectRatio(true); - camera->setPosition(2, 2, 2); - camera->lookAt(0, 1, 0); - - //Load workspace and hlms - auto workspace = setupCompositor(root.get(), window, smgr, camera); - declareHlmsLibrary("./"); - - //Init resources - ResourceGroupManager::getSingleton().addResourceLocation("gltfFiles.zip", "Zip"); - ResourceGroupManager::getSingleton().initialiseAllResourceGroups(true); - - //Get access to the gltf loader, and load a GLB file in the resources to an item - auto glTFLoader = gltfPluginAccessor::findPlugin()->getLoader(); - auto model = glTFLoader->getModelData("CesiumMan.glb", glTFLoaderInterface::LoadFrom::ResourceManager); - auto item = model.makeItem(smgr); - auto itemNode = smgr->getRootSceneNode()->createChildSceneNode(); - itemNode->attachObject(item); - model.transform.apply(itemNode); - - //Add light - auto light = smgr->createLight(); - light->setType(Light::LightTypes::LT_POINT); - light->setPowerScale(5); - auto lightNode = smgr->getRootSceneNode()->createChildSceneNode(); - lightNode->attachObject(light); - lightNode->setPosition(1, 1, 1); - - //Setup animation and how to update it with time - const auto animationName = (item->getSkeletonInstance()->getAnimations().front().getName()); - auto animation = item->getSkeletonInstance()->getAnimation(animationName); - animation->setEnabled(true); - animation->setLoop(true); - auto timer = root->getTimer(); - auto now = timer->getMilliseconds(); - auto last = now; - auto duration = now - last; - - //Update - while(!window->isClosed()) - { - //Add time to animation - now = timer->getMilliseconds(); - duration = (now - last); - animation->addTime(Real(duration) / 1000.0f); - last = now; - - //Render - root->renderOneFrame(); - WindowEventUtilities::messagePump(); - } -} diff --git a/src/Ogre_glTF.cpp b/src/Ogre_glTF.cpp index 33ad591..7ecbb1e 100644 --- a/src/Ogre_glTF.cpp +++ b/src/Ogre_glTF.cpp @@ -7,6 +7,7 @@ #include "Ogre_glTF_skeletonImporter.hpp" #include "Ogre_glTF_common.hpp" #include "Ogre_glTF_OgreResource.hpp" +#include "Ogre_glTF_internal_utils.hpp" #define TINYGLTF_IMPLEMENTATION #define STB_IMAGE_IMPLEMENTATION @@ -15,6 +16,7 @@ #include #include +#include using namespace Ogre_glTF; @@ -55,33 +57,203 @@ loaderAdapter::loaderAdapter() : pimpl { std::make_unique() } { OgreLog("C loaderAdapter::~loaderAdapter() { OgreLog("Destructed adapter object..."); } -Ogre::Item* loaderAdapter::getItem(Ogre::SceneManager* smgr) const +Ogre::SceneNode* loaderAdapter::getFirstSceneNode(Ogre::SceneManager* smgr) const { if(isOk()) { pimpl->textureImp.loadTextures(); - Ogre::MeshPtr Mesh = getMesh(); - auto Item = smgr->createItem(Mesh); - for(size_t i = 0; i < Item->getNumSubItems(); ++i) { Item->getSubItem(i)->setDatablock(getDatablock(i)); } - return Item; + // Find a node which is not a child of another node + std::vector allChildren; + for(const auto& node : pimpl->model.nodes) + { + allChildren.insert(allChildren.end(), node.children.begin(), node.children.end()); + } + // Find a node index that is not preset in the allChildren array and build + // the hierarchy from there. + for(size_t i = 0; i < pimpl->model.nodes.size(); ++i) + { + if(std::find(allChildren.begin(), allChildren.end(), i) == allChildren.end()) { + return getSceneNode(i, smgr->getRootSceneNode(), smgr); + } + } } + return nullptr; } -ModelInformation::ModelTransform loaderAdapter::getTransform() { return this->pimpl->modelConv.getTransform(); } +Ogre::SceneNode* loaderAdapter::getSceneNode(size_t index, Ogre::SceneNode* parentSceneNode, Ogre::SceneManager* smgr) const +{ + assert(index < pimpl->model.nodes.size()); + + const auto& node = pimpl->model.nodes[index]; + // Check if node is not a bone + for(const auto& skin : pimpl->model.skins) + { + if(std::find(skin.joints.begin(), skin.joints.end(), index) != skin.joints.end()) + { + return nullptr; + } + } + + auto sceneNode = parentSceneNode->createChildSceneNode(); + sceneNode->setName(node.name); + + if(!node.translation.empty()) + sceneNode->setPosition(node.translation[0], node.translation[1], node.translation[2]); + + if(!node.rotation.empty()) + sceneNode->setOrientation(node.rotation[3], node.rotation[0], node.rotation[1], node.rotation[2]); + + if(!node.scale.empty()) + sceneNode->setScale(node.scale[0], node.scale[1], node.scale[2]); + + if(!node.matrix.empty()) + { + std::array matrixArray { 0 }; + internal_utils::container_double_to_real(node.matrix, matrixArray); + Ogre::Matrix4 matrix { matrixArray.data() }; + Ogre::Vector3 position; + Ogre::Quaternion orientation; + Ogre::Vector3 scale; + matrix.transpose().decomposition(position, scale, orientation); + sceneNode->setPosition(position); + sceneNode->setOrientation(orientation); + sceneNode->setScale(scale); + } + + if(node.mesh >= 0) + { + auto ogreMesh = pimpl->modelConv.getOgreMesh(node.mesh); + + if(node.skin >= 0) + { + auto skeleton = this->pimpl->skeletonImp.getSkeleton(node.skin); + if(skeleton) + { + ogreMesh->_notifySkeleton(skeleton); + } + } + + auto item = smgr->createItem(ogreMesh); + const auto& mesh = pimpl->model.meshes[node.mesh]; + for(size_t i = 0; i < mesh.primitives.size(); ++i) + { + auto subItem = item->getSubItem(i); + subItem->setDatablock(getDatablock(mesh.primitives[i].material)); + } + sceneNode->attachObject(item); + + // Add tag points + auto skeletonInstance = item->getSkeletonInstance(); + if(skeletonInstance) + { + // Find all root bones. Collect all children of all nodes in the skin and then find + // all nodes in the skin that are not in the set of children. Those are all nodes + // that don't have a parent because they're not a child of any other node. + std::vector rootBones; + std::vector allChildren; + const auto& skin = pimpl->model.skins[node.skin]; + + for(const auto& nodeIndex : skin.joints) + { + const auto& node = pimpl->model.nodes[nodeIndex]; + allChildren.insert(allChildren.end(), node.children.begin(), node.children.end()); + } + + for(const auto& nodeIndex : skin.joints) + { + if(std::find(allChildren.begin(), allChildren.end(), nodeIndex) == allChildren.end()) { + rootBones.push_back(nodeIndex); + } + } + + for(int boneIndex : rootBones) + { + createTagPoints(boneIndex, skeletonInstance, smgr); + } + } + } + + for(const auto& child : node.children) + { + getSceneNode(child, sceneNode, smgr); + } + + return sceneNode; +} -Ogre::MeshPtr loaderAdapter::getMesh() const +void loaderAdapter::createTagPoints(int boneIndex, Ogre::SkeletonInstance* skeletonInstance, Ogre::SceneManager* smgr) const { - auto Mesh = this->pimpl->modelConv.getOgreMesh(); + const auto& boneNode = pimpl->model.nodes[boneIndex]; - if(this->pimpl->modelConv.hasSkins()) + for(auto child : boneNode.children) { - //load skeleton information - auto skeleton = this->pimpl->skeletonImp.getSkeleton(this->adapterName); - Mesh->_notifySkeleton(skeleton); + const auto& childNode = pimpl->model.nodes[child]; + + if(childNode.mesh >= 0) + { + auto tagPoint = smgr->createTagPoint(); + tagPoint->setName(childNode.name); + + Ogre::Vector3 position; + Ogre::Quaternion orientation; + Ogre::Vector3 scale(1); + + if(!childNode.translation.empty()) + position = Ogre::Vector3(childNode.translation[0], childNode.translation[1], childNode.translation[2]); + + if(!childNode.rotation.empty()) + orientation = Ogre::Quaternion(childNode.rotation[3], childNode.rotation[0], childNode.rotation[1], childNode.rotation[2]); + + if(!childNode.scale.empty()) + scale = Ogre::Vector3(childNode.scale[0], childNode.scale[1], childNode.scale[2]); + + if(!childNode.matrix.empty()) + { + std::array matrixArray { 0 }; + internal_utils::container_double_to_real(childNode.matrix, matrixArray); + Ogre::Matrix4 matrix { matrixArray.data() }; + matrix.transpose().decomposition(position, scale, orientation); + } + + tagPoint->setPosition(position); + tagPoint->setOrientation(orientation); + tagPoint->setScale(scale); + + auto ogreMesh = pimpl->modelConv.getOgreMesh(childNode.mesh); + + if(childNode.skin >= 0) + { + auto skeleton = this->pimpl->skeletonImp.getSkeleton(childNode.skin); + if(skeleton) + { + ogreMesh->_notifySkeleton(skeleton); + } + } + + auto item = smgr->createItem(ogreMesh); + const auto& mesh = pimpl->model.meshes[childNode.mesh]; + for(size_t i = 0; i < mesh.primitives.size(); ++i) + { + auto subItem = item->getSubItem(i); + subItem->setDatablock(getDatablock(mesh.primitives[i].material)); + } + tagPoint->attachObject(item); + + auto parentBone = skeletonInstance->getBone(boneNode.name); + parentBone->addTagPoint(tagPoint); + + for(const auto& childOfChild : childNode.children) + { + getSceneNode(childOfChild, tagPoint, smgr); + } + } + else + { + createTagPoints(child, skeletonInstance, smgr); + } } - return Mesh; } Ogre::HlmsDatablock* loaderAdapter::getDatablock(size_t index) const { return pimpl->materialLoad.getDatablock(index); } @@ -210,30 +382,6 @@ loaderAdapter glTFLoader::loadGlbResource(const std::string& name) const return adapter; } -ModelInformation glTFLoader::getModelData(const std::string& modelName, LoadFrom loadLocation) -{ - auto adapter = [&] { - switch(loadLocation) - { - case LoadFrom::FileSystem: return loadFromFileSystem(modelName); - case LoadFrom::ResourceManager: return loadGlbResource(modelName); - } - - return loaderAdapter {}; - }(); - - if(!adapter.isOk()) OgreLog("adapter is signaling it isn't in \"ok\" state"); - - adapter.pimpl->textureImp.loadTextures(); - - ModelInformation model; - model.mesh = adapter.getMesh(); - model.transform = adapter.getTransform(); - for(size_t i { 0 }; i < adapter.getDatablockCount(); i++) model.pbrMaterialList.push_back(adapter.getDatablock(i)); - - return model; -} - glTFLoader::glTFLoader(glTFLoader&& other) noexcept : loaderImpl(std::move(other.loaderImpl)) {} glTFLoader& glTFLoader::operator=(glTFLoader&& other) noexcept diff --git a/src/Ogre_glTF_materialLoader.cpp b/src/Ogre_glTF_materialLoader.cpp index 101f464..a607b9e 100644 --- a/src/Ogre_glTF_materialLoader.cpp +++ b/src/Ogre_glTF_materialLoader.cpp @@ -136,11 +136,8 @@ materialLoader::materialLoader(tinygltf::Model& input, textureImporter& textureI Ogre::HlmsDatablock* materialLoader::getDatablock(size_t index) const { OgreLog("Loading material..."); - //TODO this will need some modification if we support multiple meshes by glTF file auto HlmsPbs = static_cast(Ogre::Root::getSingleton().getHlmsManager()->getHlms(Ogre::HlmsTypes::HLMS_PBS)); - const auto mainMeshIndex = (model.defaultScene != 0 ? model.nodes[model.scenes[model.defaultScene].nodes.front()].mesh : 0); - const auto& mesh = model.meshes[mainMeshIndex]; - const auto material = model.materials[mesh.primitives.at(index).material]; + const auto material = model.materials[index]; auto datablock = static_cast(HlmsPbs->getDatablock(Ogre::IdString(material.name))); if(datablock) diff --git a/src/Ogre_glTF_modelConverter.cpp b/src/Ogre_glTF_modelConverter.cpp index 2145214..4d005f2 100644 --- a/src/Ogre_glTF_modelConverter.cpp +++ b/src/Ogre_glTF_modelConverter.cpp @@ -57,12 +57,36 @@ Ogre::VertexBufferPackedVec modelConverter::constructVertexBuffer(const std::vec return vec; } -//TODO make this method make the mesh id. Enumerate the meshes in the file before blindlessly loading the first one -Ogre::MeshPtr modelConverter::getOgreMesh() +Ogre::MeshPtr modelConverter::getOgreMesh(const Ogre::String& name) +{ + if(name.empty()) + { + if(!model.meshes.empty()) { + return getOgreMesh(model.meshes.front()); + } + else + { + return Ogre::MeshPtr(); + } + } + + for(const auto& mesh : model.meshes) { + if(!mesh.name.empty() && mesh.name == name) { + return getOgreMesh(mesh); + } + } + + return Ogre::MeshPtr(); +} + +Ogre::MeshPtr modelConverter::getOgreMesh(size_t index) +{ + assert(index < model.meshes.size()); + return getOgreMesh(model.meshes[index]); +} + +Ogre::MeshPtr modelConverter::getOgreMesh(const tinygltf::Mesh& mesh) { - OgreLog("Default scene" + std::to_string(model.defaultScene)); - const auto mainMeshIndex = (model.defaultScene != 0 ? model.nodes[model.scenes[model.defaultScene].nodes.front()].mesh : 0); - const auto& mesh = model.meshes[mainMeshIndex]; Ogre::Aabb boundingBox; OgreLog("Found mesh " + mesh.name + " in glTF file"); @@ -92,7 +116,7 @@ Ogre::MeshPtr modelConverter::getOgreMesh() parts.push_back(std::move(extractVertexBuffer(atribute, boundingBox))); } - //Get (if they exists) the blend weights and bone index parts of our vertex array object content + //Get (if they exist) the blend weights and bone index parts of our vertex array object content const auto blendIndicesIt = std::find_if(std::begin(parts), std::end(parts), [](const vertexBufferPart& vertexBufferPart) { return (vertexBufferPart.semantic == Ogre::VertexElementSemantic::VES_BLEND_INDICES); }); @@ -199,46 +223,6 @@ void modelConverter::debugDump() const bool modelConverter::hasSkins() const { return !model.skins.empty(); } -ModelInformation::ModelTransform modelConverter::getTransform() -{ - ModelInformation::ModelTransform trans; - std::array translation { 0 }, scale { 0 }; - std::array rotation { 0 }; - std::array local_matrix { 0 }; - bool set = false; - - // Just get the first one - not sure if there can be more for a model but doubt it - const auto& nodes = (model.defaultScene != 0 ? model.nodes[model.scenes[model.defaultScene].nodes[0]] : model.nodes[0]); - if(!nodes.translation.empty()) - { - internal_utils::container_double_to_float(nodes.translation, translation); - trans.position = Ogre::Vector3 { translation.data() }; - set = true; - } - if(!nodes.scale.empty()) - { - internal_utils::container_double_to_float(nodes.scale, scale); - trans.scale = Ogre::Vector3 { scale.data() }; - set = true; - } - if(!nodes.rotation.empty()) - { - internal_utils::container_double_to_float(nodes.rotation, rotation); - trans.orientation = Ogre::Quaternion { rotation[3], rotation[0], rotation[1], rotation[2] }; - set = true; - } - - if(!set && !nodes.matrix.empty()) - { - internal_utils::container_double_to_float(nodes.matrix, local_matrix); - Ogre::Matrix4 transform_matrix { local_matrix.data() }; - - transform_matrix.transpose().decomposition(trans.position, trans.scale, trans.orientation); - } - - return trans; -} - Ogre::VaoManager* modelConverter::getVaoManager() { //Our class shouldn't be able to exist if Ogre hasn't been initalized with a valid render system. This call should allways succeed. diff --git a/src/Ogre_glTF_skeletonImporter.cpp b/src/Ogre_glTF_skeletonImporter.cpp index ced1701..db973e0 100644 --- a/src/Ogre_glTF_skeletonImporter.cpp +++ b/src/Ogre_glTF_skeletonImporter.cpp @@ -12,44 +12,65 @@ using namespace Ogre_glTF; int skeletonImporter::skeletonID = 0; -void skeletonImporter::addChidren(const std::string& skinName, const std::vector& childs, Ogre::v1::OldBone* parent, const std::vector& joints) +void skeletonImporter::addChidren(const std::vector& childs, Ogre::v1::OldBone* parent) { for(auto child : childs) { const auto& node = model.nodes[child]; - //OgreLog("Node name is " + node.name + "!"); + + if(node.mesh >= 0) + { + // child is a mesh + continue; + } auto bone = skeleton->getBone(nodeToJointMap[child]); if(!bone) { throw InitError("could not get bone " + std::to_string(bone->getHandle())); } - parent->addChild(bone); + if(!node.translation.empty()) + bone->setPosition(node.translation[0], node.translation[1], node.translation[2]); - auto bindMatrix = bindMatrices[nodeToJointMap[child]]; + if(!node.rotation.empty()) + bone->setOrientation(node.rotation[3], node.rotation[0], node.rotation[1], node.rotation[2]); - Ogre::Vector3 translation, scale; - Ogre::Quaternion rotation; + if(!node.scale.empty()) + bone->setScale(node.scale[0], node.scale[1], node.scale[2]); - bindMatrix.decomposition(translation, scale, rotation); + if(!node.matrix.empty()) + { + std::array matrixArray { 0 }; + internal_utils::container_double_to_real(node.matrix, matrixArray); + Ogre::Matrix4 matrix { matrixArray.data() }; + Ogre::Vector3 position; + Ogre::Quaternion orientation; + Ogre::Vector3 scale; + matrix.transpose().decomposition(position, scale, orientation); + bone->setPosition(position); + bone->setOrientation(orientation); + bone->setScale(scale); + } - bone->setPosition(parent->convertWorldToLocalPosition(translation)); - bone->setOrientation(parent->convertWorldToLocalOrientation(rotation)); - bone->setScale(parent->_getDerivedScale() / scale); + parent->addChild(bone); - addChidren(skinName + std::to_string(child), model.nodes[child].children, bone, joints); + addChidren(model.nodes[child].children, bone); } } -void skeletonImporter::loadBoneHierarchy(const tinygltf::Skin& skin, Ogre::v1::OldBone* rootBone, const std::string& name) +void skeletonImporter::loadBoneHierarchy(int boneIndex) { - const auto& node = model.nodes[skin.joints[0]]; - const auto& skeleton = model.nodes[skin.skeleton]; - - std::array translation { 0 }, scale { 0 }; - std::array rotation { 0 }; - internal_utils::container_double_to_float(skeleton.translation, translation); - if(skeleton.scale.size() == 3) internal_utils::container_double_to_float(skeleton.scale, scale); - internal_utils::container_double_to_float(skeleton.rotation, rotation); + const auto& node = model.nodes[boneIndex]; + Ogre::v1::OldBone* rootBone = skeleton->getBone(nodeToJointMap[boneIndex]); + + std::array translation = { 0, 0, 0 }; + std::array scale = { 1, 1, 1 }; + std::array rotation = { 0, 0, 0, 1 }; + if(!node.translation.empty()) + internal_utils::container_double_to_float(node.translation, translation); + if(!node.scale.empty()) + internal_utils::container_double_to_float(node.scale, scale); + if(!node.rotation.empty()) + internal_utils::container_double_to_float(node.rotation, rotation); Ogre::Vector3 trans = Ogre::Vector3 { translation.data() }; Ogre::Quaternion rot = Ogre::Quaternion { rotation[3], rotation[0], rotation[1], rotation[2] }; @@ -65,7 +86,7 @@ void skeletonImporter::loadBoneHierarchy(const tinygltf::Skin& skin, Ogre::v1::O rootBoneXformLog << "rootBone " << trans << " " << rot; OgreLog(rootBoneXformLog); - addChidren(name, node.children, rootBone, skin.joints); + addChidren(node.children, rootBone); } skeletonImporter::skeletonImporter(tinygltf::Model& input) : model { input } {} @@ -345,15 +366,12 @@ std::vector traversal(const tinygltf::Model& m, int node) return o; } -Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(const std::string& name) +Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(size_t index) { - const auto& skins = model.skins; - assert(!skins.empty()); - - //TODO, take the skin of a specific mesh... - const auto& firstSkin = skins.front(); + assert(index < model.skins.size()); + const auto& skin = model.skins[index]; - const std::string skeletonName = name + (!firstSkin.name.empty() ? firstSkin.name : "unnamedSkeleton" + std::to_string(skeletonID++)); + const std::string skeletonName = (!skin.name.empty() ? skin.name : "unnamedSkeleton" + std::to_string(skeletonID++)); OgreLog("First skin name is " + skeletonName); //Get skeleton @@ -367,19 +385,19 @@ Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(const std::string& name) //Create new skeleton skeleton = Ogre::v1::OldSkeletonManager::getSingleton().create(skeletonName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, true); - if(!skeleton) throw InitError("Coudn't create skeletion for skin" + skeletonName); + if(!skeleton) throw InitError("Couldn't create skeletion for skin" + skeletonName); - //OgreLog("skin.skeleton = " + std::to_string(firstSkin.skeleton)); - //OgreLog("first joint : " + std::to_string(firstSkin.joints.front())); + //OgreLog("skin.skeleton = " + std::to_string(skin.skeleton)); + //OgreLog("first joint : " + std::to_string(skin.joints.front())); { - const auto inverseBindMatricesID = firstSkin.inverseBindMatrices; + const auto inverseBindMatricesID = skin.inverseBindMatrices; const auto& inverseBindMatricesAccessor = model.accessors[inverseBindMatricesID]; const auto& bufferView = model.bufferViews[inverseBindMatricesAccessor.bufferView]; const auto byteStride = inverseBindMatricesAccessor.ByteStride(bufferView); const auto& buffer = model.buffers[bufferView.buffer]; const unsigned char* dataStart = buffer.data.data() + bufferView.byteOffset + inverseBindMatricesAccessor.byteOffset; - assert(inverseBindMatricesAccessor.count == firstSkin.joints.size()); + assert(inverseBindMatricesAccessor.count == skin.joints.size()); assert(inverseBindMatricesAccessor.type == TINYGLTF_TYPE_MAT4); std::array floatMatrix {}; @@ -421,14 +439,21 @@ Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(const std::string& name) } } - //Build the "node to joint map". In the vertex buffer, proprery "JOINT_0" refer to the joints that affect a particular vertex of the skined mesh. + std::vector rootBones; + std::vector allChildren; + for(const auto& nodeIndex : skin.joints) + { + const auto& node = model.nodes[nodeIndex]; + allChildren.insert(allChildren.end(), node.children.begin(), node.children.end()); + } + + //Build the "node to joint map". In the vertex buffer, property "JOINT_0" refer to the joints that affect a particular vertex of the skined mesh. //To refer to theses joints, it refer to the index of the node in the skin.joints array. //We need to be able to get the index for each of theses joints in the array easilly, so we are builind a dictionarry to be able to reverse-search them - for(int i = 0; i < firstSkin.joints.size(); ++i) + for(int i = 0; i < skin.joints.size(); ++i) { - //Get the index in the "node" array in the glTF's JSON - const auto jointNode = firstSkin.joints[i]; + const auto jointNode = skin.joints[i]; //Record in the dictionary the joint node-> index nodeToJointMap[jointNode] = i; @@ -438,11 +463,18 @@ Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(const std::string& name) //Create bone with index "i" auto bone = skeleton->createBone(!name.empty() ? name : skeletonName + std::to_string(i), i); + + if(std::find(allChildren.begin(), allChildren.end(), jointNode) == allChildren.end()) { + rootBones.push_back(jointNode); + } } - loadBoneHierarchy(firstSkin, skeleton->getBone(nodeToJointMap[firstSkin.skeleton]), skeletonName); + for(int boneIndex : rootBones) + { + loadBoneHierarchy(boneIndex); + } skeleton->setBindingPose(); - loadSkeletonAnimations(firstSkin, skeletonName); + loadSkeletonAnimations(skin, skeletonName); return skeleton; } diff --git a/src/private_headers/Ogre_glTF_internal_utils.hpp b/src/private_headers/Ogre_glTF_internal_utils.hpp index e714a16..1169082 100644 --- a/src/private_headers/Ogre_glTF_internal_utils.hpp +++ b/src/private_headers/Ogre_glTF_internal_utils.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include namespace Ogre_glTF { @@ -16,5 +17,16 @@ namespace Ogre_glTF return static_cast(n); }); } + + template + void container_double_to_real(inputContainer& in, outputContainer& out) + { + std::transform(std::begin(in), + std::end(in), + std::begin(out), + [](double n) { + return static_cast(n); + }); + } } } \ No newline at end of file diff --git a/src/private_headers/Ogre_glTF_modelConverter.hpp b/src/private_headers/Ogre_glTF_modelConverter.hpp index f966f2f..b1f627d 100644 --- a/src/private_headers/Ogre_glTF_modelConverter.hpp +++ b/src/private_headers/Ogre_glTF_modelConverter.hpp @@ -158,8 +158,10 @@ namespace Ogre_glTF /// \param input model we are converting into an Ogre model modelConverter(tinygltf::Model& input); - ///Return a mesh generated from the data inside the gltf model. Currently look for the mesh attached on the first node of the default scene - Ogre::MeshPtr getOgreMesh(); + ///Returns the mesh with the given name in the glTF file. If name is empty it will return the first mesh if any. + Ogre::MeshPtr getOgreMesh(const Ogre::String& name = ""); + Ogre::MeshPtr getOgreMesh(size_t index); + Ogre::MeshPtr getOgreMesh(const tinygltf::Mesh& mesh); ///Print out debug information on the model structure // nodes contain transformation and scale information @@ -168,9 +170,6 @@ namespace Ogre_glTF ///Return true if the model defines skins. Skins are "vertex to bone" asignment for skeletal animation bool hasSkins() const; - /// Return the transforms. The item pointer will be a nullptr at this point - ModelInformation::ModelTransform getTransform(); - private: ///Get a pointer to the Ogre::VaoManager static Ogre::VaoManager* getVaoManager(); diff --git a/src/private_headers/Ogre_glTF_skeletonImporter.hpp b/src/private_headers/Ogre_glTF_skeletonImporter.hpp index f236122..293d1a0 100644 --- a/src/private_headers/Ogre_glTF_skeletonImporter.hpp +++ b/src/private_headers/Ogre_glTF_skeletonImporter.hpp @@ -24,13 +24,13 @@ namespace Ogre_glTF /// \param skinName name of the skin /// \param childs array contaning the indices of the childrens /// \param parent a pointer to a bone that is part of the skeleton we are creating - void addChidren(const std::string& skinName, const std::vector& childs, Ogre::v1::OldBone* parent, const std::vector& joints); + void addChidren(const std::vector& childs, Ogre::v1::OldBone* parent); ///Get the "skeleton node" from the skin object, call add children on it /// \param skin tinigltf skin object we are loading /// \param rootBone a freshly created bone object from an Ogre::SkeletonPtr /// \param name Name of the skeleton we are loading - void loadBoneHierarchy(const tinygltf::Skin& skin, Ogre::v1::OldBone* rootBone, const std::string& name); + void loadBoneHierarchy(int boneIndex); ///Represent a keyframe as laded from tinygltf, but converted to Ogre objects struct keyFrame @@ -83,6 +83,6 @@ namespace Ogre_glTF skeletonImporter(tinygltf::Model& input); ///Return the constructed skeleton pointer - Ogre::v1::SkeletonPtr getSkeleton(const std::string& adapterName); + Ogre::v1::SkeletonPtr getSkeleton(size_t index); }; } \ No newline at end of file diff --git a/test/main.cpp b/test/main.cpp deleted file mode 100644 index 4d44445..0000000 --- a/test/main.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include -//To create workspace definitions and workspaces -#include -//To use the hlms -#include -#include -//To load Hlms -#include -//To use objects -#include -#include -#include -#include -//To play animations -#include -//To use smart pointers -#include - -//The library we are trying out in this program -#include - -#ifdef _DEBUG -const char GL_RENDER_PLUGIN[] = "RenderSystem_GL3Plus_d"; -#else -const char GL_RENDER_PLUGIN[] = "RenderSystem_GL3Plus"; -#endif - -#ifdef _WIN32 -#ifdef _DEBUG -const char D3D11_RENDER_PLUGIN[] = "RenderSystem_Direct3D11_d"; -#else -const char D3D11_RENDER_PLUGIN[] = "RenderSystem_Direct3D11"; -#endif -#endif - -#ifdef _WIN32 -#define NOMINMAX -#include -#define main() WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) -#else -#define main() main(int argc, char* argv[]) -#endif - -void declareHlmsLibrary(Ogre::String dataFolder) -{ - //Make sure the string we got is a valid path - if(dataFolder.empty()) - dataFolder = "./"; - else if(dataFolder[dataFolder.size() - 1] != '/') - dataFolder += '/'; - - //For retrieval of the paths to the different folders needed - Ogre::String dataFolderPath; - Ogre::StringVector libraryFoldersPaths; - -#ifdef USE_UNLIT //We are loading materials based on physics - //Get the path to all the subdirectories used by HlmsUnlit - Ogre::HlmsUnlit::getDefaultPaths(dataFolderPath, libraryFoldersPaths); - - //Create the Ogre::Archive objects needed - Ogre::Archive* archiveUnlit = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); - Ogre::ArchiveVec archiveUnlitLibraryFolders; - for(const auto& libraryFolderPath : libraryFoldersPaths) - { - Ogre::Archive* archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); - archiveUnlitLibraryFolders.push_back(archiveLibrary); - } - - //Create and register the unlit Hlms - Ogre::HlmsUnlit* hlmsUnlit = OGRE_NEW Ogre::HlmsUnlit(archiveUnlit, &archiveUnlitLibraryFolders); - Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsUnlit); - hlmsUnlit->setDebugOutputPath(false, false); -#endif - - //Do the same for HlmsPbs: - Ogre::HlmsPbs::getDefaultPaths(dataFolderPath, libraryFoldersPaths); - Ogre::Archive* archivePbs = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + dataFolderPath, "FileSystem", true); - - //Get the library archive(s) - Ogre::ArchiveVec archivePbsLibraryFolders; - for(const auto& libraryFolderPath : libraryFoldersPaths) - { - Ogre::Archive* archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + libraryFolderPath, "FileSystem", true); - archivePbsLibraryFolders.push_back(archiveLibrary); - } - - //Create and register - Ogre::HlmsPbs* hlmsPbs = OGRE_NEW Ogre::HlmsPbs(archivePbs, &archivePbsLibraryFolders); - Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs); - hlmsPbs->setDebugOutputPath(false, false); -} - -int main() -{ - //Init Ogre - auto root = std::make_unique(); - Ogre::LogManager::getSingleton().setLogDetail(Ogre::LoggingLevel::LL_BOREME); - - root->loadPlugin(GL_RENDER_PLUGIN); -#ifdef _WIN32 - root->loadPlugin(D3D11_RENDER_PLUGIN); -#endif - root->showConfigDialog(); - root->getRenderSystem()->setConfigOption("FSAA", "16"); - root->getRenderSystem()->setConfigOption("sRGB Gamma Conversion", "Yes"); - root->initialise(false); - - //Create a window and a scene - Ogre::NameValuePairList params; - params["FSAA"] = "16"; - const auto window = root->createRenderWindow("glTF test!", 800, 600, false, ¶ms); - - auto smgr = root->createSceneManager(Ogre::ST_GENERIC, 2, Ogre::INSTANCING_CULLING_THREADED); - smgr->showBoundingBoxes(true); - smgr->setDisplaySceneNodes(true); - auto camera = smgr->createCamera("cam"); - - //Setup rendering pipeline - auto compositor = root->getCompositorManager2(); - const char workspaceName[] = "workspace0"; - compositor->createBasicWorkspaceDef(workspaceName, Ogre::ColourValue { 0.2f, 0.3f, 0.4f }); - auto workspace = compositor->addWorkspace(smgr, window, camera, workspaceName, true); - - declareHlmsLibrary("./"); - - Ogre::ResourceGroupManager::getSingleton().addResourceLocation("gltfFiles.zip", "Zip"); - Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(true); - - Ogre::Item* ObjectItem = nullptr; - Ogre::SceneNode* ObjectNode = nullptr; - - //Ogre::Item* OtherItem; - //Initialize the library - auto gltf = std::make_unique(); - ObjectNode = smgr->getRootSceneNode()->createChildSceneNode(); - - Ogre_glTF::loaderAdapter gizmoLoader; - try - { - //auto adapter = gltf->loadFromFileSystem("from_gltf_export_skinned_cylinder.glb"); - //auto adapter = gltf->loadGlbResource("CesiumMan.glb"); - - gizmoLoader = gltf->loadFromFileSystem("gizmo.glb"); - - //auto adapter = gltf->loadFromFileSystem("./Corset.glb"); - auto model = gltf->getModelData("./damagedHelmet/damagedHelmet.gltf", Ogre_glTF::glTFLoaderInterface::LoadFrom::FileSystem); - ObjectItem = model.makeItem(smgr); - model.transform.apply(ObjectNode); - //OtherItem = adapter.getItem(smgr); - } - catch(std::exception& e) - { - Ogre::LogManager::getSingleton().logMessage(e.what()); - return -1; - } - - ObjectNode->attachObject(ObjectItem); - - auto gizmoNode = ObjectNode->createChildSceneNode(); - gizmoNode->attachObject(gizmoLoader.getItem(smgr)); - - gizmoNode->getAttachedObject(0); - //auto gizmoItem = dynamic_cast(gizmoNode->getAttachedObject(0)); - - gizmoNode->setScale(1, 1, 1); - //ObjectNode->setOrientation(Ogre::Quaternion(Ogre::Degree(-90), Ogre::Vector3::UNIT_X)); - camera->setNearClipDistance(0.001f); - camera->setFarClipDistance(100); - camera->setPosition(2.5f, 0, 2.5f); - camera->lookAt({ 0, 1, 0 }); - camera->setAutoAspectRatio(true); - - auto light = smgr->createLight(); - smgr->getRootSceneNode()->createChildSceneNode()->attachObject(light); - light->setType(Ogre::Light::LT_DIRECTIONAL); - light->setDirection(Ogre::Vector3 { -1, -1, -0.5f }); - light->setPowerScale(5); - - light = smgr->createLight(); - smgr->getRootSceneNode()->createChildSceneNode()->attachObject(light); - light->setType(Ogre::Light::LT_DIRECTIONAL); - light->setDirection(Ogre::Vector3 { +1, +1, +0.5f }); - light->setPowerScale(5); - - auto skeleton = ObjectItem->getSkeletonInstance(); - - Ogre::SkeletonAnimation* anim = nullptr; - Ogre::Bone* bone = nullptr; - - auto plugins = root->getInstalledPlugins(); - - - if(skeleton) - { - bone = skeleton->getBone(1); - auto& animationList = skeleton->getAnimations(); - if(!animationList.empty()) - { - const auto name = animationList[0].getName(); - anim = skeleton->getAnimation(name); - } - - if(anim) - { - anim->setEnabled(true); - anim->setLoop(true); - } - } - - auto last = root->getTimer()->getMilliseconds(); - auto now = last; - while(!window->isClosed()) - { - now = root->getTimer()->getMilliseconds(); - if(anim) anim->addTime(float(now - last) / 1000.0f); - last = now; - - root->renderOneFrame(); - Ogre::WindowEventUtilities::messagePump(); - } - - return 0; -} From 16e90ad91bcc2b5a9b0105de9f7c3f704e537caf Mon Sep 17 00:00:00 2001 From: xissburg Date: Fri, 28 Jun 2019 15:33:51 -0500 Subject: [PATCH 2/7] Replace container_double_to_float with container_double_to_real --- src/Ogre_glTF_materialLoader.cpp | 4 ++-- src/Ogre_glTF_modelConverter.cpp | 6 ++--- src/Ogre_glTF_skeletonImporter.cpp | 24 +++++++++---------- .../Ogre_glTF_internal_utils.hpp | 11 --------- 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/Ogre_glTF_materialLoader.cpp b/src/Ogre_glTF_materialLoader.cpp index a607b9e..70f129b 100644 --- a/src/Ogre_glTF_materialLoader.cpp +++ b/src/Ogre_glTF_materialLoader.cpp @@ -11,8 +11,8 @@ using namespace Ogre_glTF; Ogre::Vector3 materialLoader::convertColor(const tinygltf::ColorValue& color) { - std::array colorBuffer{}; - internal_utils::container_double_to_float(color, colorBuffer); + std::array colorBuffer{}; + internal_utils::container_double_to_real(color, colorBuffer); return Ogre::Vector3 { colorBuffer.data() }; } diff --git a/src/Ogre_glTF_modelConverter.cpp b/src/Ogre_glTF_modelConverter.cpp index 4d005f2..b5c236e 100644 --- a/src/Ogre_glTF_modelConverter.cpp +++ b/src/Ogre_glTF_modelConverter.cpp @@ -353,10 +353,10 @@ vertexBufferPart modelConverter::extractVertexBuffer(const std::pair floatVector {}; - internal_utils::container_double_to_float(accessor.minValues, floatVector); + std::array floatVector {}; + internal_utils::container_double_to_real(accessor.minValues, floatVector); const Ogre::Vector3 minBounds { floatVector.data() }; - internal_utils::container_double_to_float(accessor.maxValues, floatVector); + internal_utils::container_double_to_real(accessor.maxValues, floatVector); const Ogre::Vector3 maxBounds { floatVector.data() }; OgreLog("Updating bounding box size: "); diff --git a/src/Ogre_glTF_skeletonImporter.cpp b/src/Ogre_glTF_skeletonImporter.cpp index db973e0..fb3be3e 100644 --- a/src/Ogre_glTF_skeletonImporter.cpp +++ b/src/Ogre_glTF_skeletonImporter.cpp @@ -62,15 +62,15 @@ void skeletonImporter::loadBoneHierarchy(int boneIndex) const auto& node = model.nodes[boneIndex]; Ogre::v1::OldBone* rootBone = skeleton->getBone(nodeToJointMap[boneIndex]); - std::array translation = { 0, 0, 0 }; - std::array scale = { 1, 1, 1 }; - std::array rotation = { 0, 0, 0, 1 }; + std::array translation = { 0, 0, 0 }; + std::array scale = { 1, 1, 1 }; + std::array rotation = { 0, 0, 0, 1 }; if(!node.translation.empty()) - internal_utils::container_double_to_float(node.translation, translation); + internal_utils::container_double_to_real(node.translation, translation); if(!node.scale.empty()) - internal_utils::container_double_to_float(node.scale, scale); + internal_utils::container_double_to_real(node.scale, scale); if(!node.rotation.empty()) - internal_utils::container_double_to_float(node.rotation, rotation); + internal_utils::container_double_to_real(node.rotation, rotation); Ogre::Vector3 trans = Ogre::Vector3 { translation.data() }; Ogre::Quaternion rot = Ogre::Quaternion { rotation[3], rotation[0], rotation[1], rotation[2] }; @@ -133,11 +133,11 @@ void skeletonImporter::loadVector3FromSampler(int frameID, int& count, tinygltf: if(output.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT) { vector = Ogre::Vector3(reinterpret_cast(dataStart + frameID * byteStride)); } else if(output.componentType == TINYGLTF_COMPONENT_TYPE_DOUBLE) //need double to float conversion { - std::array vectFloat {}; + std::array vectFloat {}; std::array vectDouble {}; memcpy(vectDouble.data(), reinterpret_cast(dataStart + frameID * byteStride), 3 * sizeof(double)); - internal_utils::container_double_to_float(vectDouble, vectFloat); + internal_utils::container_double_to_real(vectDouble, vectFloat); vector = Ogre::Vector3(vectFloat.data()); } @@ -161,11 +161,11 @@ void skeletonImporter::loadQuatFromSampler(int frameID, int& count, tinygltf::An } else if(output.componentType == TINYGLTF_COMPONENT_TYPE_DOUBLE) //need double to float conversion { - std::array vectFloat {}; + std::array vectFloat {}; std::array vectDouble {}; memcpy(vectDouble.data(), reinterpret_cast(dataStart + frameID * byteStride), 3 * sizeof(double)); - internal_utils::container_double_to_float(vectDouble, vectFloat); + internal_utils::container_double_to_real(vectDouble, vectFloat); quat = Ogre::Quaternion(vectFloat[3], vectFloat[0], vectFloat[1], vectFloat[2]); } @@ -400,7 +400,7 @@ Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(size_t index) assert(inverseBindMatricesAccessor.count == skin.joints.size()); assert(inverseBindMatricesAccessor.type == TINYGLTF_TYPE_MAT4); - std::array floatMatrix {}; + std::array floatMatrix {}; for(int i = 0; i < inverseBindMatricesAccessor.count; ++i) { @@ -414,7 +414,7 @@ Ogre::v1::SkeletonPtr skeletonImporter::getSkeleton(size_t index) //Needs to do Double -> Float conversion std::array doubleMatrix {}; memcpy(doubleMatrix.data(), reinterpret_cast(dataStart + i * byteStride), 4 * 4 * sizeof(double)); - internal_utils::container_double_to_float(doubleMatrix, floatMatrix); + internal_utils::container_double_to_real(doubleMatrix, floatMatrix); } Ogre::Matrix4 inverseBindMatrixTransposed = Ogre::Matrix4(floatMatrix[0], diff --git a/src/private_headers/Ogre_glTF_internal_utils.hpp b/src/private_headers/Ogre_glTF_internal_utils.hpp index 1169082..a47ef6e 100644 --- a/src/private_headers/Ogre_glTF_internal_utils.hpp +++ b/src/private_headers/Ogre_glTF_internal_utils.hpp @@ -7,17 +7,6 @@ namespace Ogre_glTF { namespace internal_utils { - template - void container_double_to_float(inputContainer& in, outputContainer& out) - { - std::transform(std::begin(in), - std::end(in), - std::begin(out), - [](double n) { - return static_cast(n); - }); - } - template void container_double_to_real(inputContainer& in, outputContainer& out) { From a06af651d5b54568d600ab9dc22cca495eaca74e Mon Sep 17 00:00:00 2001 From: xissburg Date: Tue, 2 Jul 2019 11:05:43 -0500 Subject: [PATCH 3/7] Add mkdir build --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 99e6394..64f5d51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,6 +34,7 @@ script: - export CC=/usr/bin/gcc-7 - export CXX=/usr/bin/g++-7 - gcc -v && g++ -v && cmake --version + - mkdir build - cd build - cmake .. - make From 3e54a7fec31d44b4c2f25ea68a1c8038f456ae1e Mon Sep 17 00:00:00 2001 From: xissburg Date: Fri, 5 Jul 2019 14:03:05 -0500 Subject: [PATCH 4/7] Create loadMainScene method and modify getFirstSceneNode. --- Samples/LoadMesh/main.cpp | 15 +++++++++++++++ include/Ogre_glTF.hpp | 2 ++ src/Ogre_glTF.cpp | 37 ++++++++++++++++++------------------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/Samples/LoadMesh/main.cpp b/Samples/LoadMesh/main.cpp index 56e278b..aef1c74 100644 --- a/Samples/LoadMesh/main.cpp +++ b/Samples/LoadMesh/main.cpp @@ -57,6 +57,21 @@ int main() { auto adapter = gltf->loadFromFileSystem("../Media/damagedHelmet/damagedHelmet.gltf"); objectNode = adapter.getFirstSceneNode(smgr); + + // On a scene with multiple root objects `loadMainScene` can be used to load all objects. + /* + auto root = smgr->getRootSceneNode(); + adapter.loadMainScene(root, smgr); + auto childIt = root->getChildIterator(); + while(childIt.hasMoreElements()) + { + auto child = childIt.getNext(); + if(child->getName() == "UnityGlTF_root") + { + objectNode = static_cast(child); + break; + } + }*/ } catch(std::exception& e) { diff --git a/include/Ogre_glTF.hpp b/include/Ogre_glTF.hpp index 4848b24..aa0c53c 100644 --- a/include/Ogre_glTF.hpp +++ b/include/Ogre_glTF.hpp @@ -54,6 +54,8 @@ namespace Ogre_glTF ///Return the number of datablock stored size_t getDatablockCount(); + void loadMainScene(Ogre::SceneNode* parentNode, Ogre::SceneManager* smgr) const; + ///Construct an item for this object /// \param smgr pointer to the scene manager where we are creating the item Ogre::SceneNode* getFirstSceneNode(Ogre::SceneManager* smgr) const; diff --git a/src/Ogre_glTF.cpp b/src/Ogre_glTF.cpp index 7ecbb1e..dd14c61 100644 --- a/src/Ogre_glTF.cpp +++ b/src/Ogre_glTF.cpp @@ -57,29 +57,28 @@ loaderAdapter::loaderAdapter() : pimpl { std::make_unique() } { OgreLog("C loaderAdapter::~loaderAdapter() { OgreLog("Destructed adapter object..."); } -Ogre::SceneNode* loaderAdapter::getFirstSceneNode(Ogre::SceneManager* smgr) const +void loaderAdapter::loadMainScene(Ogre::SceneNode* parentNode, Ogre::SceneManager* smgr) const { - if(isOk()) - { - pimpl->textureImp.loadTextures(); + if(!isOk()) + return; - // Find a node which is not a child of another node - std::vector allChildren; - for(const auto& node : pimpl->model.nodes) - { - allChildren.insert(allChildren.end(), node.children.begin(), node.children.end()); - } - // Find a node index that is not preset in the allChildren array and build - // the hierarchy from there. - for(size_t i = 0; i < pimpl->model.nodes.size(); ++i) - { - if(std::find(allChildren.begin(), allChildren.end(), i) == allChildren.end()) { - return getSceneNode(i, smgr->getRootSceneNode(), smgr); - } - } + pimpl->textureImp.loadTextures(); + auto sceneIdx = pimpl->model.defaultScene >= 0 ? pimpl->model.defaultScene : 0; + const auto& scene = pimpl->model.scenes[sceneIdx]; + + for(auto nodeIdx : scene.nodes) + { + getSceneNode(nodeIdx, parentNode, smgr); } +} - return nullptr; +Ogre::SceneNode* loaderAdapter::getFirstSceneNode(Ogre::SceneManager* smgr) const +{ + if(!isOk()) + return nullptr; + + pimpl->textureImp.loadTextures(); + return getSceneNode(pimpl->model.scenes[0].nodes[0], smgr->getRootSceneNode(), smgr); } Ogre::SceneNode* loaderAdapter::getSceneNode(size_t index, Ogre::SceneNode* parentSceneNode, Ogre::SceneManager* smgr) const From f8c192dec7c975310371f74a9043566f43a1389c Mon Sep 17 00:00:00 2001 From: xissburg Date: Sat, 6 Jul 2019 16:50:00 -0500 Subject: [PATCH 5/7] Fix typos --- src/Ogre_glTF_modelConverter.cpp | 30 ++++++++----------- .../Ogre_glTF_modelConverter.hpp | 10 +++---- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/Ogre_glTF_modelConverter.cpp b/src/Ogre_glTF_modelConverter.cpp index b5c236e..b672dc8 100644 --- a/src/Ogre_glTF_modelConverter.cpp +++ b/src/Ogre_glTF_modelConverter.cpp @@ -62,7 +62,7 @@ Ogre::MeshPtr modelConverter::getOgreMesh(const Ogre::String& name) if(name.empty()) { if(!model.meshes.empty()) { - return getOgreMesh(model.meshes.front()); + return getOgreMesh(0); } else { @@ -70,41 +70,37 @@ Ogre::MeshPtr modelConverter::getOgreMesh(const Ogre::String& name) } } - for(const auto& mesh : model.meshes) { + for(size_t meshIdx = 0; meshIdx < model.meshes.size(); ++meshIdx) { + const auto& mesh = model.meshes[meshIdx]; if(!mesh.name.empty() && mesh.name == name) { - return getOgreMesh(mesh); + return getOgreMesh(meshIdx); } } return Ogre::MeshPtr(); } -Ogre::MeshPtr modelConverter::getOgreMesh(size_t index) -{ - assert(index < model.meshes.size()); - return getOgreMesh(model.meshes[index]); -} - -Ogre::MeshPtr modelConverter::getOgreMesh(const tinygltf::Mesh& mesh) +Ogre::MeshPtr modelConverter::getOgreMesh(size_t meshIdx) { Ogre::Aabb boundingBox; + auto& mesh = model.meshes[meshIdx]; OgreLog("Found mesh " + mesh.name + " in glTF file"); - auto OgreMesh = Ogre::MeshManager::getSingleton().getByName(mesh.name); - if(OgreMesh) + auto ogreMesh = Ogre::MeshManager::getSingleton().getByName(mesh.name); + if(ogreMesh) { OgreLog("Found mesh " + mesh.name + " in Ogre::MeshManager(v2)"); - return OgreMesh; + return ogreMesh; } OgreLog("Loading mesh from glTF file"); OgreLog("mesh has " + std::to_string(mesh.primitives.size()) + " primitives"); - OgreMesh = Ogre::MeshManager::getSingleton().createManual(mesh.name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + ogreMesh = Ogre::MeshManager::getSingleton().createManual(mesh.name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); OgreLog("Created mesh on v2 MeshManager"); for(const auto& primitive : mesh.primitives) { - auto subMesh = OgreMesh->createSubMesh(); + auto subMesh = ogreMesh->createSubMesh(); OgreLog("Created one submesh"); const auto indexBuffer = extractIndexBuffer(primitive.indices); @@ -193,10 +189,10 @@ Ogre::MeshPtr modelConverter::getOgreMesh(const tinygltf::Mesh& mesh) } } - OgreMesh->_setBounds(boundingBox, true); + ogreMesh->_setBounds(boundingBox, true); //OgreLog("Setting 'bounding sphere radius' from bounds : " + std::to_string(boundingBox.getRadius())); - return OgreMesh; + return ogreMesh; } void modelConverter::debugDump() const diff --git a/src/private_headers/Ogre_glTF_modelConverter.hpp b/src/private_headers/Ogre_glTF_modelConverter.hpp index b1f627d..2ab4b0e 100644 --- a/src/private_headers/Ogre_glTF_modelConverter.hpp +++ b/src/private_headers/Ogre_glTF_modelConverter.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include "OgreMesh2.h" #include #include "Ogre_glTF.hpp" @@ -158,11 +159,10 @@ namespace Ogre_glTF /// \param input model we are converting into an Ogre model modelConverter(tinygltf::Model& input); - ///Returns the mesh with the given name in the glTF file. If name is empty it will return the first mesh if any. - Ogre::MeshPtr getOgreMesh(const Ogre::String& name = ""); - Ogre::MeshPtr getOgreMesh(size_t index); - Ogre::MeshPtr getOgreMesh(const tinygltf::Mesh& mesh); - + ///Returns the mesh with the given name in the glTF file. + Ogre::MeshPtr getOgreMesh(const Ogre::String& name); + Ogre::MeshPtr getOgreMesh(size_t meshIdx); + ///Print out debug information on the model structure // nodes contain transformation and scale information void debugDump() const; From f936ba3785f6dea0a8f51e6e4a140aa41de40170 Mon Sep 17 00:00:00 2001 From: xissburg Date: Sat, 6 Jul 2019 16:51:00 -0500 Subject: [PATCH 6/7] Initialize keyFrame struct properly. Go back to use inverseBindMatrices. --- src/Ogre_glTF_skeletonImporter.cpp | 44 +++++++------------ .../Ogre_glTF_skeletonImporter.hpp | 10 +++-- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/Ogre_glTF_skeletonImporter.cpp b/src/Ogre_glTF_skeletonImporter.cpp index fb3be3e..0a939ad 100644 --- a/src/Ogre_glTF_skeletonImporter.cpp +++ b/src/Ogre_glTF_skeletonImporter.cpp @@ -28,30 +28,18 @@ void skeletonImporter::addChidren(const std::vector& childs, Ogre::v1::OldB auto bone = skeleton->getBone(nodeToJointMap[child]); if(!bone) { throw InitError("could not get bone " + std::to_string(bone->getHandle())); } - if(!node.translation.empty()) - bone->setPosition(node.translation[0], node.translation[1], node.translation[2]); + parent->addChild(bone); - if(!node.rotation.empty()) - bone->setOrientation(node.rotation[3], node.rotation[0], node.rotation[1], node.rotation[2]); + auto bindMatrix = bindMatrices[nodeToJointMap[child]]; - if(!node.scale.empty()) - bone->setScale(node.scale[0], node.scale[1], node.scale[2]); + Ogre::Vector3 translation, scale; + Ogre::Quaternion rotation; - if(!node.matrix.empty()) - { - std::array matrixArray { 0 }; - internal_utils::container_double_to_real(node.matrix, matrixArray); - Ogre::Matrix4 matrix { matrixArray.data() }; - Ogre::Vector3 position; - Ogre::Quaternion orientation; - Ogre::Vector3 scale; - matrix.transpose().decomposition(position, scale, orientation); - bone->setPosition(position); - bone->setOrientation(orientation); - bone->setScale(scale); - } + bindMatrix.decomposition(translation, scale, rotation); - parent->addChild(bone); + bone->setPosition(parent->convertWorldToLocalPosition(translation)); + bone->setOrientation(parent->convertWorldToLocalOrientation(rotation)); + bone->setScale(parent->_getDerivedScale() / scale); addChidren(model.nodes[child].children, bone); } @@ -112,7 +100,7 @@ void skeletonImporter::loadTimepointFromSamplerToKeyFrame(int bone, int frameID, animationFrame.timePoint = data; else if(animationFrame.timePoint != data) { - throw FileIOError("Missmatch of timecode while loading an animation keyframe for bone joint " + std::to_string(bone) + throw FileIOError("Mismatch of timecode while loading an animation keyframe for bone joint " + std::to_string(bone) + "\n" "read from file : " + std::to_string(data) + " while animationFrame recorded " + std::to_string(animationFrame.timePoint)); @@ -128,7 +116,7 @@ void skeletonImporter::loadVector3FromSampler(int frameID, int& count, tinygltf: unsigned char* dataStart = buffer.data.data() + bufferView.byteOffset + output.byteOffset; const size_t byteStride = output.ByteStride(bufferView); - assert(output.type == TINYGLTF_TYPE_VEC3); //Need to be a 3D vectorsince it's a translation vector + assert(output.type == TINYGLTF_TYPE_VEC3); //Need to be a 3D vector since it's a translation vector if(output.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT) { vector = Ogre::Vector3(reinterpret_cast(dataStart + frameID * byteStride)); } else if(output.componentType == TINYGLTF_COMPONENT_TYPE_DOUBLE) //need double to float conversion @@ -152,7 +140,7 @@ void skeletonImporter::loadQuatFromSampler(int frameID, int& count, tinygltf::An unsigned char* dataStart = buffer.data.data() + bufferView.byteOffset + output.byteOffset; const size_t byteStride = output.ByteStride(bufferView); - assert(output.type == TINYGLTF_TYPE_VEC4); //Need to be a 4D vectorsince it's a translation vector + assert(output.type == TINYGLTF_TYPE_VEC4); //Need to be a 4D vector since it's a quaternion if(output.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT) { @@ -164,7 +152,7 @@ void skeletonImporter::loadQuatFromSampler(int frameID, int& count, tinygltf::An std::array vectFloat {}; std::array vectDouble {}; - memcpy(vectDouble.data(), reinterpret_cast(dataStart + frameID * byteStride), 3 * sizeof(double)); + memcpy(vectDouble.data(), reinterpret_cast(dataStart + frameID * byteStride), 4 * sizeof(double)); internal_utils::container_double_to_real(vectDouble, vectFloat); quat = Ogre::Quaternion(vectFloat[3], vectFloat[0], vectFloat[1], vectFloat[2]); @@ -270,7 +258,7 @@ void skeletonImporter::loadSkeletonAnimations(const tinygltf::Skin skin, const s std::unordered_map boneIndexedKeyFrames; - const auto getAnimationLenght = [](const keyFrameList& l) { + const auto getAnimationLength = [](const keyFrameList& l) { if(l.empty()) return 0.0f; return l.back().timePoint; }; @@ -293,8 +281,8 @@ void skeletonImporter::loadSkeletonAnimations(const tinygltf::Skin skin, const s for(auto& channel : animation.channels) { const auto joint = nodeToJointMap[channel.target_node]; - const auto& boneRawAnnimationChannelIt = boneRawAnimationChannels.find(joint); - if(boneRawAnnimationChannelIt == boneRawAnimationChannels.end()) boneRawAnimationChannels[joint]; + const auto& boneRawAnimationChannelIt = boneRawAnimationChannels.find(joint); + if(boneRawAnimationChannelIt == boneRawAnimationChannels.end()) boneRawAnimationChannels[joint]; boneRawAnimationChannels[joint].push_back(channel); } @@ -317,7 +305,7 @@ void skeletonImporter::loadSkeletonAnimations(const tinygltf::Skin skin, const s //here, we have a list of all key frames for one bone boneIndexedKeyFrames[bone] = keyFrames; - maxLen = getAnimationLenght(keyFrames); + maxLen = getAnimationLength(keyFrames); } //Create animation diff --git a/src/private_headers/Ogre_glTF_skeletonImporter.hpp b/src/private_headers/Ogre_glTF_skeletonImporter.hpp index 293d1a0..6cc51e0 100644 --- a/src/private_headers/Ogre_glTF_skeletonImporter.hpp +++ b/src/private_headers/Ogre_glTF_skeletonImporter.hpp @@ -35,10 +35,12 @@ namespace Ogre_glTF ///Represent a keyframe as laded from tinygltf, but converted to Ogre objects struct keyFrame { - float timePoint{ -1 }; - float weights{}; - Ogre::Quaternion rotation{}; - Ogre::Vector3 position, scale{}; + float timePoint; + float weights; + Ogre::Quaternion rotation; + Ogre::Vector3 position, scale; + + keyFrame() : timePoint(-1), weights(0), position(0,0,0), scale(1,1,1) {} }; ///Vector of keyframes From c36d87141e56453eb20d9c029ac0c2ab91cc3df0 Mon Sep 17 00:00:00 2001 From: xissburg Date: Wed, 10 Jul 2019 18:58:48 -0500 Subject: [PATCH 7/7] Fix Visual Studio build --- CMake/Ogre_glTF_ConfigTargets.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMake/Ogre_glTF_ConfigTargets.cmake b/CMake/Ogre_glTF_ConfigTargets.cmake index c525730..c439f44 100644 --- a/CMake/Ogre_glTF_ConfigTargets.cmake +++ b/CMake/Ogre_glTF_ConfigTargets.cmake @@ -37,4 +37,5 @@ function(Ogre_glTF_config_sample PROJECTNAME) set_target_properties(${PROJECTNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -endfunction(Ogre_glTF_config_sample) \ No newline at end of file + set_property(TARGET ${PROJECTNAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) +endfunction(Ogre_glTF_config_sample)