mirror of
https://github.com/Relintai/voxelman.git
synced 2025-03-12 18:18:50 +01:00
Added a MarchingCubes World and Chunk.
This commit is contained in:
parent
61a8b9224f
commit
7c95171944
3
SCsub
3
SCsub
@ -51,6 +51,9 @@ sources = [
|
||||
"world/default/voxel_world_default.cpp",
|
||||
"world/default/voxel_chunk_default.cpp",
|
||||
|
||||
"world/marching_cubes/voxel_chunk_marching_cubes.cpp",
|
||||
"world/marching_cubes/voxel_world_marching_cubes.cpp",
|
||||
|
||||
"meshers/cubic_mesher/voxel_mesher_cubic.cpp",
|
||||
"meshers/cubic_mesher/voxel_cube_points.cpp",
|
||||
|
||||
|
@ -46,6 +46,9 @@ def get_doc_classes():
|
||||
"VoxelChunkBlocky",
|
||||
"VoxelMesherLiquidBlocky",
|
||||
|
||||
"VoxelWorldMarchingCubes",
|
||||
"VoxelChunkMarchingCubes",
|
||||
|
||||
"VoxelMesherDefault",
|
||||
"VoxelWorldDefault",
|
||||
"VoxelChunkBlocky",
|
||||
|
@ -61,9 +61,13 @@ SOFTWARE.
|
||||
|
||||
#include "meshers/blocky/voxel_mesher_blocky.h"
|
||||
#include "meshers/blocky/voxel_mesher_liquid_blocky.h"
|
||||
|
||||
#include "world/blocky/voxel_chunk_blocky.h"
|
||||
#include "world/blocky/voxel_world_blocky.h"
|
||||
|
||||
#include "world/marching_cubes/voxel_chunk_marching_cubes.h"
|
||||
#include "world/marching_cubes/voxel_world_marching_cubes.h"
|
||||
|
||||
void register_voxelman_types() {
|
||||
ClassDB::register_class<VoxelMesher>();
|
||||
ClassDB::register_class<VoxelMesherDefault>();
|
||||
@ -102,6 +106,9 @@ void register_voxelman_types() {
|
||||
ClassDB::register_class<VoxelChunkBlocky>();
|
||||
ClassDB::register_class<VoxelMesherLiquidBlocky>();
|
||||
|
||||
ClassDB::register_class<VoxelWorldMarchingCubes>();
|
||||
ClassDB::register_class<VoxelChunkMarchingCubes>();
|
||||
|
||||
ClassDB::register_class<VoxelmanLevelGenerator>();
|
||||
ClassDB::register_class<VoxelmanLevelGeneratorFlat>();
|
||||
|
||||
|
81
world/marching_cubes/voxel_chunk_marching_cubes.cpp
Normal file
81
world/marching_cubes/voxel_chunk_marching_cubes.cpp
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright (c) 2019-2020 Péter Magyar
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#include "voxel_chunk_marching_cubes.h"
|
||||
|
||||
#include "../../meshers/marching_cubes/voxel_mesher_marching_cubes.h"
|
||||
|
||||
#include "../../defines.h"
|
||||
|
||||
VoxelChunkMarchingCubes::VoxelChunkMarchingCubes() {
|
||||
}
|
||||
|
||||
VoxelChunkMarchingCubes::~VoxelChunkMarchingCubes() {
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_setup_channels() {
|
||||
set_channel_count(MAX_DEFAULT_CHANNELS);
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_create_meshers() {
|
||||
add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes())));
|
||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
mesher->set_lod_size(get_lod_size());
|
||||
mesher->set_voxel_scale(get_voxel_scale());
|
||||
|
||||
Ref<VoxelMesherDefault> md = mesher;
|
||||
|
||||
if (md.is_valid()) {
|
||||
md->set_build_flags(get_build_flags());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
for (int i = 0; i < _liquid_meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
mesher->set_lod_size(get_lod_size());
|
||||
mesher->set_voxel_scale(get_voxel_scale());
|
||||
|
||||
Ref<VoxelMesherDefault> md = mesher;
|
||||
|
||||
if (md.is_valid()) {
|
||||
md->set_build_flags(get_build_flags());
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "set_channel_compressed", "get_channel_compressed", 1);
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &VoxelChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &VoxelChunk::set_channel_compressed);
|
||||
}
|
42
world/marching_cubes/voxel_chunk_marching_cubes.h
Normal file
42
world/marching_cubes/voxel_chunk_marching_cubes.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright (c) 2019-2020 Péter Magyar
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_MARCHING_CUBES_H
|
||||
#define VOXEL_CHUNK_MARCHING_CUBES_H
|
||||
|
||||
#include "../default/voxel_chunk_default.h"
|
||||
|
||||
class VoxelChunkMarchingCubes : public VoxelChunkDefault {
|
||||
GDCLASS(VoxelChunkMarchingCubes, VoxelChunkDefault);
|
||||
|
||||
public:
|
||||
VoxelChunkMarchingCubes();
|
||||
~VoxelChunkMarchingCubes();
|
||||
|
||||
protected:
|
||||
virtual void _setup_channels();
|
||||
virtual void _create_meshers();
|
||||
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
45
world/marching_cubes/voxel_world_marching_cubes.cpp
Normal file
45
world/marching_cubes/voxel_world_marching_cubes.cpp
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
Copyright (c) 2019-2020 Péter Magyar
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#include "voxel_world_marching_cubes.h"
|
||||
|
||||
#include "voxel_chunk_marching_cubes.h"
|
||||
|
||||
Ref<VoxelChunk> VoxelWorldMarchingCubes::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||
|
||||
if (!chunk.is_valid()) {
|
||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkMarchingCubes));
|
||||
}
|
||||
|
||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||
}
|
||||
|
||||
VoxelWorldMarchingCubes::VoxelWorldMarchingCubes() {
|
||||
set_data_margin_start(1);
|
||||
set_data_margin_end(2);
|
||||
}
|
||||
|
||||
VoxelWorldMarchingCubes ::~VoxelWorldMarchingCubes() {
|
||||
}
|
||||
|
||||
void VoxelWorldMarchingCubes::_bind_methods() {
|
||||
}
|
41
world/marching_cubes/voxel_world_marching_cubes.h
Normal file
41
world/marching_cubes/voxel_world_marching_cubes.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
Copyright (c) 2019-2020 Péter Magyar
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_MARCHING_CUBES_H
|
||||
#define VOXEL_WORLD_MARCHING_CUBES_H
|
||||
|
||||
#include "../default/voxel_world_default.h"
|
||||
|
||||
class VoxelWorldMarchingCubes : public VoxelWorldDefault {
|
||||
GDCLASS(VoxelWorldMarchingCubes, VoxelWorldDefault);
|
||||
|
||||
public:
|
||||
VoxelWorldMarchingCubes();
|
||||
~VoxelWorldMarchingCubes();
|
||||
|
||||
protected:
|
||||
Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user