From dfc465ca6d5a22abe558c15af97376a955dc1954 Mon Sep 17 00:00:00 2001 From: procfxgen Date: Sat, 4 Sep 2021 19:55:09 +0200 Subject: [PATCH] new models_magicavoxel_loading example (#1940) * new models_magicavoxel_loading example * Portable header-only file "magicavoxel_loader.h" for MagicaVoxel loader example. * models_magicavoxel_loading example added to CMakeLists.txt and Makefile * fix models_magicavoxel_loading example for linux. * * vox_loader into "src/external/vox_loader.h" * vox file support for "models.c" * updated example "models/models_magicavoxel_loading.c" * * Fix Vox_FreeArrays (removed memory leak) * * removed magicavoxel_loader.h * * Revert vs2019 solution --- examples/CMakeLists.txt | 2 + examples/Makefile | 3 +- examples/models/models_magicavoxel_loading.c | 153 ++++ examples/models/resources/vox/chr_knight.vox | Bin 0 -> 31031 bytes examples/models/resources/vox/chr_sword.vox | Bin 0 -> 30775 bytes examples/models/resources/vox/monu9.vox | Bin 0 -> 160767 bytes .../models_mesh_magicavoxel_loading.vcxproj | 387 +++++++++ projects/VS2019/raylib.sln | 19 + src/config.h | 1 + src/external/vox_loader.h | 771 ++++++++++++++++++ src/models.c | 110 +++ 11 files changed, 1445 insertions(+), 1 deletion(-) create mode 100644 examples/models/models_magicavoxel_loading.c create mode 100644 examples/models/resources/vox/chr_knight.vox create mode 100644 examples/models/resources/vox/chr_sword.vox create mode 100644 examples/models/resources/vox/monu9.vox create mode 100644 projects/VS2019/examples/models_mesh_magicavoxel_loading.vcxproj create mode 100644 src/external/vox_loader.h diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ad391edd4..d102eb4cb 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -86,7 +86,9 @@ if (${PLATFORM} MATCHES "Android") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_obj_viewer.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_animation.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_first_person_maze.c) + list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_magicavoxel_loading.c) + list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_custom_uniform.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_model_shader.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_postprocessing.c) diff --git a/examples/Makefile b/examples/Makefile index 5abf0c708..f5cb2175b 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -466,7 +466,8 @@ MODELS = \ models/models_skybox \ models/models_yaw_pitch_roll \ models/models_heightmap \ - models/models_waving_cubes + models/models_waving_cubes \ + models/models_magicavoxel_loading SHADERS = \ shaders/shaders_model_shader \ diff --git a/examples/models/models_magicavoxel_loading.c b/examples/models/models_magicavoxel_loading.c new file mode 100644 index 000000000..bb1389d6c --- /dev/null +++ b/examples/models/models_magicavoxel_loading.c @@ -0,0 +1,153 @@ +/******************************************************************************************* +* +* raylib [models] example - magicavoxel loader and viewer +* +* This example has been created using raylib 3.8 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Example contributed by Johann Nadalutti +* +* Copyright (c) 2021 Johann Nadalutti +* +********************************************************************************************/ + +#include "raylib.h" +#include "raymath.h" + +#include + + +// VOX Files to load and view + +#define NUM_VOX_FILES 3 + +const char* szVoxFiles[] = { + "resources/vox/chr_knight.vox", + "resources/vox/chr_sword.vox", + "resources/vox/monu9.vox" +}; + + +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [models] example - magicavoxel loading"); + + // Load MagicaVoxel files + Model models[NUM_VOX_FILES] = { 0 }; + + for (int i = 0; i < NUM_VOX_FILES; i++) + { + // Load MagicaVoxel File and build model + double t0, t1; + t0 = GetTime() * 1000.0; + + models[i] = LoadModel(szVoxFiles[i]); + + t1 = GetTime() * 1000.0; + TraceLog(LOG_INFO, TextFormat("Vox <%s> loaded in %f ms", GetFileName(szVoxFiles[i]), t1 - t0)); + + //Compute model matrix + BoundingBox bb = GetModelBoundingBox(models[i]); + Vector3 center; + center.x = -(((bb.max.x - bb.min.x) / 2)); + center.y = -(((bb.max.y - bb.min.y) / 2)); + center.z = -(((bb.max.z - bb.min.z) / 2)); + + Matrix matP = MatrixTranslate(center.x, center.z, 0); + Matrix matR = MatrixRotateX(90 * DEG2RAD); + models[i].transform = MatrixMultiply(matP, matR); + + + } + + + // Define the camera to look into our 3d world + Camera camera = { { 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 }; + + // Model drawing position + Vector3 position = { 0.0f, 0.0f, 0.0f }; + + int currentModel = 0; + + + + SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + + //-------------------------------------------------------------------------------------- + // Main game loop + //-------------------------------------------------------------------------------------- + while (!WindowShouldClose()) // Detect window close button or ESC key + { + //-------------------------------------------------------------------------------------- + // Update + //---------------------------------------------------------------------------------- + UpdateCamera(&camera); // Update internal camera and our camera + + if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) + { + currentModel = (currentModel + 1) % NUM_VOX_FILES; // Cycle between models + } + + if (IsKeyPressed(KEY_RIGHT)) + { + currentModel++; + if (currentModel >= NUM_VOX_FILES) currentModel = 0; + } + else if (IsKeyPressed(KEY_LEFT)) + { + currentModel--; + if (currentModel < 0) currentModel = NUM_VOX_FILES - 1; + } + + //---------------------------------------------------------------------------------- + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + //Display model + BeginMode3D(camera); + + Vector3 rotAxis = { 1,0,0 }; + Vector3 scale = { 1,1,1 }; + + + DrawModelEx(models[currentModel], position, rotAxis, 0, scale, WHITE); + //DrawModelWiresEx(models[currentModel], position, rotAxis, -90.0f, scale, BLACK); + + DrawGrid(10, 1.0); + + EndMode3D(); + + //Display debug infos + DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f)); + DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f)); + DrawText("MOUSE LEFT BUTTON to CYCLE VOX MODELS", 40, 410, 10, BLUE); + + DrawText(GetFileName(szVoxFiles[currentModel]), 100, 10, 20, DARKBLUE); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + + // Unload models data (GPU VRAM) + for (int i = 0; i < NUM_VOX_FILES; i++) UnloadModel(models[i]); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + + diff --git a/examples/models/resources/vox/chr_knight.vox b/examples/models/resources/vox/chr_knight.vox new file mode 100644 index 0000000000000000000000000000000000000000..c921bf5c7a68dc58850152862931d7a59b931d75 GIT binary patch literal 31031 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 LVkIanF}wo+QyA+y literal 0 HcmV?d00001 diff --git a/examples/models/resources/vox/chr_sword.vox b/examples/models/resources/vox/chr_sword.vox new file mode 100644 index 0000000000000000000000000000000000000000..05fc4826b188f52fd1b59ec34208fcd4b9b4b6c0 GIT binary patch literal 30775 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 literal 0 HcmV?d00001 diff --git a/examples/models/resources/vox/monu9.vox b/examples/models/resources/vox/monu9.vox new file mode 100644 index 0000000000000000000000000000000000000000..fd771112550301f58224160988e9625b1390a120 GIT binary patch literal 160767 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°jD@YeL3$%3tV2vd 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

qx`9Cqx&grqy8a;yx_+Sy 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 literal 0 HcmV?d00001 diff --git a/projects/VS2019/examples/models_mesh_magicavoxel_loading.vcxproj b/projects/VS2019/examples/models_mesh_magicavoxel_loading.vcxproj new file mode 100644 index 000000000..f2e86c8a6 --- /dev/null +++ b/projects/VS2019/examples/models_mesh_magicavoxel_loading.vcxproj @@ -0,0 +1,387 @@ + + + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + Win32 + + + Release + x64 + + + + {2F1B955B-275E-4D8E-8864-06FEC44D7912} + Win32Proj + models_mesh_magicavoxel_loading + 10.0 + models_mesh_magicavoxel_loading + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\models + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + + + + \ No newline at end of file diff --git a/projects/VS2019/raylib.sln b/projects/VS2019/raylib.sln index 53d2a18ad..f5a4180f2 100644 --- a/projects/VS2019/raylib.sln +++ b/projects/VS2019/raylib.sln @@ -275,6 +275,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rlgl_standalone", "examples EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_split_screen", "examples\core_split_screen.vcxproj", "{946A1700-C7AA-46F0-AEF2-67C98B5722AC}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "models_mesh_magicavoxel_loading", "examples\models_mesh_magicavoxel_loading.vcxproj", "{2F1B955B-275E-4D8E-8864-06FEC44D7912}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|x64 = Debug.DLL|x64 @@ -2283,6 +2285,22 @@ Global {946A1700-C7AA-46F0-AEF2-67C98B5722AC}.Release|x64.Build.0 = Release|x64 {946A1700-C7AA-46F0-AEF2-67C98B5722AC}.Release|x86.ActiveCfg = Release|Win32 {946A1700-C7AA-46F0-AEF2-67C98B5722AC}.Release|x86.Build.0 = Release|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug|x64.ActiveCfg = Debug|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug|x64.Build.0 = Debug|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug|x86.ActiveCfg = Debug|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Debug|x86.Build.0 = Debug|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release|x64.ActiveCfg = Release|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release|x64.Build.0 = Release|x64 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release|x86.ActiveCfg = Release|Win32 + {2F1B955B-275E-4D8E-8864-06FEC44D7912}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2422,6 +2440,7 @@ Global {6237BEDE-BAAA-4A06-9C5E-8089BAA14C8B} = {E9D708A5-9C1F-4B84-A795-C5F191801762} {C8765523-58F8-4C8E-9914-693396F6F0FF} = {E9D708A5-9C1F-4B84-A795-C5F191801762} {946A1700-C7AA-46F0-AEF2-67C98B5722AC} = {6C82BAAE-BDDF-457D-8FA8-7E2490B07035} + {2F1B955B-275E-4D8E-8864-06FEC44D7912} = {AF5BEC5C-1F2B-4DA8-B12D-D09FE569237C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29} diff --git a/src/config.h b/src/config.h index b7358d7e7..b244add66 100644 --- a/src/config.h +++ b/src/config.h @@ -182,6 +182,7 @@ #define SUPPORT_FILEFORMAT_MTL 1 #define SUPPORT_FILEFORMAT_IQM 1 #define SUPPORT_FILEFORMAT_GLTF 1 +#define SUPPORT_FILEFORMAT_VOX 1 // Support procedural mesh generation functions, uses external par_shapes.h library // NOTE: Some generated meshes DO NOT include generated texture coordinates #define SUPPORT_MESH_GENERATION 1 diff --git a/src/external/vox_loader.h b/src/external/vox_loader.h new file mode 100644 index 000000000..63f2719f5 --- /dev/null +++ b/src/external/vox_loader.h @@ -0,0 +1,771 @@ +/* + The MIT License (MIT) + + Copyright (c) 2021 Johann Nadalutti. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + vox_loader - v1.00 + no warranty implied; use at your own risk + + Do this: + #define VOX_LOADER_INCLUDE__H + before you include this file in* one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define VOX_LOADER_INCLUDE__H + #include "magicavoxel_loader.h" + +revision history: + 1.00 (2021-09-03) first released version + +*/ + + +#ifndef VOX_LOADER_H +#define VOX_LOADER_H + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +#define VOX_SUCCESS (0) +#define VOX_ERROR_FILE_NOT_FOUND (-1) +#define VOX_ERROR_INVALID_FORMAT (-2) +#define VOX_ERROR_FILE_VERSION_TOO_OLD (-3) + + typedef struct + { + int* array; + int used, size; + } ArrayInt; + + typedef struct + { + Vector3* array; + int used, size; + } ArrayVector3; + + typedef struct + { + Color* array; + int used, size; + } ArrayColor; + + typedef struct + { + unsigned short* array; + int used, size; + } ArrayUShort; + + + // A chunk that contain voxels + typedef struct + { + unsigned char* m_array; //If Sparse != null + int arraySize; //Size for m_array in bytes (DEBUG ONLY) + } CubeChunk3D; + + // Array for voxels + // Array is divised into chunks of CHUNKSIZE*CHUNKSIZE*CHUNKSIZE voxels size + typedef struct + { + //Array size in voxels + int sizeX; + int sizeY; + int sizeZ; + + //Chunks size into array (array is divised into chunks) + int chunksSizeX; + int chunksSizeY; + int chunksSizeZ; + + //Chunks array + CubeChunk3D* m_arrayChunks; + int arrayChunksSize; //Size for m_arrayChunks in bytes (DEBUG ONLY) + + int ChunkFlattenOffset; + int chunksAllocated; + int chunksTotal; + + //Arrays for mesh build + ArrayVector3 vertices; + ArrayUShort indices; + ArrayColor colors; + + //Palette for voxels + Color palette[256]; + + } VoxArray3D; + + + // Functions + extern int Vox_LoadFileName(const char* pszfileName, VoxArray3D* voxarray); + extern void Vox_FreeArrays(VoxArray3D* voxarray); + + +#ifdef __cplusplus +} +#endif + + + +//// end header file ///////////////////////////////////////////////////// +#endif // VOX_LOADER_H + + + +///////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////// +// Implementation +///////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////// + +#ifdef VOX_LOADER_IMPLEMENTATION + + + +///////////////////////////////////////////////////////////////////////////////////////////// +// ArrayInt helper +///////////////////////////////////////////////////////////////////////////////////////////// + +void initArrayInt(ArrayInt* a, int initialSize) +{ + a->array = MemAlloc(initialSize * sizeof(int)); + a->used = 0; + a->size = initialSize; +} + +void insertArrayInt(ArrayInt* a, int element) +{ + if (a->used == a->size) + { + a->size *= 2; + a->array = MemRealloc(a->array, a->size * sizeof(int)); + } + a->array[a->used++] = element; +} + +void freeArrayInt(ArrayInt* a) +{ + MemFree(a->array); + a->array = NULL; + a->used = a->size = 0; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// ArrayUShort helper +///////////////////////////////////////////////////////////////////////////////////////////// + +void initArrayUShort(ArrayUShort* a, int initialSize) +{ + a->array = MemAlloc(initialSize * sizeof(unsigned short)); + a->used = 0; + a->size = initialSize; +} + +void insertArrayUShort(ArrayUShort* a, unsigned short element) +{ + if (a->used == a->size) + { + a->size *= 2; + a->array = MemRealloc(a->array, a->size * sizeof(unsigned short)); + } + a->array[a->used++] = element; +} + +void freeArrayUShort(ArrayUShort* a) +{ + MemFree(a->array); + a->array = NULL; + a->used = a->size = 0; +} + + +///////////////////////////////////////////////////////////////////////////////////////////// +// ArrayVector3 helper +///////////////////////////////////////////////////////////////////////////////////////////// + +void initArrayVector3(ArrayVector3* a, int initialSize) +{ + a->array = MemAlloc(initialSize * sizeof(Vector3)); + a->used = 0; + a->size = initialSize; +} + +void insertArrayVector3(ArrayVector3* a, Vector3 element) +{ + if (a->used == a->size) + { + a->size *= 2; + a->array = MemRealloc(a->array, a->size * sizeof(Vector3)); + } + a->array[a->used++] = element; +} + +void freeArrayVector3(ArrayVector3* a) +{ + MemFree(a->array); + a->array = NULL; + a->used = a->size = 0; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// ArrayColor helper +///////////////////////////////////////////////////////////////////////////////////////////// + +void initArrayColor(ArrayColor* a, int initialSize) +{ + a->array = MemAlloc(initialSize * sizeof(Color)); + a->used = 0; + a->size = initialSize; +} + +void insertArrayColor(ArrayColor* a, Color element) +{ + if (a->used == a->size) + { + a->size *= 2; + a->array = MemRealloc(a->array, a->size * sizeof(Color)); + } + a->array[a->used++] = element; +} + +void freeArrayColor(ArrayColor* a) +{ + MemFree(a->array); + a->array = NULL; + a->used = a->size = 0; +} + + +///////////////////////////////////////////////////////////////////////////////////////////// +// Vox Loader +///////////////////////////////////////////////////////////////////////////////////////////// + +#define CHUNKSIZE 16 // chunk size (CHUNKSIZE*CHUNKSIZE*CHUNKSIZE) in voxels +#define CHUNKSIZE_OPSHIFT 4 // 1<<4=16 -> Warning depend of CHUNKSIZE +#define CHUNK_FLATTENOFFSET_OPSHIFT 8 //Warning depend of CHUNKSIZE + +// +// used right handed system and CCW face +// +// indexes for voxelcoords, per face orientation +// + +//# Y +//# | +//# o----X +//# / +//# Z 2------------3 +//# /| /| +//# 6------------7 | +//# | | | | +//# |0 ----------|- 1 +//# |/ |/ +//# 4------------5 + +// +// CCW +const int fv[6][4] = { + {0, 2, 6, 4 }, //-X + {5, 7, 3, 1 }, //+X + {0, 4, 5, 1 }, //-y + {6, 2, 3, 7 }, //+y + {1, 3, 2, 0 }, //-Z + {4, 6, 7, 5 } };//+Z + + +const Vector3 SolidVertex[] = { + {0, 0, 0}, //0 + {1, 0, 0}, //1 + {0, 1, 0}, //2 + {1, 1, 0}, //3 + {0, 0, 1}, //4 + {1, 0, 1}, //5 + {0, 1, 1}, //6 + {1, 1, 1} }; //7 + + + + + +// Allocated VoxArray3D size +void Vox_AllocArray(VoxArray3D* voxarray, int _sx, int _sy, int _sz) +{ + int sx = _sx + ((CHUNKSIZE - (_sx % CHUNKSIZE)) % CHUNKSIZE); + int sy = _sy + ((CHUNKSIZE - (_sy % CHUNKSIZE)) % CHUNKSIZE); + int sz = _sz + ((CHUNKSIZE - (_sz % CHUNKSIZE)) % CHUNKSIZE); + + int chx = sx >> CHUNKSIZE_OPSHIFT; //Chunks Count in X + int chy = sy >> CHUNKSIZE_OPSHIFT; //Chunks Count in Y + int chz = sz >> CHUNKSIZE_OPSHIFT; //Chunks Count in Z + + //VoxArray3D* parray = (VoxArray3D*)MemAlloc(sizeof(VoxArray3D)); + voxarray->sizeX = sx; + voxarray->sizeY = sy; + voxarray->sizeZ = sz; + + voxarray->chunksSizeX = chx; + voxarray->chunksSizeY = chy; + voxarray->chunksSizeZ = chz; + + voxarray->ChunkFlattenOffset = (chy * chz); //m_arrayChunks[(x * (sy*sz)) + (z * sy) + y] + + //Alloc chunks array + int size = sizeof(CubeChunk3D) * chx * chy * chz; + voxarray->m_arrayChunks = MemAlloc(size); + voxarray->arrayChunksSize = size; + + + //Init chunks array + size = chx * chy * chz; + voxarray->chunksTotal = size; + voxarray->chunksAllocated = 0; + + for (int i = 0; i < size; i++) + { + voxarray->m_arrayChunks[i].m_array = 0; + voxarray->m_arrayChunks[i].arraySize = 0; + } + + return voxarray; +} + +// Set voxel ID from its position into VoxArray3D +void Vox_SetVoxel(VoxArray3D* voxarray, int x, int y, int z, unsigned char id) +{ + //Get chunk from array pos + int chX = x >> CHUNKSIZE_OPSHIFT; //x / CHUNKSIZE; + int chY = y >> CHUNKSIZE_OPSHIFT; //y / CHUNKSIZE; + int chZ = z >> CHUNKSIZE_OPSHIFT; //z / CHUNKSIZE; + int offset = (chX * voxarray->ChunkFlattenOffset) + (chZ * voxarray->chunksSizeY) + chY; + + //if (offset > voxarray->arrayChunksSize) + //{ + // TraceLog(LOG_ERROR, "Out of array"); + //} + + CubeChunk3D* chunk = &voxarray->m_arrayChunks[offset]; + + //Set Chunk + chX = x - (chX << CHUNKSIZE_OPSHIFT); //x - (bx * CHUNKSIZE); + chY = y - (chY << CHUNKSIZE_OPSHIFT); //y - (by * CHUNKSIZE); + chZ = z - (chZ << CHUNKSIZE_OPSHIFT); //z - (bz * CHUNKSIZE); + + if (chunk->m_array == 0) + { + int size = CHUNKSIZE * CHUNKSIZE * CHUNKSIZE; + chunk->m_array = MemAlloc(size); + chunk->arraySize = size; + //memset(chunk->m_array, 0, size); + + voxarray->chunksAllocated++; + } + + offset = (chX << CHUNK_FLATTENOFFSET_OPSHIFT) + (chZ << CHUNKSIZE_OPSHIFT) + chY; + + //if (offset > chunk->arraySize) + //{ + // TraceLog(LOG_ERROR, "Out of array"); + //} + + chunk->m_array[offset] = id; + +} + +// Get voxel ID from its position into VoxArray3D +unsigned char Vox_GetVoxel(VoxArray3D* voxarray, int x, int y, int z) +{ + if (x < 0 || y < 0 || z < 0) + return 0; + + if (x >= voxarray->sizeX || y >= voxarray->sizeY || z >= voxarray->sizeZ) + return 0; + + + //Get chunk from array pos + int chX = x >> CHUNKSIZE_OPSHIFT; //x / CHUNKSIZE; + int chY = y >> CHUNKSIZE_OPSHIFT; //y / CHUNKSIZE; + int chZ = z >> CHUNKSIZE_OPSHIFT; //z / CHUNKSIZE; + int offset = (chX * voxarray->ChunkFlattenOffset) + (chZ * voxarray->chunksSizeY) + chY; + + //if (offset > voxarray->arrayChunksSize) + //{ + // TraceLog(LOG_ERROR, "Out of array"); + //} + + CubeChunk3D* chunk = &voxarray->m_arrayChunks[offset]; + + //Set Chunk + chX = x - (chX << CHUNKSIZE_OPSHIFT); //x - (bx * CHUNKSIZE); + chY = y - (chY << CHUNKSIZE_OPSHIFT); //y - (by * CHUNKSIZE); + chZ = z - (chZ << CHUNKSIZE_OPSHIFT); //z - (bz * CHUNKSIZE); + + if (chunk->m_array == 0) + { + return 0; + } + + offset = (chX << CHUNK_FLATTENOFFSET_OPSHIFT) + (chZ << CHUNKSIZE_OPSHIFT) + chY; + + //if (offset > chunk->arraySize) + //{ + // TraceLog(LOG_ERROR, "Out of array"); + //} + return chunk->m_array[offset]; + +} + +// Calc visibles faces from a voxel position +unsigned char Vox_CalcFacesVisible(VoxArray3D* pvoxArray, int cx, int cy, int cz) +{ + unsigned char idXm1 = Vox_GetVoxel(pvoxArray, cx - 1, cy, cz); + unsigned char idXp1 = Vox_GetVoxel(pvoxArray, cx + 1, cy, cz); + + unsigned char idYm1 = Vox_GetVoxel(pvoxArray, cx, cy - 1, cz); + unsigned char idYp1 = Vox_GetVoxel(pvoxArray, cx, cy + 1, cz); + + unsigned char idZm1 = Vox_GetVoxel(pvoxArray, cx, cy, cz - 1); + unsigned char idZp1 = Vox_GetVoxel(pvoxArray, cx, cy, cz + 1); + + unsigned char byVFMask = 0; + + //#-x + if (idXm1 == 0) + byVFMask |= (1 << 0); + + //#+x + if (idXp1 == 0) + byVFMask |= (1 << 1); + + //#-y + if (idYm1 == 0) + byVFMask |= (1 << 2); + + //#+y + if (idYp1 == 0) + byVFMask |= (1 << 3); + + //#-z + if (idZm1 == 0) + byVFMask |= (1 << 4); + + //#+z + if (idZp1 == 0) + byVFMask |= (1 << 5); + + return byVFMask; +} + +// Get a vertex position from a voxel's corner +Vector3 Vox_GetVertexPosition(int _wcx, int _wcy, int _wcz, int _nNumVertex) +{ + float scale = 0.25; + Vector3 vtx = SolidVertex[_nNumVertex]; + vtx.x = (vtx.x + _wcx) * scale; + vtx.y = (vtx.y + _wcy) * scale; + vtx.z = (vtx.z + _wcz) * scale; + return vtx; +} + +// Build a voxel vertices/colors/indices +void Vox_Build_Voxel(VoxArray3D* pvoxArray, int x, int y, int z, int matID) +{ + + unsigned char byVFMask = Vox_CalcFacesVisible(pvoxArray, x, y, z); + + if (byVFMask == 0) + return; + + int i, j; + Vector3 vertComputed[8]; + int bVertexComputed[8]; + memset(vertComputed, 0, sizeof(vertComputed)); + memset(bVertexComputed, 0, sizeof(bVertexComputed)); + + + //For each Cube's faces + for (i = 0; i < 6; i++) // 6 faces + { + if ((byVFMask & (1 << i)) != 0) //If face is visible + { + for (j = 0; j < 4; j++) // 4 corners + { + int nNumVertex = fv[i][j]; //Face,Corner + if (bVertexComputed[nNumVertex] == 0) //if never calc + { + bVertexComputed[nNumVertex] = 1; + vertComputed[nNumVertex] = Vox_GetVertexPosition(x, y, z, nNumVertex); + } + } + } + } + + //Add face + for (i = 0; i < 6; i++)// 6 faces + { + if ((byVFMask & (1 << i)) == 0) + continue; //Face invisible + + int v0 = fv[i][0]; //Face, Corner + int v1 = fv[i][1]; //Face, Corner + int v2 = fv[i][2]; //Face, Corner + int v3 = fv[i][3]; //Face, Corner + + //Arrays + int idx = pvoxArray->vertices.used; + insertArrayVector3(&pvoxArray->vertices, vertComputed[v0]); + insertArrayVector3(&pvoxArray->vertices, vertComputed[v1]); + insertArrayVector3(&pvoxArray->vertices, vertComputed[v2]); + insertArrayVector3(&pvoxArray->vertices, vertComputed[v3]); + + Color col = pvoxArray->palette[matID]; + + insertArrayColor(&pvoxArray->colors, col); + insertArrayColor(&pvoxArray->colors, col); + insertArrayColor(&pvoxArray->colors, col); + insertArrayColor(&pvoxArray->colors, col); + + + //v0 - v1 - v2, v0 - v2 - v3 + insertArrayUShort(&pvoxArray->indices, idx + 0); + insertArrayUShort(&pvoxArray->indices, idx + 2); + insertArrayUShort(&pvoxArray->indices, idx + 1); + + insertArrayUShort(&pvoxArray->indices, idx + 0); + insertArrayUShort(&pvoxArray->indices, idx + 3); + insertArrayUShort(&pvoxArray->indices, idx + 2); + + + + } + +} + +// MagicaVoxel *.vox file format Loader +int Vox_LoadFileName(const char* pszfileName, VoxArray3D* voxarray) +{ + + ////////////////////////////////////////////////// + //Read VOX file + //4 bytes: magic number ('V' 'O' 'X' 'space' ) + //4 bytes: version number (current version is 150 ) + + unsigned long signature; + + unsigned long readed = 0; + unsigned char* fileData; + fileData = LoadFileData(pszfileName, &readed); + if (fileData == 0) + { + return VOX_ERROR_FILE_NOT_FOUND; + } + + unsigned char* fileDataPtr = fileData; + unsigned char* endfileDataPtr = fileData + readed; + + signature = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + if (signature != 0x20584F56) //56 4F 58 20 + { + //TraceLog(LOG_ERROR, "Not an MagicaVoxel File format"); + return VOX_ERROR_INVALID_FORMAT; + } + + unsigned long version; + + version = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + if (version < 150) + { + //TraceLog(LOG_ERROR, "MagicaVoxel version too old"); + return VOX_ERROR_FILE_VERSION_TOO_OLD; + } + + + // header + //4 bytes: chunk id + //4 bytes: size of chunk contents (n) + //4 bytes: total size of children chunks(m) + + //// chunk content + //n bytes: chunk contents + + //// children chunks : m bytes + //{ child chunk 0 } + //{ child chunk 1 } + unsigned long sizeX, sizeY, sizeZ; + sizeX = sizeY = sizeZ = 0; + unsigned long numVoxels = 0; + int offsetX, offsetY, offsetZ; + offsetX = offsetY = offsetZ = 0; + + while (fileDataPtr < endfileDataPtr) + { + char szChunkName[5]; + memcpy(szChunkName, fileDataPtr, 4); + szChunkName[4] = 0; + fileDataPtr += 4; + + unsigned long chunkSize = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + unsigned long chunkTotalChildSize = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + + if (strcmp(szChunkName, "SIZE") == 0) + { + //(4 bytes x 3 : x, y, z ) + sizeX = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + sizeY = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + sizeZ = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + //Alloc vox array + Vox_AllocArray(voxarray, sizeX, sizeY, sizeZ); + } + else if (strcmp(szChunkName, "XYZI") == 0) + { + unsigned char vx, vy, vz, vi; + + //(numVoxels : 4 bytes ) + //(each voxel: 1 byte x 4 : x, y, z, colorIndex ) x numVoxels + numVoxels = *((unsigned long*)fileDataPtr); + fileDataPtr += sizeof(unsigned long); + + while (numVoxels > 0) + { + vx = *((unsigned char*)fileDataPtr++); + vy = *((unsigned char*)fileDataPtr++); + vz = *((unsigned char*)fileDataPtr++); + vi = *((unsigned char*)fileDataPtr++); + + Vox_SetVoxel(voxarray, vx, vy, vz, vi); + + numVoxels--; + } + } + else if (strcmp(szChunkName, "RGBA") == 0) + { + Color col; + + //(each pixel: 1 byte x 4 : r, g, b, a ) x 256 + for (int i = 0; i < 256 - 1; i++) + { + col.r = *((unsigned char*)fileDataPtr++); + col.g = *((unsigned char*)fileDataPtr++); + col.b = *((unsigned char*)fileDataPtr++); + col.a = *((unsigned char*)fileDataPtr++); + + voxarray->palette[i + 1] = col; + } + + } + else + { + fileDataPtr += chunkSize; + } + } + + //TraceLog(LOG_INFO, TextFormat("Vox Size : %dx%dx%d", sizeX, sizeY, sizeZ)); + + //TraceLog(LOG_INFO, TextFormat("Vox Chunks Count : %d/%d", pvoxArray->chunksAllocated, pvoxArray->chunksTotal)); + + + ////////////////////////////////////////////////////////// + // Building Mesh + // TODO compute globals indices array + + //TraceLog(LOG_INFO, TextFormat("Building VOX Mesh : %s", pszfileName)); + + // Init Arrays + initArrayVector3(&voxarray->vertices, 3 * 1024); + initArrayUShort(&voxarray->indices, 3 * 1024); + initArrayColor(&voxarray->colors, 3 * 1024); + + // Create vertices and indices buffers + int x, y, z; + + for (x = 0; x <= voxarray->sizeX; x++) + { + for (z = 0; z <= voxarray->sizeZ; z++) + { + for (y = 0; y <= voxarray->sizeY; y++) + { + unsigned char matID = Vox_GetVoxel(voxarray, x, y, z); + if (matID != 0) + Vox_Build_Voxel(voxarray, x, y, z, matID); + } + } + } + + + + return VOX_SUCCESS; +} + +void Vox_FreeArrays(VoxArray3D* voxarray) +{ + //Free chunks + if (voxarray->m_arrayChunks != 0) + { + for (int i = 0; i < voxarray->chunksTotal; i++) + { + CubeChunk3D* chunk = &voxarray->m_arrayChunks[i]; + if (chunk->m_array != 0) + { + chunk->arraySize = 0; + MemFree(chunk->m_array); + } + } + + MemFree(voxarray->m_arrayChunks); + voxarray->m_arrayChunks = 0; + voxarray->arrayChunksSize = 0; + + voxarray->chunksSizeX = voxarray->chunksSizeY = voxarray->chunksSizeZ = 0; + voxarray->chunksTotal = 0; + voxarray->chunksAllocated = 0; + voxarray->ChunkFlattenOffset = 0; + voxarray->sizeX = voxarray->sizeY = voxarray->sizeZ = 0; + } + + //Free arrays + freeArrayVector3(&voxarray->vertices); + freeArrayUShort(&voxarray->indices); + freeArrayColor(&voxarray->colors); +} + +#endif //VOX_LOADER_IMPLEMENTATION diff --git a/src/models.c b/src/models.c index b233cf2af..168ac2c31 100644 --- a/src/models.c +++ b/src/models.c @@ -8,6 +8,8 @@ * #define SUPPORT_FILEFORMAT_MTL * #define SUPPORT_FILEFORMAT_IQM * #define SUPPORT_FILEFORMAT_GLTF +* #define SUPPORT_FILEFORMAT_VOX +* * Selected desired fileformats to be supported for model data loading. * * #define SUPPORT_MESH_GENERATION @@ -71,6 +73,11 @@ #include "external/stb_image.h" // glTF texture images loading #endif +#if defined(SUPPORT_FILEFORMAT_VOX) + #define VOX_LOADER_IMPLEMENTATION + #include "external/vox_loader.h" // vox file format loading +#endif + #if defined(SUPPORT_MESH_GENERATION) #define PAR_MALLOC(T, N) ((T*)RL_MALLOC(N*sizeof(T))) #define PAR_CALLOC(T, N) ((T*)RL_CALLOC(N*sizeof(T), 1)) @@ -131,6 +138,9 @@ static void GetGLTFPrimitiveCount(cgltf_node *node, int *outCount); static bool ReadGLTFValue(cgltf_accessor *acc, unsigned int index, void *variable); static void *ReadGLTFValuesAs(cgltf_accessor *acc, cgltf_component_type type, bool adjustOnDownCasting); #endif +#if defined(SUPPORT_FILEFORMAT_VOX) +static Model LoadVOX(const char* filename); //Load VOX mesh data +#endif //---------------------------------------------------------------------------------- // Module Functions Definition @@ -718,6 +728,9 @@ Model LoadModel(const char *fileName) #if defined(SUPPORT_FILEFORMAT_GLTF) if (IsFileExtension(fileName, ".gltf;.glb")) model = LoadGLTF(fileName); #endif +#if defined(SUPPORT_FILEFORMAT_VOX) + if (IsFileExtension(fileName, ".vox")) model = LoadVOX(fileName); +#endif // Make sure model transform is set to identity matrix! model.transform = MatrixIdentity(); @@ -5469,3 +5482,100 @@ static void GetGLTFPrimitiveCount(cgltf_node *node, int *outCount) } #endif + +#if defined(SUPPORT_FILEFORMAT_VOX) +// Load OBJ mesh data +static Model LoadVOX(const char* fileName) +{ + Model model = { 0 }; + int nbvertices = 0; + int meshescount = 0; + + ////////////////////////////////// + // Load MagicaVoxel fileformat + + VoxArray3D voxarray; + int ret = Vox_LoadFileName(fileName, &voxarray); + + if (ret != VOX_SUCCESS) + { + TRACELOG(LOG_WARNING, "MODEL: [%s] Failed to load VOX data", fileName); + return model; + } + else + { + // Compute meshes count + nbvertices = voxarray.vertices.used; + meshescount = 1 + (nbvertices / 65536); + + TRACELOG(LOG_INFO, "MODEL: [%s] VOX data loaded successfully : %i vertices/%i meshes", fileName, nbvertices, meshescount); + } + + ////////////////////////////////// + // Build model + + // Build Models from meshes + model.transform = MatrixIdentity(); + + model.meshCount = meshescount; + model.meshes = (Mesh*)MemAlloc(model.meshCount * sizeof(Mesh)); + + model.meshMaterial = (int*)MemAlloc(model.meshCount * sizeof(int)); + + model.materialCount = 1; + model.materials = (Material*)MemAlloc(model.materialCount * sizeof(Material)); + model.materials[0] = LoadMaterialDefault(); + + + // Init model's meshes + int verticesRemain = voxarray.vertices.used; + int verticesMax = 65532; //5461 voxels x 12 vertices per voxel -> 65532 (must be inf 65536) + + Vector3* pvertices = voxarray.vertices.array; //6*4=12 vertices per voxel + Color* pcolors = voxarray.colors.array; + unsigned short* pindices = voxarray.indices.array; //5461 * 6 * 6 -> 196596 indices max per mesh + + int size; + + for (int idxMesh = 0; idxMesh < meshescount; idxMesh++) + { + Mesh* pmesh = &model.meshes[idxMesh]; + memset(pmesh, 0, sizeof(Mesh)); + + // Copy Vertices + pmesh->vertexCount = (int)fmin(verticesMax, verticesRemain); + + size = pmesh->vertexCount * sizeof(float) * 3; + pmesh->vertices = MemAlloc(size); + memcpy(pmesh->vertices, pvertices, size); + + //Copy Indices TODO compute globals indices array + size = voxarray.indices.used * sizeof(unsigned short); + pmesh->indices = MemAlloc(size); + memcpy(pmesh->indices, pindices, size); + + pmesh->triangleCount = (pmesh->vertexCount / 4) * 2; + + // Copy Colors + size = pmesh->vertexCount * sizeof(Color); + pmesh->colors = MemAlloc(size); + memcpy(pmesh->colors, pcolors, size); + + // First material index + model.meshMaterial[idxMesh] = 0; + + // Build GPU mesh + UploadMesh(pmesh, false); + + //Next + verticesRemain -= verticesMax; + pvertices += verticesMax; + pcolors += verticesMax; + } + + //Free arrays + Vox_FreeArrays(&voxarray); + + return model; +} +#endif \ No newline at end of file