From 8d320ad4419bb75494dfc8d0763125234ec3f6fd Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 3 May 2021 16:52:11 +0200 Subject: [PATCH] [DEV] set some updates --- .classpath | 29 +- blender/io_scene_emf/__init__.py | 164 +++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 3880 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3921 bytes .../__pycache__/export_emf.cpython-37.pyc | Bin 0 -> 12698 bytes .../__pycache__/export_emf.cpython-39.pyc | Bin 0 -> 12637 bytes blender/io_scene_emf/export_emf.py | 687 +++++++++++++ samples/.checkstyle | 7 + samples/.classpath | 21 + samples/.gitignore | 1 + samples/.project | 17 + samples/.settings/org.eclipse.jdt.ui.prefs | 2 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../resources}/res/DragonBlender.blend | Bin .../resources}/res/Tree1.obj | 0 .../resources}/res/blendMap.png | Bin {resources => samples/resources}/res/box.obj | 0 {resources => samples/resources}/res/box.png | Bin .../resources}/res/bunny.obj | 0 .../resources}/res/cube-one.obj | 0 .../resources}/res/cube.blend | Bin {resources => samples/resources}/res/cube.mtl | 0 {resources => samples/resources}/res/cube.obj | 0 {resources => samples/resources}/res/dirt.png | Bin .../resources}/res/dragon.obj | 0 .../resources}/res/drone.obj | 0 .../resources}/res/exampleOBJ.obj | 0 {resources => samples/resources}/res/fern.obj | 0 {resources => samples/resources}/res/fern.png | Bin .../resources}/res/fern_atlas.png | Bin .../resources}/res/flower.png | Bin .../resources}/res/grass.obj | 0 .../resources}/res/grass.png | Bin .../resources}/res/grassFlowers.png | Bin .../resources}/res/grassModel.obj | 0 .../resources}/res/grassTexture.png | Bin .../resources}/res/grassy.png | Bin .../resources}/res/health.png | Bin .../resources}/res/heightmap.png | Bin .../resources}/res/image.png | Bin {resources => samples/resources}/res/lamp.mtl | 0 {resources => samples/resources}/res/lamp.obj | 0 {resources => samples/resources}/res/lamp.png | Bin .../resources}/res/lowPolyTree.obj | 0 .../resources}/res/lowPolyTree.png | Bin {resources => samples/resources}/res/mud.png | Bin {resources => samples/resources}/res/path.png | Bin .../resources}/res/person.blend | Bin .../resources}/res/person.blend1 | Bin .../resources}/res/person.obj | 0 .../resources}/res/person_-xfw_zup.mtl | 0 .../resources}/res/person_-xfw_zup.obj | 0 .../resources}/res/person_-yfw_zup.mtl | 0 .../resources}/res/person_-yfw_zup.obj | 0 {resources => samples/resources}/res/pine.obj | 0 {resources => samples/resources}/res/pine.png | Bin .../resources}/res/playerTexture.png | Bin .../resources}/res/skybox/back.png | Bin .../resources}/res/skybox/bottom.png | Bin .../resources}/res/skybox/front.png | Bin .../resources}/res/skybox/left.png | Bin .../resources}/res/skybox/right.png | Bin .../resources}/res/skybox/top.png | Bin .../resources}/res/skybox2/back.png | Bin .../resources}/res/skybox2/bottom.png | Bin .../resources}/res/skybox2/front.png | Bin .../resources}/res/skybox2/left.png | Bin .../resources}/res/skybox2/right.png | Bin .../resources}/res/skybox2/top.png | Bin .../resources}/res/socuwan.png | Bin .../resources}/res/stall.blend | Bin .../resources}/res/stall.obj | 0 .../resources}/res/stallTexture.png | Bin samples/resources/res/tower.dae | 327 ++++++ {resources => samples/resources}/res/tree.obj | 0 {resources => samples/resources}/res/tree.png | Bin .../resources}/res/tree_sample.png | Bin .../resources}/res/white.png | Bin .../s1_textured_cube}/data/basic.frag | 0 .../s1_textured_cube}/data/basic.vert | 0 .../testDataLoxelEngine/data/basic.frag | 17 + .../testDataLoxelEngine/data/basic.vert | 21 + .../data/basicMaterial.frag | 0 .../data/basicMaterial.vert | 0 .../testDataLoxelEngine/data/blocks/.DS_Store | Bin .../data/blocks/anvil_base.png | Bin .../data/blocks/anvil_top_damaged_0.png | Bin .../data/blocks/anvil_top_damaged_1.png | Bin .../data/blocks/anvil_top_damaged_2.png | Bin .../data/blocks/beacon.png | Bin .../data/blocks/beacon.png.mcmeta | 0 .../data/blocks/bed_feet_end.png | Bin .../data/blocks/bed_feet_side.png | Bin .../data/blocks/bed_feet_top.png | Bin .../data/blocks/bed_head_end.png | Bin .../data/blocks/bed_head_side.png | Bin .../data/blocks/bed_head_top.png | Bin .../data/blocks/bedrock.png | Bin .../data/blocks/bookshelf.png | Bin .../data/blocks/brewing_stand.png | Bin .../data/blocks/brewing_stand_base.png | Bin .../testDataLoxelEngine/data/blocks/brick.png | Bin .../data/blocks/cactus_bottom.png | Bin .../data/blocks/cactus_side.png | Bin .../data/blocks/cactus_top.png | Bin .../data/blocks/cake_bottom.png | Bin .../data/blocks/cake_inner.png | Bin .../data/blocks/cake_side.png | Bin .../data/blocks/cake_top.png | Bin .../data/blocks/carrots_stage_0.png | Bin .../data/blocks/carrots_stage_1.png | Bin .../data/blocks/carrots_stage_2.png | Bin .../data/blocks/carrots_stage_3.png | Bin .../data/blocks/cauldron_bottom.png | Bin .../data/blocks/cauldron_inner.png | Bin .../data/blocks/cauldron_side.png | Bin .../data/blocks/cauldron_top.png | Bin .../data/blocks/chorus_flower.png | Bin .../data/blocks/chorus_flower_dead.png | Bin .../data/blocks/chorus_plant.png | Bin .../testDataLoxelEngine/data/blocks/clay.png | Bin .../data/blocks/coal_block.png | Bin .../data/blocks/coal_ore.png | Bin .../data/blocks/coarse_dirt.png | Bin .../data/blocks/cobblestone.png | Bin .../data/blocks/cobblestone_mossy.png | Bin .../data/blocks/cocoa_stage_0.png | Bin .../data/blocks/cocoa_stage_1.png | Bin .../data/blocks/cocoa_stage_2.png | Bin .../data/blocks/command_block.png | Bin .../data/blocks/command_block.png.mcmeta | 0 .../data/blocks/comparator_off.png | Bin .../data/blocks/comparator_on.png | Bin .../data/blocks/crafting_table_front.png | Bin .../data/blocks/crafting_table_side.png | Bin .../data/blocks/crafting_table_top.png | Bin .../blocks/daylight_detector_inverted_top.png | Bin .../data/blocks/daylight_detector_side.png | Bin .../data/blocks/daylight_detector_top.png | Bin .../data/blocks/deadbush.png | Bin .../data/blocks/destroy_stage_0.png | Bin .../data/blocks/destroy_stage_1.png | Bin .../data/blocks/destroy_stage_2.png | Bin .../data/blocks/destroy_stage_3.png | Bin .../data/blocks/destroy_stage_4.png | Bin .../data/blocks/destroy_stage_5.png | Bin .../data/blocks/destroy_stage_6.png | Bin .../data/blocks/destroy_stage_7.png | Bin .../data/blocks/destroy_stage_8.png | Bin .../data/blocks/destroy_stage_9.png | Bin .../data/blocks/diamond.png.mcmeta | 0 .../data/blocks/diamond_block.png | Bin .../data/blocks/diamond_block.png.mcmeta | 0 .../data/blocks/diamond_ore.png | Bin .../data/blocks/diamond_ore.png.mcmeta | 0 .../testDataLoxelEngine/data/blocks/dirt.png | Bin .../data/blocks/dirt_podzol_side.png | Bin .../data/blocks/dirt_podzol_top.png | Bin .../blocks/dispenser_front_horizontal.png | Bin .../data/blocks/dispenser_front_vertical.png | Bin .../data/blocks/door_acacia_lower.png | Bin .../data/blocks/door_acacia_upper.png | Bin .../data/blocks/door_dark_oak_lower.png | Bin .../data/blocks/door_dark_oak_upper.png | Bin .../data/blocks/door_iron_lower.png | Bin .../data/blocks/door_iron_upper.png | Bin .../data/blocks/door_wood_lower.png | Bin .../data/blocks/door_wood_upper.png | Bin .../data/blocks/double_plant_fern_bottom.png | Bin .../data/blocks/double_plant_fern_top.png | Bin .../blocks/double_plant_paeonia_bottom.png | Bin .../data/blocks/double_plant_paeonia_top.png | Bin .../data/blocks/double_plant_rose_bottom.png | Bin .../data/blocks/double_plant_rose_top.png | Bin .../blocks/double_plant_syringa_bottom.png | Bin .../data/blocks/double_plant_syringa_top.png | Bin .../data/blocks/dragon_egg.png | Bin .../data/blocks/dragon_egg.png.mcmeta | 0 .../data/blocks/dropper_front_horizontal.png | Bin .../data/blocks/dropper_front_vertical.png | Bin .../data/blocks/emerald_block.png | Bin .../data/blocks/emerald_block.png.mcmeta | 0 .../data/blocks/emerald_ore.png | Bin .../data/blocks/emerald_ore.png.mcmeta | 0 .../data/blocks/end_bricks.png | Bin .../data/blocks/end_rod.png | Bin .../data/blocks/end_stone.png | Bin .../data/blocks/endframe_eye.png | Bin .../data/blocks/endframe_eye.png.mcmeta | 0 .../data/blocks/endframe_side.png | Bin .../data/blocks/endframe_side.png.mcmeta | 0 .../data/blocks/endframe_top.png | Bin .../data/blocks/endframe_top.png.mcmeta | 0 .../data/blocks/farmland_dry.png | Bin .../data/blocks/farmland_wet.png | Bin .../testDataLoxelEngine/data/blocks/fern.png | Bin .../data/blocks/fire_layer_0.png | Bin .../data/blocks/fire_layer_0.png.mcmeta | 0 .../data/blocks/fire_layer_1.png | Bin .../data/blocks/fire_layer_1.png.mcmeta | 0 .../data/blocks/flower_dandelion.png | Bin .../data/blocks/flower_rose.png | Bin .../data/blocks/furnace_front_off.png | Bin .../data/blocks/furnace_front_on.png | Bin .../data/blocks/furnace_front_on.png.mcmeta | 0 .../data/blocks/furnace_side.png | Bin .../data/blocks/furnace_top.png | Bin .../data/blocks/furnace_top.png.mcmeta | 0 .../testDataLoxelEngine/data/blocks/glass.png | Bin .../data/blocks/glass_black.png | Bin .../data/blocks/glass_blue.png | Bin .../data/blocks/glass_brown.png | Bin .../data/blocks/glass_cyan.png | Bin .../data/blocks/glass_gray.png | Bin .../data/blocks/glass_green.png | Bin .../data/blocks/glass_light_blue.png | Bin .../data/blocks/glass_lime.png | Bin .../data/blocks/glass_magenta.png | Bin .../data/blocks/glass_orange.png | Bin .../data/blocks/glass_pane_top.png | Bin .../data/blocks/glass_pink.png | Bin .../data/blocks/glass_purple.png | Bin .../data/blocks/glass_red.png | Bin .../data/blocks/glass_silver.png | Bin .../data/blocks/glass_white.png | Bin .../data/blocks/glass_yellow.png | Bin .../data/blocks/glowstone.png | Bin .../data/blocks/glowstone.png.mcmeta | 0 .../data/blocks/gold_block.png | Bin .../data/blocks/gold_ore.png | Bin .../data/blocks/gold_ore.png.mcmeta | 0 .../data/blocks/gold_top.png | Bin .../data/blocks/grass_path_side.png | Bin .../data/blocks/grass_path_top.png | Bin .../data/blocks/grass_side_block.png | Bin .../data/blocks/grass_side_overlay.png | Bin .../data/blocks/grass_side_overlay2.png | Bin .../data/blocks/grass_side_snowed.png | Bin .../data/blocks/grass_top.png | Bin .../data/blocks/gravel.png | Bin .../data/blocks/hardened_clay.png | Bin .../blocks/hardened_clay_stained_black.png | Bin .../blocks/hardened_clay_stained_blue.png | Bin .../blocks/hardened_clay_stained_brown.png | Bin .../blocks/hardened_clay_stained_cyan.png | Bin .../blocks/hardened_clay_stained_gray.png | Bin .../blocks/hardened_clay_stained_green.png | Bin .../hardened_clay_stained_light_blue.png | Bin .../blocks/hardened_clay_stained_lime.png | Bin .../blocks/hardened_clay_stained_magenta.png | Bin .../blocks/hardened_clay_stained_orange.png | Bin .../blocks/hardened_clay_stained_pink.png | Bin .../blocks/hardened_clay_stained_purple.png | Bin .../data/blocks/hardened_clay_stained_red.png | Bin .../blocks/hardened_clay_stained_silver.png | Bin .../blocks/hardened_clay_stained_white.png | Bin .../blocks/hardened_clay_stained_yellow.png | Bin .../data/blocks/hay_block_side.png | Bin .../data/blocks/hay_block_top.png | Bin .../data/blocks/hopper_inside.png | Bin .../data/blocks/hopper_outside.png | Bin .../data/blocks/hopper_top.png | Bin .../testDataLoxelEngine/data/blocks/ice.png | Bin .../data/blocks/ice_packed.png | Bin .../data/blocks/ice_packed.png.mcmeta | 0 .../data/blocks/iron_bars.png | Bin .../data/blocks/iron_bars_top.png | Bin .../data/blocks/iron_block.png | Bin .../data/blocks/iron_ore.png | Bin .../data/blocks/iron_top.png | Bin .../data/blocks/iron_trapdoor.png | Bin .../data/blocks/itemframe_background.png | Bin .../data/blocks/jukebox_side.png | Bin .../data/blocks/jukebox_side.png.mcmeta | 0 .../data/blocks/jukebox_top.png | Bin .../data/blocks/lapis_block.png | Bin .../data/blocks/lapis_ore.png | Bin .../data/blocks/lava_flow.png | Bin .../data/blocks/lava_flow.png.mcmeta | 0 .../data/blocks/lava_flow.png.mcmeta copy | 0 .../data/blocks/lava_still.png | Bin .../data/blocks/lava_still.png.mcmeta | 0 .../data/blocks/lava_still.png.mcmeta copy | 0 .../data/blocks/leaves_acacia.png | Bin .../data/blocks/leaves_big_oak.png | Bin .../data/blocks/leaves_birch.png | Bin .../data/blocks/leaves_jungle.png | Bin .../data/blocks/leaves_oak.png | Bin .../data/blocks/leaves_spruce.png | Bin .../testDataLoxelEngine/data/blocks/lever.png | Bin .../data/blocks/log_acacia.png | Bin .../data/blocks/log_acacia_top.png | Bin .../data/blocks/log_big_oak.png | Bin .../data/blocks/log_big_oak_top.png | Bin .../data/blocks/log_birch.png | Bin .../data/blocks/log_birch_top.png | Bin .../data/blocks/log_jungle.png | Bin .../data/blocks/log_jungle_top.png | Bin .../data/blocks/log_oak.png | Bin .../data/blocks/log_oak_top.png | Bin .../data/blocks/log_spruce.png | Bin .../data/blocks/log_spruce_top.png | Bin .../data/blocks/melon_side.png | Bin .../data/blocks/melon_stem_connected.png | Bin .../data/blocks/melon_stem_disconnected.png | Bin .../data/blocks/melon_top.png | Bin .../data/blocks/mob_spawner.png | Bin .../data/blocks/mushroom_block_inside.png | Bin .../data/blocks/mushroom_block_skin_brown.png | Bin .../data/blocks/mushroom_block_skin_red.png | Bin .../data/blocks/mushroom_block_skin_stem.png | Bin .../data/blocks/mushroom_brown.png | Bin .../data/blocks/mushroom_red.png | Bin .../data/blocks/mycelium_side.png | Bin .../data/blocks/mycelium_top.png | Bin .../data/blocks/nether_brick.png | Bin .../data/blocks/nether_portal.png | Bin .../data/blocks/nether_portal.png.mcmeta | 0 .../data/blocks/nether_wart_stage_0.png | Bin .../data/blocks/nether_wart_stage_1.png | Bin .../data/blocks/nether_wart_stage_2.png | Bin .../data/blocks/netherrack.png | Bin .../data/blocks/noteblock.png | Bin .../data/blocks/obsidian.png | Bin .../data/blocks/piston_bottom.png | Bin .../data/blocks/piston_inner.png | Bin .../data/blocks/piston_side.png | Bin .../data/blocks/piston_top_normal.png | Bin .../data/blocks/piston_top_sticky.png | Bin .../data/blocks/planks_acacia.png | Bin .../data/blocks/planks_big_oak.png | Bin .../data/blocks/planks_birch.png | Bin .../data/blocks/planks_jungle.png | Bin .../data/blocks/planks_oak.png | Bin .../data/blocks/planks_spruce.png | Bin .../data/blocks/portal.png | Bin .../data/blocks/portal.png.mcmeta | 0 .../data/blocks/portal.png.mcmeta copy | 0 .../data/blocks/portal_effect.png | Bin .../data/blocks/portal_effect.png.mcmeta | 0 .../data/blocks/potatoes_stage_0.png | Bin .../data/blocks/potatoes_stage_1.png | Bin .../data/blocks/potatoes_stage_2.png | Bin .../data/blocks/potatoes_stage_3.png | Bin .../data/blocks/prismarine_bricks.png | Bin .../data/blocks/prismarine_bricks.png.mcmeta | 0 .../data/blocks/prismarine_dark.png | Bin .../data/blocks/prismarine_rough.png | Bin .../data/blocks/prismarine_rough.png.mcmeta | 0 .../blocks/prismarine_rough.png.mcmeta copy | 0 .../data/blocks/pumpkin_face_off.png | Bin .../data/blocks/pumpkin_face_on.png | Bin .../data/blocks/pumpkin_face_on.png.mcmeta | 0 .../data/blocks/pumpkin_side.png | Bin .../data/blocks/pumpkin_top.png | Bin .../data/blocks/purpur_block.png | Bin .../data/blocks/purpur_pillar.png | Bin .../data/blocks/purpur_pillar_top.png | Bin .../data/blocks/quartz_block_bottom.png | Bin .../data/blocks/quartz_block_chiseled.png | Bin .../data/blocks/quartz_block_chiseled_top.png | Bin .../data/blocks/quartz_block_lines.png | Bin .../data/blocks/quartz_block_lines_top.png | Bin .../data/blocks/quartz_block_side.png | Bin .../data/blocks/quartz_block_top.png | Bin .../data/blocks/quartz_ore.png | Bin .../data/blocks/rail_activator.png | Bin .../data/blocks/rail_activator_powered.png | Bin .../blocks/rail_activator_powered.png.mcmeta | 0 .../data/blocks/rail_detector.png | Bin .../data/blocks/rail_detector_powered.png | Bin .../blocks/rail_detector_powered.png.mcmeta | 0 .../data/blocks/rail_golden.png | Bin .../data/blocks/rail_golden_powered.png | Bin .../blocks/rail_golden_powered.png.mcmeta | 0 .../data/blocks/rail_normal.png | Bin .../data/blocks/rail_normal_turned.png | Bin .../data/blocks/red_sand.png | Bin .../data/blocks/red_sandstone_bottom.png | Bin .../data/blocks/red_sandstone_carved.png | Bin .../data/blocks/red_sandstone_carved_1.png | Bin .../data/blocks/red_sandstone_carved_2.png | Bin .../data/blocks/red_sandstone_normal.png | Bin .../data/blocks/red_sandstone_smooth.png | Bin .../data/blocks/red_sandstone_top.png | Bin .../data/blocks/redstone_block.png | Bin .../data/blocks/redstone_block.png.mcmeta | 0 .../data/blocks/redstone_dust_cross.png | Bin .../data/blocks/redstone_dust_dot.png | Bin .../data/blocks/redstone_dust_line.png | Bin .../data/blocks/redstone_dust_line0.png | Bin .../data/blocks/redstone_dust_line1.png | Bin .../data/blocks/redstone_lamp_off.png | Bin .../data/blocks/redstone_lamp_on.png | Bin .../data/blocks/redstone_lamp_on.png.mcmeta | 0 .../data/blocks/redstone_ore.png | Bin .../data/blocks/redstone_ore.png.mcmeta | 0 .../data/blocks/redstone_torch_off.png | Bin .../data/blocks/redstone_torch_on.png | Bin .../data/blocks/redstone_torch_on.png.mcmeta | 0 .../testDataLoxelEngine/data/blocks/reeds.png | Bin .../data/blocks/repeater_off.png | Bin .../data/blocks/repeater_on.png | Bin .../testDataLoxelEngine/data/blocks/sand.png | Bin .../data/blocks/sandstone_bottom.png | Bin .../data/blocks/sandstone_carved.png | Bin .../data/blocks/sandstone_carved_1.png | Bin .../data/blocks/sandstone_carved_2.png | Bin .../data/blocks/sandstone_normal.png | Bin .../data/blocks/sandstone_smooth.png | Bin .../data/blocks/sandstone_top.png | Bin .../data/blocks/sea_lantern.png | Bin .../testDataLoxelEngine/data/blocks/slime.png | Bin .../testDataLoxelEngine/data/blocks/snow.png | Bin .../data/blocks/soul_sand.png | Bin .../data/blocks/sponge.png | Bin .../data/blocks/sponge_wet.png | Bin .../testDataLoxelEngine/data/blocks/stone.png | Bin .../data/blocks/stone_andesite.png | Bin .../data/blocks/stone_andesite_smooth.png | Bin .../data/blocks/stone_diorite.png | Bin .../data/blocks/stone_diorite_smooth.png | Bin .../data/blocks/stone_granite.png | Bin .../data/blocks/stone_granite_smooth.png | Bin .../data/blocks/stone_slab_side.png | Bin .../data/blocks/stone_slab_top.png | Bin .../data/blocks/stonebrick.png | Bin .../data/blocks/stonebrick_1.png | Bin .../data/blocks/stonebrick_2.png | Bin .../data/blocks/stonebrick_carved.png | Bin .../data/blocks/stonebrick_cracked.png | Bin .../data/blocks/stonebrick_cracked_1.png | Bin .../data/blocks/stonebrick_cracked_2.png | Bin .../data/blocks/stonebrick_mossy.png | Bin .../data/blocks/sunflower_head.png | Bin .../data/blocks/sunflower_stem.png | Bin .../data/blocks/tallgrass.png | Bin .../data/blocks/tnt_bottom.png | Bin .../data/blocks/tnt_side.png | Bin .../data/blocks/tnt_top.png | Bin .../data/blocks/trapdoor.png | Bin .../data/blocks/trip_wire.png | Bin .../data/blocks/trip_wire_source.png | Bin .../testDataLoxelEngine/data/blocks/vine.png | Bin .../data/blocks/water_flow.png | Bin .../data/blocks/water_flow.png.mcmeta | 0 .../data/blocks/water_static.png | Bin .../data/blocks/water_still.png | Bin .../data/blocks/water_still.png.mcmeta | 0 .../data/blocks/waterlily.png | Bin .../testDataLoxelEngine/data/blocks/web.png | Bin .../data/blocks/wool_colored_black.png | Bin .../data/blocks/wool_colored_blue.png | Bin .../data/blocks/wool_colored_brown.png | Bin .../data/blocks/wool_colored_cyan.png | Bin .../data/blocks/wool_colored_gray.png | Bin .../data/blocks/wool_colored_green.png | Bin .../data/blocks/wool_colored_light_blue.png | Bin .../data/blocks/wool_colored_lime.png | Bin .../data/blocks/wool_colored_magenta.png | Bin .../data/blocks/wool_colored_orange.png | Bin .../data/blocks/wool_colored_pink.png | Bin .../data/blocks/wool_colored_purple.png | Bin .../data/blocks/wool_colored_red.png | Bin .../data/blocks/wool_colored_silver.png | Bin .../data/blocks/wool_colored_white.png | Bin .../data/blocks/wool_colored_yellow.png | Bin .../CollisionTestApplication.java | 10 +- .../ege/lowPoly/LowPolyApplication.java | 8 +- .../ege/loxelEngine/LoxelApplication.java | 10 +- .../ege/s1_texturedCube/S1Application.java | 8 +- src/module-info.java | 3 +- src/objConverter/ModelData.java | 40 - src/objConverter/OBJFileLoader.java | 164 --- src/objConverter/Vertex.java | 66 -- .../ege/components/ComponentDynamicMeshs.java | 4 +- .../ege/components/ComponentStaticMesh.java | 4 +- .../ege/components/ComponentStaticMeshs.java | 4 +- .../map/ComponentDynamicMeshsVoxelMap.java | 2 +- .../resource/ResourceListTexturedMesh.java | 112 -- .../ege/resource/ResourceMesh.java__ | 962 ------------------ .../resource/ResourceStaticColoredMesh.java | 42 - .../ege/resource/ResourceStaticMesh.java | 55 - .../ege/resource/ResourceStaticMeshObj.java | 52 - .../resource/ResourceStaticTexturedMesh.java | 41 - .../atriasoft/ege/tools/MeshGenerator.java | 2 +- src/renderEngine/OBJLoader.java | 6 +- 487 files changed, 1313 insertions(+), 1577 deletions(-) create mode 100644 blender/io_scene_emf/__init__.py create mode 100644 blender/io_scene_emf/__pycache__/__init__.cpython-37.pyc create mode 100644 blender/io_scene_emf/__pycache__/__init__.cpython-39.pyc create mode 100644 blender/io_scene_emf/__pycache__/export_emf.cpython-37.pyc create mode 100644 blender/io_scene_emf/__pycache__/export_emf.cpython-39.pyc create mode 100644 blender/io_scene_emf/export_emf.py create mode 100644 samples/.checkstyle create mode 100644 samples/.classpath create mode 100644 samples/.gitignore create mode 100644 samples/.project create mode 100644 samples/.settings/org.eclipse.jdt.ui.prefs create mode 100644 samples/.settings/org.eclipse.ltk.core.refactoring.prefs rename {resources => samples/resources}/res/DragonBlender.blend (100%) rename {resources => samples/resources}/res/Tree1.obj (100%) rename {resources => samples/resources}/res/blendMap.png (100%) rename {resources => samples/resources}/res/box.obj (100%) rename {resources => samples/resources}/res/box.png (100%) rename {resources => samples/resources}/res/bunny.obj (100%) rename {resources => samples/resources}/res/cube-one.obj (100%) rename {resources => samples/resources}/res/cube.blend (100%) rename {resources => samples/resources}/res/cube.mtl (100%) rename {resources => samples/resources}/res/cube.obj (100%) rename {resources => samples/resources}/res/dirt.png (100%) rename {resources => samples/resources}/res/dragon.obj (100%) rename {resources => samples/resources}/res/drone.obj (100%) rename {resources => samples/resources}/res/exampleOBJ.obj (100%) rename {resources => samples/resources}/res/fern.obj (100%) rename {resources => samples/resources}/res/fern.png (100%) rename {resources => samples/resources}/res/fern_atlas.png (100%) rename {resources => samples/resources}/res/flower.png (100%) rename {resources => samples/resources}/res/grass.obj (100%) rename {resources => samples/resources}/res/grass.png (100%) rename {resources => samples/resources}/res/grassFlowers.png (100%) rename {resources => samples/resources}/res/grassModel.obj (100%) rename {resources => samples/resources}/res/grassTexture.png (100%) rename {resources => samples/resources}/res/grassy.png (100%) rename {resources => samples/resources}/res/health.png (100%) rename {resources => samples/resources}/res/heightmap.png (100%) rename {resources => samples/resources}/res/image.png (100%) rename {resources => samples/resources}/res/lamp.mtl (100%) rename {resources => samples/resources}/res/lamp.obj (100%) rename {resources => samples/resources}/res/lamp.png (100%) rename {resources => samples/resources}/res/lowPolyTree.obj (100%) rename {resources => samples/resources}/res/lowPolyTree.png (100%) rename {resources => samples/resources}/res/mud.png (100%) rename {resources => samples/resources}/res/path.png (100%) rename {resources => samples/resources}/res/person.blend (100%) rename {resources => samples/resources}/res/person.blend1 (100%) rename {resources => samples/resources}/res/person.obj (100%) rename {resources => samples/resources}/res/person_-xfw_zup.mtl (100%) rename {resources => samples/resources}/res/person_-xfw_zup.obj (100%) rename {resources => samples/resources}/res/person_-yfw_zup.mtl (100%) rename {resources => samples/resources}/res/person_-yfw_zup.obj (100%) rename {resources => samples/resources}/res/pine.obj (100%) rename {resources => samples/resources}/res/pine.png (100%) rename {resources => samples/resources}/res/playerTexture.png (100%) rename {resources => samples/resources}/res/skybox/back.png (100%) rename {resources => samples/resources}/res/skybox/bottom.png (100%) rename {resources => samples/resources}/res/skybox/front.png (100%) rename {resources => samples/resources}/res/skybox/left.png (100%) rename {resources => samples/resources}/res/skybox/right.png (100%) rename {resources => samples/resources}/res/skybox/top.png (100%) rename {resources => samples/resources}/res/skybox2/back.png (100%) rename {resources => samples/resources}/res/skybox2/bottom.png (100%) rename {resources => samples/resources}/res/skybox2/front.png (100%) rename {resources => samples/resources}/res/skybox2/left.png (100%) rename {resources => samples/resources}/res/skybox2/right.png (100%) rename {resources => samples/resources}/res/skybox2/top.png (100%) rename {resources => samples/resources}/res/socuwan.png (100%) rename {resources => samples/resources}/res/stall.blend (100%) rename {resources => samples/resources}/res/stall.obj (100%) rename {resources => samples/resources}/res/stallTexture.png (100%) create mode 100644 samples/resources/res/tower.dae rename {resources => samples/resources}/res/tree.obj (100%) rename {resources => samples/resources}/res/tree.png (100%) rename {resources => samples/resources}/res/tree_sample.png (100%) rename {resources => samples/resources}/res/white.png (100%) rename {resources/testDataLoxelEngine => samples/resources/s1_textured_cube}/data/basic.frag (100%) rename {resources/testDataLoxelEngine => samples/resources/s1_textured_cube}/data/basic.vert (100%) create mode 100644 samples/resources/testDataLoxelEngine/data/basic.frag create mode 100644 samples/resources/testDataLoxelEngine/data/basic.vert rename {resources => samples/resources}/testDataLoxelEngine/data/basicMaterial.frag (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/basicMaterial.vert (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/.DS_Store (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/anvil_base.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/anvil_top_damaged_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/anvil_top_damaged_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/anvil_top_damaged_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/beacon.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/beacon.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_feet_end.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_feet_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_feet_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_head_end.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_head_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bed_head_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bedrock.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/bookshelf.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/brewing_stand.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/brewing_stand_base.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/brick.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cactus_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cactus_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cactus_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cake_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cake_inner.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cake_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cake_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/carrots_stage_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/carrots_stage_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/carrots_stage_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/carrots_stage_3.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cauldron_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cauldron_inner.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cauldron_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cauldron_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/chorus_flower.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/chorus_flower_dead.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/chorus_plant.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/clay.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/coal_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/coal_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/coarse_dirt.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cobblestone.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cobblestone_mossy.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cocoa_stage_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cocoa_stage_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/cocoa_stage_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/command_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/command_block.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/comparator_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/comparator_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/crafting_table_front.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/crafting_table_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/crafting_table_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/daylight_detector_inverted_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/daylight_detector_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/daylight_detector_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/deadbush.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_3.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_4.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_5.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_6.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_7.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_8.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/destroy_stage_9.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/diamond.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/diamond_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/diamond_block.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/diamond_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/diamond_ore.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dirt.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dirt_podzol_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dirt_podzol_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dispenser_front_horizontal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dispenser_front_vertical.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_acacia_lower.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_acacia_upper.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_dark_oak_lower.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_dark_oak_upper.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_iron_lower.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_iron_upper.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_wood_lower.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/door_wood_upper.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_fern_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_fern_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_paeonia_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_paeonia_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_rose_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_rose_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_syringa_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/double_plant_syringa_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dragon_egg.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dragon_egg.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dropper_front_horizontal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/dropper_front_vertical.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/emerald_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/emerald_block.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/emerald_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/emerald_ore.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/end_bricks.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/end_rod.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/end_stone.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_eye.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_eye.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_side.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/endframe_top.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/farmland_dry.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/farmland_wet.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/fern.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/fire_layer_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/fire_layer_0.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/fire_layer_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/fire_layer_1.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/flower_dandelion.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/flower_rose.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_front_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_front_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_front_on.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/furnace_top.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_black.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_brown.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_cyan.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_gray.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_green.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_light_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_lime.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_magenta.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_orange.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_pane_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_pink.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_purple.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_red.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_silver.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_white.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glass_yellow.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glowstone.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/glowstone.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/gold_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/gold_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/gold_ore.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/gold_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_path_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_path_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_side_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_side_overlay.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_side_overlay2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_side_snowed.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/grass_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/gravel.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_black.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_brown.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_cyan.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_gray.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_green.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_light_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_lime.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_magenta.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_orange.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_pink.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_purple.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_red.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_silver.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_white.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hardened_clay_stained_yellow.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hay_block_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hay_block_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hopper_inside.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hopper_outside.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/hopper_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/ice.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/ice_packed.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/ice_packed.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_bars.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_bars_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/iron_trapdoor.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/itemframe_background.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/jukebox_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/jukebox_side.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/jukebox_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lapis_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lapis_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_flow.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta copy (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_still.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta copy (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_acacia.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_big_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_birch.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_jungle.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/leaves_spruce.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/lever.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_acacia.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_acacia_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_big_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_big_oak_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_birch.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_birch_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_jungle.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_jungle_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_oak_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_spruce.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/log_spruce_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/melon_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/melon_stem_connected.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/melon_stem_disconnected.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/melon_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mob_spawner.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_block_inside.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_block_skin_brown.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_block_skin_red.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_block_skin_stem.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_brown.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mushroom_red.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mycelium_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/mycelium_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_brick.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_portal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_portal.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_wart_stage_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_wart_stage_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/nether_wart_stage_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/netherrack.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/noteblock.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/obsidian.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/piston_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/piston_inner.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/piston_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/piston_top_normal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/piston_top_sticky.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_acacia.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_big_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_birch.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_jungle.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_oak.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/planks_spruce.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/portal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/portal.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/portal.png.mcmeta copy (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/portal_effect.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/portal_effect.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/potatoes_stage_0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/potatoes_stage_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/potatoes_stage_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/potatoes_stage_3.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_bricks.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_bricks.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_dark.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_rough.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta copy (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/pumpkin_face_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/pumpkin_face_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/pumpkin_face_on.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/pumpkin_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/pumpkin_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/purpur_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/purpur_pillar.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/purpur_pillar_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_chiseled.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_chiseled_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_lines.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_lines_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_block_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/quartz_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_activator.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_activator_powered.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_activator_powered.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_detector.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_detector_powered.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_detector_powered.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_golden.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_golden_powered.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_golden_powered.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_normal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/rail_normal_turned.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sand.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_carved.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_carved_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_carved_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_normal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_smooth.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/red_sandstone_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_block.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_block.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_dust_cross.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_dust_dot.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_dust_line.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_dust_line0.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_dust_line1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_lamp_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_lamp_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_lamp_on.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_ore.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_ore.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_torch_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_torch_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/redstone_torch_on.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/reeds.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/repeater_off.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/repeater_on.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sand.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_carved.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_carved_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_carved_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_normal.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_smooth.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sandstone_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sea_lantern.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/slime.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/snow.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/soul_sand.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sponge.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sponge_wet.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_andesite.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_andesite_smooth.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_diorite.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_diorite_smooth.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_granite.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_granite_smooth.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_slab_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stone_slab_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_carved.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_cracked.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_cracked_1.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_cracked_2.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/stonebrick_mossy.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sunflower_head.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/sunflower_stem.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/tallgrass.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/tnt_bottom.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/tnt_side.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/tnt_top.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/trapdoor.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/trip_wire.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/trip_wire_source.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/vine.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/water_flow.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/water_flow.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/water_static.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/water_still.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/water_still.png.mcmeta (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/waterlily.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/web.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_black.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_brown.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_cyan.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_gray.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_green.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_light_blue.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_lime.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_magenta.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_orange.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_pink.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_purple.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_red.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_silver.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_white.png (100%) rename {resources => samples/resources}/testDataLoxelEngine/data/blocks/wool_colored_yellow.png (100%) delete mode 100644 src/objConverter/ModelData.java delete mode 100644 src/objConverter/OBJFileLoader.java delete mode 100644 src/objConverter/Vertex.java delete mode 100644 src/org/atriasoft/ege/resource/ResourceListTexturedMesh.java delete mode 100644 src/org/atriasoft/ege/resource/ResourceMesh.java__ delete mode 100644 src/org/atriasoft/ege/resource/ResourceStaticColoredMesh.java delete mode 100644 src/org/atriasoft/ege/resource/ResourceStaticMesh.java delete mode 100644 src/org/atriasoft/ege/resource/ResourceStaticMeshObj.java delete mode 100644 src/org/atriasoft/ege/resource/ResourceStaticTexturedMesh.java diff --git a/.classpath b/.classpath index 4bffa9f..f389a7b 100644 --- a/.classpath +++ b/.classpath @@ -22,17 +22,7 @@ - - - - - - - - - - - + @@ -42,7 +32,22 @@ - + + + + + + + + + + + + + + + + diff --git a/blender/io_scene_emf/__init__.py b/blender/io_scene_emf/__init__.py new file mode 100644 index 0000000..c343177 --- /dev/null +++ b/blender/io_scene_emf/__init__.py @@ -0,0 +1,164 @@ +# add this folder in ~/.config/blender/2.66/scripts/addons + + +bl_info = { + "name": "EGE Mesh file format emf", + "author": "Edouard DUPIN", + "blender": (2, 80, 0), + "location": "File > Import-Export", + "description": "Import-Export emf, Import EMF mesh, UV's, materials and textures", + "category": "Import-Export"} + +if "bpy" in locals(): + import imp + if "import_emf" in locals(): + imp.reload(import_emf) + if "export_emf" in locals(): + imp.reload(export_emf) + + +import bpy +from bpy.props import ( + BoolProperty, + FloatProperty, + StringProperty, + EnumProperty, + ) +from bpy_extras.io_utils import ( + ImportHelper, + ExportHelper, + orientation_helper, + path_reference_mode, + axis_conversion, + ) + + +class ImportEMF(bpy.types.Operator, ImportHelper): + """Load a Wavefront EMF File""" + bl_idname = "import_scene.emf" + bl_label = "Import EMF" + bl_options = {'PRESET', 'UNDO'} + + filename_ext = ".emf" + filter_glob = StringProperty( + default="*.emf", + options={'HIDDEN'}, + ) + + def execute(self, context): + # print("Selected: " + context.active_object.name) + from . import import_obj + + keywords = self.as_keywords(ignore=("filter_glob", + "split_mode", + )) + + return import_obj.load(self, context, **keywords) + + def draw(self, context): + layout = self.layout + + row = layout.row(align=True) + + row = layout.split(percentage=0.67) + row.prop(self, "global_clamp_size") + + layout.prop(self, "use_image_search") + + +#@orientation_helper(axis_forward='-Z', axis_up='Y') +class ExportEMF(bpy.types.Operator, ExportHelper): + """Save a Wavefront EMF File""" + + bl_idname = "export_scene.emf" + bl_label = 'Export EMF' + bl_options = {'PRESET'} + + filename_ext = ".emf" + filter_glob = StringProperty( + default="*.emf", + options={'HIDDEN'}, + ) + + # context group + use_selection = BoolProperty( + name="Selection Only", + description="Export selected objects only", + default=True, + ) + # generate binary file + use_binary = BoolProperty( + name="Binary", + description="Export the file in binary mode", + default=False, + ) + + global_scale = FloatProperty( + name="Scale", + description="Scale all data", + min=0.01, max=1000.0, + soft_min=0.01, + soft_max=1000.0, + default=1.0, + ) + + collision_object_name = StringProperty( + name="Collision root name (strat with)", + description="The top-level name that will contain the physics shapes", + default="phys" + ) + + path_mode = path_reference_mode + + check_extension = True + + def execute(self, context): + from . import export_emf + + from mathutils import Matrix + keywords = self.as_keywords(ignore=("global_scale", + "check_existing", + "filter_glob", + )) + + global_matrix = Matrix() + + global_matrix[0][0] = \ + global_matrix[1][1] = \ + global_matrix[2][2] = self.global_scale + + return export_emf.save(self, context, **keywords) + + +def menu_func_import(self, context): + self.layout.operator(ImportEMF.bl_idname, text="Ewol mesh file (.emf)") + + +def menu_func_export(self, context): + self.layout.operator(ExportEMF.bl_idname, text="Ewol mesh File (.emf)") + + +classes = ( + ImportEMF, + ExportEMF, +) + + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + + bpy.types.TOPBAR_MT_file_import.append(menu_func_import) + bpy.types.TOPBAR_MT_file_export.append(menu_func_export) + + +def unregister(): + bpy.types.TOPBAR_MT_file_import.remove(menu_func_import) + bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) + + for cls in classes: + bpy.utils.unregister_class(cls) + + +if __name__ == "__main__": + register() diff --git a/blender/io_scene_emf/__pycache__/__init__.cpython-37.pyc b/blender/io_scene_emf/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f83bf9bc035eb5d2dc7fed867148ca7ef38eebe4 GIT binary patch literal 3880 zcmbtX&2Jn@74NU<>1of5?buG@B&?bUb~7lk!}75Kg^kI^`G90%#SW2LS~cyd8c#dj z)03*6#2#!3DdE5&?13X3vf2|D{vA-=5aJLHh%+aCuX;Y>WjP>v)UWH~Rn@Ea@q2G> zHX6QxC*Jz=r=QIm#$Ty3d8%k^;FbRXVFojq#cbxV3Uhz&h6by0^QH0B75ACPYN-`k z%pZ?jiql@FwCPr7-DYo>=2v4(R zwu0{&zRXv;R(O`3W@pe}WoOwczUTOPcJ8Sq{?1ol8aTbSZM4ph&Tih>3?6XV3%W_l zgKjRexCnUG9W^#tK8ytmZav<**KXNwE$HX%77@J0X!$lR_&B(i4RTRj**u`nXyZhe zHo83K2sR(w4l7VMElm@)Ip&1aXwlwWQQ;IjVj$ z&(kfD54b1}RpWM=$HlbU+%81Y-<$U9oBd%n>9s1VUW$5`r&zA)r3%KqQ@KcZzt9p! zy^>>T5Es2j@Gcj;-{Db~Gp^?2gG5H1y#JgFiR*MoyOYO3V*{_e3BrxgWCk423~gqG z4zt4wIcm>>leuA)d#uX5p2=#jt+2*?HV3o&tj-$v&aoy8KCfz}%rM4i^?n|+AP%0y z&v{qm{X(0F%sN^aD@=BHpRbWS_~klcQSR2G&F#${sD(LM~Sb_YoWb`Ine=x)cSoyEJ>%BbV>pjjzzP<+DZnC#NcE|M( z*REY%FWpeC$BgBDxt`>aRv`J>dK4vnh!w334po&O@XoN{SFx>hK@6*I)t%Ae)HrKn zjuT2F#c8Ge5Dh5GIJTf7lhij>*GzTx8>o&|J|~p|rqFh&%?zlq+TMX?Dsc+k>^=LD z|EDhof4k8#LmzGogBS504;M+7aT;~fI2%MV8F95Rlsrl@%tn&OqSJ%o+%!JShlR35 z{z6r>=9M!*JhdG04M-`zN#rt-D?~_bnI?#(-Kr}u ziUD$@*4PcSO}flf2?I2wh7qgLtN+f1c%-7Jk0%`I@7H$>~!=YXh(RCCFEYaL+^l zS9Acotcn2kD1f=obP%)pYdf4nuR%FM_v*YsnShXAzd-)i)vyTw0OkYlX~jHW2p8F0 zc#5sEa{z!Pb{?j`plT&dX#m(pAbi@BC%->c$>6g8@FzE=b_TmATp+o&?h!YS@L;UCHyo-xelcZK=AKMxub$x=M zcaH3r#&HE;P;rc-3bR)YW?#oPXq#x8*Qr%StBRJj?~d`*(Rk{$#RZ(xGDRI9oh%75 zAH>Le2Q6FG#~>g{#j4rq@y^qTBVQFri#lGgG@zv#maF3H)TX^u4e7l%ERs};8#H*4 z$Og?g5?2xxaNAF7#ibKu>-_-Ck}N8Qh-W&X_W!20A5sF=Y4CmSh@-vbb_Ak z*0T6ExWtDa*fCg0vhP527z7atgw9OQ@8Xx(IoZ_kZ`3lagC^S zXN^#Tz(Lh?vM*EoL~#Z0lOL5JGlRkzzWe|yZ{wBML4Yqn76+g>#utZB#xgzo^)?4rjhcY8j{W6v- zj|!%^$c4r`txrThA!7;nv%6`SU&wfW7A_PTsZoI)T^N9QV(jWj@4r9dv9t-28}+u_@t~t=<52$;vtR@TOi66Jj+oC zlTV08L`Z0HpU49c)FAzdsHI*2K-)C?r3?8pzTaVbe5Iz@w0u)Mp`B1pWPs%;LQce= z3RGv^9OVrDRHRbba8nY7%0n?n`)iES_Nn22#Tu13QV>#NmR*2BmmG|&OG--F$8kk+4tf1vC@oaWm-O@qkT`!BGk1ODnS3ydc h(2#*^d$6ef*`9gUy-+)S@$?PP@hX<-IvzddzX8kM&{O~b literal 0 HcmV?d00001 diff --git a/blender/io_scene_emf/__pycache__/__init__.cpython-39.pyc b/blender/io_scene_emf/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7afe8bcd546364bf4f174b89169b02ec8ce61765 GIT binary patch literal 3921 zcmb_f&2Jn@74NU<>1of5?buG@BtY|>SrQu}V0R&#n5-us(#A2d!=gq})1IpFw9`F3 zsp?7W!IqE`4jjTB_6Ucp;F1gf4ybMjaR>**IT8`SS3UkpcEyDm^_y2!ud3gB_1^Ej zi5m^yz$ae)>-|qA4dd@LIQpq#u!Kkc3xpZWWEQiT!z#@EgBu#G%FQRnBSU<|JXTAs z&|?00<~?pbx4H9~X&P)|UrNta^c=~%p^JU>w3>OLm({{r=7)YZ5l&!_#~NupYlMxg z88)-Ya59?;r?TmA+B9w$tjQ*y8f=ogTPL<=c;kr^&SG|oO=EU?Jln+V96P~go*Lmv zHp}Mldy3EUxvmwSW+&MxjOW>DHjm#k{46{3z!LxD^G^)Cy|!kw&W=vEZ?uEkT=s%) zlJcONi!3ezo^?l!Hp_>xV8Qae)mtkq`=tf{yj&%M#~96CrwvzvTiGBN#l`kE{fw55 z4e6i@V~L=B`+AV!O&5ZDKl`@45a2~zBylQ(xX*%uZx=(s<*0G&gqEwEew=aT#>1kQ z3sv1nd7p8iyfp8`MUwZ`1mm(Jl7Sw0nB<$e*irVzU`NhzkjGI^^A>9|waaJn|X{H$syc2tqTo znH4(B4l5L_Jqv;6hE?vdD)V|Kt39*A8uQr%uHI*L*1+!sYvR%;Rjt$;7c!dvD34hX z2Or0ecvs~8LSGYI?PzN3G}+;OzCa=2m-|RWxvO{EYwdOA+*?_`^U9(1SCx0@N4Ym| zEiboMURbKicsCxVg{tQIc4UWwX#Yco(eoi5c>#oSFEuiA&oYf&V@v1ZGjq@0wYKbC zW7q6jiLq<{$^4xOGb$@DP3&oz2e+GVY_%*kfj~xJMVo29p?o<=lR`WCg{jCg~5)h@@?K37W}(7R=OaD zRk!NSX!_ui7RC}^?7Sag7aV5nS#Xs}ZXCPq(1rGMxR6yoBi919z`MjV1Fo#Dtiz3! zIE8;UAAaEf<&T4ZTy2@5kFdt&7x5-n)8x-MjXG(Z4I-J0xSASD9wix8BgtdY>A`t! z8t>%8LfImJtSZ|3${8TPT8=mmEk%pS_lR5~Le4A+1%Psxh#!+RQiHbXk}u4&47Awv`?KcX8Rro`8y=;1I<$1Bw+VtEJCwT(1Nm_`y0Y#MLyRQce>fvM_* ze|i^PItqm$zDndGkslB_R8@1NuQ&vA)5}nYKqZFOWWk`fBa@B{WG^0Y89FpRmf{2k2l&V^IEs(dqoh`5@7WqF zb-#k7cXsV3#$E+rP;rdi3bW@8W?#lJ;7#!6W#X#fs^F|G_W)O&F|K+m;wyMp%M^9| z=mH9GaBs(`h1)G#)yF^}$G95kh@*xTD3xW-e4RFGaIT7P5>F?o8VY`ISR|o~8Qrf>Sz zXu1p=gy=q!uC!*w4wbO*a8$>ECx=!TS_bCD?o(&RoIH>v$v);0zGP0XQDuj7xZf z?| zr}m7(+|u=z{vtedFmkpk&)uR*V?FXPs_8!vsLe0Tm6nfYB#ouyQczV?6`e$?DflL` z4y}$}Rh41~IHKm(@2psTs^9e-C}Hc&uhB|%{>gLEfH%txaDh` z#mC^q&q0(cc$TAArhpJ35mH;M6S)V1wxqwWZ0Q;C3tD@_ApcP6_gEgA)PzZ%DSk=k zpufm~)lr1N#Eo>#rTxqmTJtm9yJ# literal 0 HcmV?d00001 diff --git a/blender/io_scene_emf/__pycache__/export_emf.cpython-37.pyc b/blender/io_scene_emf/__pycache__/export_emf.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f34a9e737ca8a8bde2b95a462fdc3124e1239e0f GIT binary patch literal 12698 zcmbtaYiu0Xb)MJG&MtSC%O%B!L`f@36t%KM%CeHUg8a~fvSeG7A~BXdwX#|6oh5g* z++E%o%G7pNDN3brTf1Ofw@8DarGmgs4b(qUAb%S4SI`DQQ4~Q@po9KM+9H5mAV|}q z2#f;hch1Z%A8`@{U2F(jVF;%^*?Igajx*pYs zW0-YixzFxXca9eWd_~0T#&XI|?W#-LX<>;3#?6SN=)<>Pq(mCutjLIddyg_^0D-;JJv$oyKcX>8NW*Jf)`Av`fmJ(T?V8HQiV4YBJ-i zn})AFQdMOob6fEVqB>WI1^Pnkeqe}_R|?|Ig_=|L+`w#=q|@*Mv(#!i4N=eo9aVu< zUaHmwY67jf@aKx`!;l|7KeNc1s%gsimx;V2?M>j{#oSuI2)Qnq})t2YZ zl!RzD+?i^#=$4&^Q*@RqGtOG8DLqO~1C72#$GaGfk)}y8->8O~QImKil@-)LJ&uoyoH1stSB&ng`?|Bn+zZAo6aw`%!eV7N78#P;`anz48(^ zJKBsXn;Eg^Q3Sz{d72nrSMTb;?%f_WN6sl;zZmthzQ%CIMiiv6W}MqQg0D(DXkat< zNCAX>5riLO?5LDiW&B*&Y7kgkzU2*x{oGQM!`>d>;x-4k4c4D2Zi3#l7V#lP9Aw(( zQLl?UW_IYVvZ2Wr#UaY0RP*(UhP^v6CyC)8!J2EfQC?ke0{udBt({sb)hj2RH4h@p zwRN|(WSh5IOOA9PG)khn>Y{bC;RMD-ycYoizwbR0C6s3a!>zU*TQA?Q2iC>=^(u)n zWJ@hOezDYYSL=>#0>C|I%}xRYzE@W3bx2K;4ep1kU(nwt@gom+UqOubZhI`h?dL9) zT29`(-*V38r`mg_@)g-!&O3Ey8Hnc_rDf;r)Q9R+L6;1y_X^CWtS(j?*tR@CuY%iQ zj!h3cG@8yUn9g#^br*kQ=)LE@-+uT^VK^`db`YyKUvp$&z66oql!0DaaODv~c&9iD zlCD>hp8HzWTaqMig1FZ#E<5g0VBK@1S1mg(%fLV@H!-;DLD~ngmIN&V9l0R2TteAe z@wKL`iy(vEo-8%oddY(f3DU@KiIgDu$)0$TBvT3rY0;nnQf*vcsNEtN2yznbXq0Bl zl?B3@P{&k(mn3O#8!Mp0ZUHuc1E$zoy6;xYZjoU;jkfMQUJ8yG1INr!J&CuWW;J>b z^Ltdy^}Z>TQl7pR{!;1@HHX6~rB7%>+zx3qj}l9h=K!}%rx5+;(6PO#BX5i-bdaxoE$okWU+$Qm zA!3jVG3_dDL>&SE84IUwp;nuZNRt<1q=H%Jr^=E zZQ2jjL_2XKT!^#D_CR-AMBM+>RNI>3t&yLSlV~3p*Jf{B31YL?Zp^>ZKIBN*l=)^Q zAMPRHcwl01Q`lvCdOA>(Z7Y$Obk9z@$wD&Fp^&ip5X8WHi(sACWEIEQX}}Ko=LsH# zb|bG^5JUB{Tj;}XW34DKD%H9p>GVZWrQ$lCohD{)EEc1zUaeLG(_LKvpUPh&$aF#m z>Rsl@-MqMmF({Us^?KC>?jb+Eh8`~QvH}hyjwEi%;4crZOsX3375+4J7+fb`K)W61 zKk*v#*EkYB=ziCdDN-MChJd$({s@wjSHqYKj5)}^57m627IECirPHdH%Fw7nf)Klg zIJ5TCM?wSGF1JeF@1x2!@lt?_p~)La_0Z6f>7j7}838@M4$TxSLPtMz(oGy`#K1VB z^%}HNXsOWY-_%f|ZJJS?wi$ne&maz&@bPHAxTVNTaH=Nh(1WC?NCg~6e zb|01ntGo&k$1!%4omLP{m zzKndCDS!mY8=@8y{yoeeGuB{Rs2!7!OKdGaE)U>%);m@M8%~gNV|h6IHcc;HvuaRF zI*Bk(Iy!Hsq%ep^UY{S^Og(~_==Ax0wX}!{^C33%o2c8+*PiyF2yEzg&b+F3Qk`^% z^!%i-{M2wr;WQ5TxBYZ2gAK3AcSREE{!wh?eM+alkwGpiQpl%=kmtS`zd!8zAk6op z&46#=V8-9)v@s=uOyguxm%}sok+lP;8N#z?cda+dat*)wr_JBTny0%6=lC~pmzTwQbcL|13ttd!FZrG4546! z(y|3*IJ=>)9rq3Z_k$$rH`F_OI|KdzAfE9DYWeQBc1Rq=%%alTL?`FxqTFG8|H#kK zCg;>Z?TE&)?`NuYNX%M!x6XF;~rW`>p^lB%fTEa`06I^?oYY!v;G-?S?jnmZgF|Ip_ zan5kt6HsEcl{2@MwHtnRbDEEwOE_`{JGqGNxmscy<#XF8f6^cHW=NHVjXq7BO9vCJ z#D>1|X&g+g=wO=Jk}emU^`b3LF&0e;XH)k)uID2va z>h(F>4C|wBDf+tMch0qAR4>Bpyqvc!%3oMrZiT5!RX0jWr&5o4JMB0$2^#YKpW;_I z6#xrwY1OONUHJ+Y4%!6iwssmzRfY0ShdNYht?32^j?1MWE~=8wPf3TPq|-65NS&Zc zNykQDKnZ}uY$ekuZZ36wwy8!F-fWc*&vy%f_k&%*aN-%Qb~%2%G-vYlN^(e5vG?JWt9`^E6BK)>6q%6Ie#6PD3W) zK`O%Bk|j5=;N4-m1R0uJ5mbcT)hIhbyk1?9C3!!vqyxLbbp%v@^jejGRd2%U6pym< z5|33~ECR5vd63?7tqj7Fn<*>9XshZS7q5j3u#-zaXn7;cRLkB z4zg2J04^=Et*0YpTckP_tILaa%wq~9n8buN3@4CKlJY6<&}*0Sm*@$mKS8bg9$pIc zQj=^T%~G>SCt(p~^&vf@ny{6!8tJT>I<6kTUkY|n24!R|;ZIA!#u{dQ7CNnF0*;9~ zt@mf4uc4FnYrv)&huTH;N$yKZ7>&8}Zy0%chPXV#O4@dK^0$ET4yoPqlue+o8sz_hIJ}@wMX56b+!YF}9dhQTud(h@dciz((0Q@W*pJ{)9jCCF@N2v|f{jxV)%hpCVNBuNm zMp)Lyx-dIAL>v%#@N*1p5L%(?{=HB@4`@aLBOo=%_hW)MzWXv$Ge^K0M=i_IC~tJwgh@zBvev9bbFf&%$l-2KXf3*}q7A z4*3WD{cx*#Sf6|iu1eHbP=BB^;rII!V@mBnXRmkA-;3Gp180r<`^J>cVQ|*zkfSid z___*6hp7%4EX{78k5$-iF-1IgXfy90jCem9PG8XQJ(pY(s&v2aY8 zJjSR$6|Iu7q7h}#Gryy!EcejK#l}+H%BXeh*q`nZC~G<@=w5uKk1*`h`B!z z6W9mbmw3H1?I%z_EtE$ZN|hxIRE^1C2fR1L;m%AWD~@najKe)=L|^CB+NrR=KLdB% zP8k2-pW+ocB_{n-7-?oBw(=EFblRW6I!)u73ujuf&wXgb*gKI8h9ZpBP_ZYb5m=8Cl&_@+N zM*9mCK0OAvAeY3ud<6=k1qI`HN0=*5f_LV9s%P%OiaoJ*iQ%9772rRy3+fj^1q)p9 z___*8SdG_#d0d`Y`%Q*?W*g+f4$ODs*|i_dl^+Ao3%l?<&CrhjTxcOyT^R9|XCrPu z&T}_b-rK?bMkpQ0^$Tjps9nJb+$ zkRFfuXK)UmAQ`~t8*-Z`A1RyD9(WZ!zl$~}s7+W8%lV8?dH{H8-GI#;U-@oiFQ1%i z=Z^3Cg%ONhg_I3r6y#=aAFjIjM$^le^5kR-eYGd^)kSE}@S<}5sdoNwzFcZ>yD&I> zc4E?i=rv!^ zR*YNQ^gr@5PM?As8PTIPxE`TERfiBG+B5(ZuiJbsp%C40^M_K0XY z;f}-t7jPO(#5!;^Y&eoj^5kO(YUM644^`n2GEi=GviXD-lDnqwZ(76Z37L-Kz$%d&R0) z1D9BcND!*gbqVGXV&dM6f^waHp8SOi?4k=Pd^qGXQw9JDI{U4<*SG( zQM@xx@yZkYEQx1yts^f}MiruUrg$3a&g)kovav1Fq+k5bVOdNg@Ra)YMD&;Zcz@ zoOc?la5Q1F1y-wBzrTn(H$lu1iwM&a?E{m9FEahyy1Oe~4&ulv3gs!PN!6Rp7VT9E z@CMrIJxO+>jMIzug(NFBFheW@eYx5Q_YCjZ^=3GytsA}Hw8$NU4sWE9i?xvtg~a( z;_>iv+D493IZpFH5 z$LmoW1Npn$apZTgAq9otu5gW}HXhaM|J~%jzBI#_$Dnu4gmqud& zOKwxRpm2Q*DY%?y3Rs5a7I_2%wQB2?;yw8X02^rFm8(dwD1~gJ$eMhMUbJz8fuIG!9BkjFD6GaJ6;QLs|wi3UgukQDBv{2wU{UID{utLzRC))Hcq4 zYX17=UI;UdGTPcCyWF=xc_@Q8&LdSY4BVO?96Pu~2vwbqd;upyz z`}_o{pDP|54jGuen)KGbj$286tlGZQNdeQ8H{hpg>^2eU5e4Z?>YtUU$rs@Azzf zQike*F^%0PNi_|ORj=|SAO8g{u;8?A3Y`8y9FcO|Wpdgn06BJR{w7ZPLbAQ@aQ;Gg zTQh$TK@J+=G9nWMIVnkPm(SqUPVo^K9hdERcsb)K+YHacc0ViZxHbyEejfKP+IzNP zN+%uQO`on5#`(ky3@Vakf-VSU%f%rz8JOTvT%5>fHI8uW*_CGXfZ+xjt_9VSRcbA3nh7?2-@gvT^Yi za<$s91FCFU5HLaHK>9HwmFrAS}4k z;0VkjpO34w{G`At79AZX$5rsg@na#E#J3ywkbj3(^W``-#*et|#x!rKn}9@IC9 z{z83|RzO>#o8kH#E*E|qZFWs3ur6PnyL#)&>?N2*1ilatEbLgQn@uVImO51M3c?5> z(~|D^v4OWxZBY1c4?=L!g{P3lAtgH0ch{5+w{*|>Q<`uFwTiVhHA|P@MG3A(QYh*& z$A$}V=pi#7=C}glhGopxQ67d~OGpKSTLH`IZoD#-0JLPGQkp=UX}(@a_a_m;HF4K# z6+t;tn`M^3m@bEa`SK&*jN}W8e0wZZS#MBNx+%n>h85;eiKY{n*@jZu2@BaWeqvtFD literal 0 HcmV?d00001 diff --git a/blender/io_scene_emf/__pycache__/export_emf.cpython-39.pyc b/blender/io_scene_emf/__pycache__/export_emf.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd0b897870c49161b2b18d0c182a91a68cae84a0 GIT binary patch literal 12637 zcmb7KU2t2+b-sVNxBvkV1S$TAlmtM4T2W(T{jQq{RT@ zjL3*V#Dii;>_9vuhQ$ct9b#0BAs!Yx#W>;-F(Gy#9u?CfEB4-1^J8LC>_f>;aZpT& z11K36>QyC|dztgEdRfy`|2%Uz3r>* zw=mEu&oKxHAwS+|xrJtK3N7#+=xdFbcqB63o>r`FGLt%=&ZA_{hAxSm>#3@K=1 zahpkQ6GNNtig>RLwKPW*(bsLseWN15`Q%BZ{%_nbg?|4f`aeRyZ*jl$ef6FyXT-oq z=y{8KX1M1!#31!tkAr3=)>IcmCl$}E_F-f1??fpdQN}=DH{nIA$u$*o*)gI#s^|*M zdgU6m7*p0$V#ob%?})33;WhP!4$QvMqvXg*#qAfPZralr%Gij4G}eoAJ4X| zGxrrh7!M)*2SyG{c||6GALR#uvE^Crkl4j7HJNdDcow(W&26yuXbJj*))YsF6tRct zo<+SbvY6N28_GRRo)>#5k5bLk%Nn?Na$XX{L2@;2<&9En!S?mjja%)+Qn6M(V&8Hh zx}3c3G?((`)#j2dZ3v5^sI(lkZq#kxID>EzAn^OAC&PsDly5kdww>2Yw`;z2=60<@ zA`IDLGao%uY&xx)oi_ns)xMRF0|espty&GzlH`H&uIlCVw@Kv4>2Bahc>lJ?vYUR+ zQn6`g-P=w3M0UEpV>(-wjpeLevzLK*wq9JePfWk7PUm#VzA7gFAjG$m-^>&W?uc_UP53GFc4e{d)QT=-h@V7$L!|ieU+IY#NiroDlO#z9NTq&hp?a0%AjnCyqfr`7 zM;;-p33W^rcuA6dd1D21*e<{ZaIh4bOShd$$tf_5C(zb;9)W`6#lZ1$K#!}|`ydjwAWY8 zhU4iYiU&BNFBsRe)?@b-jJq5CVx4%{D&fVvcv%}(f>tZvT{%m$$tC9l7N+g`t{Q8{ zE(c3+BHkY8ZitZYAD?bp)4VCN(=vzlzHxEx>Ulphck%MI7utJmDH}4|C})G+BWxG! z3qA_E%*@RAYP@a5VpGnEDJPzb`#Mw*Rv7#UxNZ?lb5mAufYGrXaL%JV3hhH)EkAohU~I(!WpDHw&0erTiXIMRrPaYXA?=%dh2q0hgj zp+s9Z!#Zs}dS4;k8%(4JOax3LWuWQgEI+cqa!9Y+H}f%)o`GD_Ar$g`SRkx-3u4BW zw87*R+wwQ-k@dd& z5DuL_udkXA5nBI2komPVLn+MMZcH0)i6<~K1t({&_wwy zE+64?5=SvH%IWi*9-}m;`aSCb^V!*}AMd3mdMSqFrJ#hQyj0a9?nOH8j#YQAkArg| z^q`vT@(k2Y+$ZIe#^3Eh5E6_#THO!|RwyZ7f&!d&cLDF+B--z(*LQXXya7PVdIQxx z-ME?+doZi8w7R#G@iJj<67lD}6m4uy4OI7uY%jeZ%976I880m+p)3tlr;vZ$qx?S3 zA3*+1&hO{^H1gl#{1oR8BL6+kAK-ir`5$tAn)8Q{e}}NGJ|qtE$nS7%F09o-rJ$DZ zq8yEVh-)X2KZIJsQ{yz%J;Zf~0XNHS4?}I$aMY#OkMJRL7KhAWClk^;Q?)ixJhO@7 zN4!CIhE!MF#b=0P=_sNVxTmk2TX~74$n1s`In$^$WKRDV+Pd_Ugkr)K%;S< zKq6@Mmg?&_?Az_+MG{;U)X_nfkACXZm9rPFURr$Pcj@;JPc9xgGx6^~{rHI|SqWS$ z@bCR6+p*ZZlbxFRcsbr4j6GB2%Y8bFAn zwo zTs-yk+_`-G%G|kU=gwTaaA`ho2K8ZF3}YvV=be0n>P3*fCa>i!%Aam6H-psKiW8=! zU9N?_?RFG;0}c81`}pN%ePH1(wcJY0kuPH5pgXV*t2G?oz&W_&M@2=_!6@mplXUy` zEz%aKQa(*t17|!eD67R<%SJB;W{!Nn)3i%CnIxV3bh$`v6x13`J3r9NFBPSz+m7Q$ z!5$S{3}9KRl*=v0ErTbJ?I*iMP${6wXL`Linrw^^w23YioucbXS>|~aYt5x% zK1pC1r5X(xhe@b_dz36Xz6Em)6T(l?+zKEYE>!iB?MG{s1zD80eM{Q75IDAgPLEzK z30SoT%t+BNE6?*-mE|JTupKlOEehjP2xpK_bc=5mWfPZ$5KyVnkiyCLcWb-E$aD(= zC^YeWx?9$x9nXu#3Z^;KZ4lf;TChTuZs$|o(t1NK7i&R2NE4nLnAyt}S6<+?g~}vz zLv*`?Axl1kGFhjJ7}IFEA#51S8lWO{M&H7I$2?0e^OCHhVLrwTRls!eai`IeB^xbd z-V(Osa;m@EsSt2bK0yUw%K~5GbfoeY=|hFe@?t*XG6iBxV#eB71_|Y72{W65ZCYKd zCyBm}TIbsc6eymiVL`=&0*XscT2JdK)x`BDt)-xXYU+f#8-EF0by6s^kiwsqz{P18 zdJ+F=riwq*X}v$=T_c)O4V_e5LrVjS#VySD4b6Jb(5?S9BBWhe=(Y847>G{?EXH61T8%&=FY!H2?5xPR4CnnrAG_yh(hn+rrC+$Goh+P5nG63WIPrI zZj4nRi#`IkOeza+mM|y_+#;(QLxh6cJ$UKJMR`QNN@3L$(N#sh8p5#FpzKo%n5yHb zH~CKbC%}wyAPiKz1YZoIWo?lZ<2Y0%^ZNIo4)k>r?S$92Zs9VK{FG83HWW8@`)4XH z3k0*1d_k#eM-`}>bOU;4N;A~oUcC~S|6NvlNwtH@PD=8Q&H&)2Vbx4}19Thb(K3{} zr#ipw4p-CFk@Zn8Nth9q)v+$jP6n<7xD>n$LmPw&s5(Co3Mi3rcM6Pv)F9*gGcR2o ze_1W7qF~&M?9> z;t_Ay8)0Si33sOln_*|P4p&ByMmQ3zc4rhyuOWuL(VqHlh!HpW3h)d{USWGdXN=p8 zdSlgz?o2}^O9z^4;l8a9bn zz#rMpu0`sx*W2Umf>m?S%T{57L~R+hyE~I!zc)FiRCjlFx_i8xnAJG=X~G*HQ#$*= zPsamJ0`!SB6>#=Z9n@5s+NH8Q(O6OD6oFeyR-k!&O76GChqLI zv-{58JNq`~Shv9IfX_S#9w83ItiJ=5xDVn0Uv)3?-x9kzQ@BFx?uHCuk2e*}y}Q?V z?q3e(j@jKu4Q@eW{aW9}p&MYAyRF}k{@;E-+L$Z&)NtBD=^W&;Y=C>nD_FIA+V#KKz`c`m_hUSo zA#?DkvZi$o5e)f*S5$8oX7Z5tQ1t+yQQ6PDgB%WehsG4|AUrx+=P+ak=LN0-ox|Q? zZwOp$$p5MT+&j$lr7KiK?njPTQNs7yCN1^|aW}JuwdVoE3eYqd{+P7FM;b5dO?N%Ik1c zOnFB!&g{L&%ICZpZx(AagE$k+vaEwIk9fL=>k?)c^JYT+Jm4Ln`GvGS+!=aVfn=D5 zEU|bWfTAo>j)8Wj{H~Wn_@Z|Vd~yyea6H_h2f-%?J=htAKB{;T+DD-6@iEx;xFp); zB+w2m$cM(fZ>|j0FMCwW{DPHwm|>s%2(TaC2C)erLee|7rh)=i{nr`e_ZaFUo1o^l zV7wi_?p4rS`P=#v55Vuxhe8Ul>GqGVq?v;c@obHidz*ON2;?1EYC+qmtb=a*k&Apl z&TG{iopxyRI?P>%_#AqOuC7>x^PNW^7asB+!FhU^b~m3^$gSf#yguWCBhl{-v^h*| zf_it>d&Hyj9K5q;;L00ad4n&!N9Nm^L)(6VyJ1@)Wdnx-8SL8oDo(cEaI?iMS;GSJ z>XB?^5gIWJpPYZZo!yr$73`s_IlBQDHpxr#bM2W2;C3imk~Vw>7`#%4PXc$30u7XH)cFR!Mg1c^ zhx8x5uaiGu5enD!G}ahiNaz&MP`;wA7*{vxb7T~pIST79+&#BoCxlMDUD=DDq{|%H zK%ck-ZA+E_xV<}6p+Tk1xA|_vEoc!n2sK7)XBVvu*+pdrmQW}yLJ1M0cJdm6oF>0Q z=^_PN^>_JODEo95l`TV|P$30)5TCOjL7;F};WNNl0L60*K10&}!g8He;Lyk#Xq|?i z!u5iU5V&kIRd8!u;@gBDr|Xil+-SH);Z>oh2Hior zpw(Xv)$T$C4n%ei+L0-zFy*wZi(m{g;k1*n=ix82Z=IMD@mQ?gPez&zdy6N}qHDW9 z_T2MFaNTTz&reXZc(0k)9uW;Y*p(oD77Z_+x_tS<{L^`pJaM?^{U(7Jh|Tj2_TZG0 z3&*lz=fKX$w4;D|lf#c^RA#(yF_aWqXbsP=1U}2W8Ni-2nLnjCiF&U@dUu9D3#ZHg*GE z(iGvP!mNpiehf9W;%(SUn)g&u+@C4*{I!K#Pb+GVv9w1R!NBYCW&BV(%ibc zCmr^?$Q2aIN2n%IYc!g)Q^_amYpqpD_drSJ%7B4irB-HurLQkn>cN&F>wvGrH7Z|6 z3Qwd+G_!2=(?OcVUZGU8i!yMf?U?)Y9Y__ehQ;pGzLjIx>sMU*!z-YOVTKm(uw(!(k~_Xcj9V{T~rBe@v}6q#W5) zoO~S4eUf7rVOvRt>8mX1@)2rrEQpTh6O9G#!M?!2)%O+wjI>r^6Uav~I@x>j(Q=49 z;lntXnridEdZ;`6Qc+FE{~8^7nbfdgB=y z5d)ER4JM&bHs>Q{A`7TXqp=N$ETAwh;iVT+FecFyunfyhvi13DC9jtYtMc~%*4Mx* z7m;9D3hDL-lzxK(+O~dtLzri{R-J$LQWxh=j&S`QLnXYe^+!a6`b#L*rq zhk@7CbYZf=+dnAkbo>jLZ#q#I4{!vY4hR@$UNh*q&ble!lZ1hUQZW}E%4&>z#*u~> z@_x^}L#81&xklz2Qe1z`UP`=(gvaro+YdF%^7_0OsiP|r=7bb3xSEuBQq;$a?l(FK zV3}|SyhN2vA|eU1Qlgp)%}PiytbYt);dueWdXw4^ESPEzQeS##v_2&8K#NL#8BBN} z6Tm7_9fswN@OtyZT8sVwiM`6 z7NK&RP#N6nmw>Qr-p(a?3`u5PK8O5tcye7nb?toN;-#~5ekLqAePRC8l^3{7eiQ8> zGBMX<`97>q&!xl17@c793)BQJWg%TF^?Vd>KMD;z{@AK?b|obB-vbrXp>tY^LIy#? zr6Fl14MQ`>NcxabJ3&$mDM&{c#V3r6wm*`ISb9Q}-$%a>-|&PCJ@&<;3iZAUwanzF z1~7Mf(M8(Sc>9U1ir02kJUJk%seG!NqgNsPpdePImprj5?5rdZf~Od8xGUAZPG8+b zO`_8$)b*qX@qn$H!dAle#-=dv5)+$(ncWOu<(ZdGe-gerD0~L_LD;#PQ}Y%GRhHm@ zT>l0e$-e^rfu2CTBVV9^lm#e@=*!*{1Da9IPjcTvsU`VgG9G;Z6xXL6ydWyMwxDI8 z*UP-bQ=|{uEJYc;3aN)1cJzKam|LhC$do=9dP{8XSBW4ZVEZ}hHc!65L zMFBTOc>G|bSQ(E1p-%*D;0zdEsGDYc;9$)qrDs^)6?SQK-e76)(I-tkrsqeOl8%}Z6 z{zIBJX|9U3d4i@Te~dD`Zv1mZ=h*F=i*R%;$Z-V(4@;ZBL?c#)Wd$jJaKkk@)AdXS zvVfK@P*P)PGs77fq` z9r-GyUZa4{VP-3)B2Q)0?3oU%B3UQF!FVysh7jipdO@`aJY1S#SQaT7qxb@~Aq+=I l8L|xP6V`|owPIG?(((6M<+DnL9UQ-iKW`o86q%{t{Xe7~)wuuw literal 0 HcmV?d00001 diff --git a/blender/io_scene_emf/export_emf.py b/blender/io_scene_emf/export_emf.py new file mode 100644 index 0000000..16eb2a9 --- /dev/null +++ b/blender/io_scene_emf/export_emf.py @@ -0,0 +1,687 @@ + +import os +import time + +import bpy +import mathutils +import bpy_extras.io_utils + +EXPORT_COLLISION_NAME = "" + +#blender myscene.blend --background --python myscript.py + +def getChildren(obj): + children = [] + for ob in bpy.data.objects: + if ob.parent == obj: + children.append(ob) + return children + + +import bpy +from bpy.props import * +import mathutils, math, struct +from mathutils import * +import os +from os import remove +import time +import bpy_extras +from bpy_extras.io_utils import ExportHelper +import time +import shutil + +""" +Usage Notes: +To create a compound physics collision shape for a mesh in blender: + +1. place the 3D cursor at the origin of the mesh object. +2. Add > Empty, name it "physics" +3. Create a physics shape with Add > Mesh > Cube, UV Sphere, Cylinder, Cone or create an arbitrary mesh for a ConvexHull shape. +4. Parent the new shape to the "physics" Empty. +5. The mesh name must start with: Box, Sphere, Cylinder, Cone, Capsule, or ConvexHull, depending on the shape you want. +6. Position and scale the shape object, but do not modify the internal vertices, unless it is a ConvexHull type. +7. Repeat step 3-6 until your shape is complete. Shapes can only be a 1-level deep hierarchy. +8. IMPORTANT: Select the empty object you named "physics" +9. Click File > Export > Physics Shapes (.yaml) +""" + +""" + use_y_up = BoolProperty(name="Convert To Y-Up", + description="Converts the values to a Y-Axis Up coordinate system", + default=True) +""" + +def out_point3( v ): + return "%g %g %g" % ( v.x, v.y, v.z ) +def out_scale3( s ): + return "%g %g %g" % ( s.x, s.y, s.z ) +def out_quaternion( q ): + return "%g %g %g %g" % ( q.x, q.y, q.z, q.w ) + + +def get_physics_shape(obj, mainObjScale): + shape = "" + props = { } + name = obj.name.lower() + scale = Vector(( abs(obj.scale.x), abs(obj.scale.y), abs(obj.scale.z) )) + + # BOX + if name.startswith('box') \ + or name.startswith('cube'): + shape = "Box" + props["half-extents"] = out_scale3( scale ) + # SPHERE + elif name.startswith('sph'): + shape = "Sphere" + props["radius"] = obj.scale.x * mainObjScale.x + # CONE + elif name.startswith('cone'): + shape = "Cone" + props["radius"] = (obj.scale.x + obj.scale.y)*0.5 + props["size"] = obj.scale.z * 2.0 + # CYLINDER + elif name.startswith('cyl'): + shape = "Cylinder" + props["radius"] = (obj.scale.x + obj.scale.y)*0.5 + props["size"] = obj.scale.z * 2.0 + # CAPSULE + elif name.startswith('cap'): + shape = "Capsule" + props["radius"] = (obj.scale.x + obj.scale.y)*0.5 + props["size"] = obj.scale.z * 2.0 + # CONVEX-HULL + elif name.startswith('convex'): + shape = "ConvexHull" + mesh = obj.to_mesh() + props["points"] = "" + for v in mesh.vertices: + props["points"] += "" + out_point3( v.co ) + "|" + props["points"] = props["points"].rstrip("|") + if scale != Vector((1,1,1)): + props["scale"] = out_scale3( scale ) + # remove mesh + + print(" shape type: '" + str(shape) + "' from element name:'" + str(obj.name) + "'") + + if obj.matrix_world.to_translation() != Vector((0,0,0)): + props["origin"] = out_point3(obj.matrix_world.to_translation()) + + qrot = obj.matrix_world.to_quaternion() + if qrot != Quaternion((1,0,0,0)): + props["rotate"] = out_quaternion(qrot) + props["mass"] = obj.scale.x * obj.scale.y * obj.scale.z * 100.0 + if props["mass"] < 0.01: + props["mass"] = 0.01 + + return (shape, props) + + +def write_collision_shape(object, file, mainObjScale, offset): + if len(getChildren(object))==0: + # no phisical shape ... + return + string_offset = "" + for iii in range(offset): + string_offset += "\t" + file.write(string_offset + 'Physics:\n') + for subObj in getChildren(object): + print(" element='" + subObj.name + "' type '" + str(subObj.type) + "'") + if subObj.type != 'MESH' \ + and subObj.type != 'EMPTY': + continue + (shape, props) = get_physics_shape(subObj, mainObjScale) + if shape=="": + print("error of shape detection type ..."); + continue + file.write(string_offset + "\t" + shape + "\n" ) + for (k,v) in props.items(): + file.write(string_offset + "\t\t%s:%s\n" % (k, v) ) + + + +def name_compat(name): + if name is None: + return 'None' + else: + return name.replace(' ', '_') + + +def mesh_triangulate(me): + import bmesh + bm = bmesh.new() + bm.from_mesh(me) + bmesh.ops.triangulate(bm, faces=bm.faces)#, use_beauty=False) + bm.to_mesh(me) + bm.free() + + +def write_mtl(scene, file, filepath, path_mode, copy_set, mtl_dict): + from mathutils import Color + world = scene.world + #if world and world.ambient_color: + # world_amb = world.ambient_color + #else: + world_amb = Color((0.0, 0.0, 0.0)) + source_dir = os.path.dirname(bpy.data.filepath) + dest_dir = os.path.dirname(filepath) + file.write('\n') + #file.write('\nMaterials:%i\n' % len(mtl_dict)) + mtl_dict_values = list(mtl_dict.values()) + mtl_dict_values.sort(key=lambda m: m[0]) + # Write material/image combinations we have used. + # Using mtl_dict.values() directly gives un-predictable order. + for mtl_mat_name, mat, face_img in mtl_dict_values: + # Get the Blender data for the material and the image. + # Having an image named None will make a bug, dont do it:) + file.write('Materials:%s\n' % mtl_mat_name) # Define a new material: matname_imgname + if mat: + # convert from blenders spec to 0 - 1000 range. + if mat.specular_shader == 'WARDISO': + tspec = (0.4 - mat.specular_slope) / 0.0004 + else: + tspec = (mat.specular_hardness - 1) * 1.9607843137254901 + file.write('\tNs %.6f\n' % tspec) + del tspec + file.write('\tKa %.6f %.6f %.6f\n' % (mat.ambient * world_amb)[:]) # Ambient, uses mirror color, + file.write('\tKd %.6f %.6f %.6f\n' % (mat.diffuse_intensity * mat.diffuse_color)[:]) # Diffuse + file.write('\tKs %.6f %.6f %.6f\n' % (mat.specular_intensity * mat.specular_color)[:]) # Specular + if hasattr(mat, "ior"): + file.write('\tNi %.6f\n' % mat.ior) # Refraction index + else: + file.write('\tNi %.6f\n' % 1.0) + file.write('\td %.6f\n' % mat.alpha) # Alpha (obj uses 'd' for dissolve) + # 0 to disable lighting, 1 for ambient & diffuse only (specular color set to black), 2 for full lighting. + if mat.use_shadeless: + file.write('\tillum 0\n') # ignore lighting + elif mat.specular_intensity == 0: + file.write('\tillum 1\n') # no specular. + else: + file.write('\tillum 2\n') # light normaly + else: + #write a dummy material here? + file.write('\tNs 0\n') + file.write('\tKa %.6f %.6f %.6f\n' % world_amb[:]) # Ambient, uses mirror color, + file.write('\tKd 0.8 0.8 0.8\n') + file.write('\tKs 0.8 0.8 0.8\n') + file.write('\td 1\n') # No alpha + file.write('\tillum 2\n') # light normaly + # Write images! + if face_img: # We have an image on the face! + filepath = face_img.filepath + if filepath: # may be '' for generated images + # write relative image path + filepath = bpy_extras.io_utils.path_reference(filepath, + source_dir, + dest_dir, + path_mode, + "", + copy_set, + face_img.library) + file.write('\tmap_Kd %s\n' % filepath) # Diffuse mapping image + del filepath + else: + # so we write the materials image. + face_img = None + if mat: # No face image. if we havea material search for MTex image. + image_map = {} + # backwards so topmost are highest priority + for mtex in reversed(mat.texture_slots): + if mtex and mtex.texture and mtex.texture.type == 'IMAGE': + image = mtex.texture.image + if image: + # texface overrides others + if( mtex.use_map_color_diffuse + and (face_img is None) + and (mtex.use_map_warp is False) + and (mtex.texture_coords != 'REFLECTION') + ): + image_map["map_Kd"] = image + if mtex.use_map_ambient: + image_map["map_Ka"] = image + # this is the Spec intensity channel but Ks stands for specular Color + if mtex.use_map_color_spec: # specular color + image_map["map_Ks"] = image + if mtex.use_map_hardness: # specular hardness/glossiness + image_map["map_Ns"] = image + if mtex.use_map_alpha: + image_map["map_d"] = image + if mtex.use_map_translucency: + image_map["map_Tr"] = image + if mtex.use_map_normal and (mtex.texture.use_normal_map is True): + image_map["map_Bump"] = image + if mtex.use_map_normal and (mtex.texture.use_normal_map is False): + image_map["map_Disp"] = image + if mtex.use_map_color_diffuse and (mtex.texture_coords == 'REFLECTION'): + image_map["map_refl"] = image + if mtex.use_map_emit: + image_map["map_Ke"] = image + for key, image in image_map.items(): + filepath = bpy_extras.io_utils.path_reference(image.filepath, + source_dir, + dest_dir, + path_mode, + "", + copy_set, + image.library) + file.write('\t%s %s\n' % (key, repr(filepath)[1:-1])) + +def veckey3d(v): + return round(v.x, 6), round(v.y, 6), round(v.z, 6) + +def veckey2d(v): + return round(v[0], 6), round(v[1], 6) + +def write_mesh(scene, file, object, mtl_dict): + print("**************** '" + str(object.name) + "' *******************") + + # Initialize totals, these are updated each object + totverts = 1 + totuvco = 1 + totno = 1 + globalNormals = {} + face_vert_index = 1 + # Used to reduce the usage of matname_texname materials, which can become annoying in case of + # repeated exports/imports, yet keeping unique mat names per keys! + # mtl_name: (material.name, image.name) + mtl_rev_dict = {} + + + if object.type != 'MESH': + print(object.name + 'is not a mesh type - ignoring type=' + object.type) + file.write('# can not export:"%s":type="%s"\n' % (object.name, str(object.type))) + return + #print("name:'%s'" % object.name) + #for plop in object.child: + # print(" child:'%s'" % plop.name) + # ignore dupli children + if object.parent and object.parent.instance_type in {'VERTS', 'FACES'}: + # XXX + print(object.name, 'is a dupli child - ignoring') + return + obs = [] + if object.instance_type != 'NONE': + # XXX + print('******************** creating instance_type on', object.name) + """ + object.dupli_list_create(scene) + obs = [(dob.object, dob.matrix) for dob in object.dupli_list] + # XXX debug print + print(object.name, 'has', len(obs), 'dupli children') + """ + else: + obs = [(object, object.matrix_world)] + for ob, ob_mat in obs: + try: + # apply the mesh modifieur at the curent object: + me = ob.to_mesh() + except RuntimeError: + me = None + if me is None: + continue + me.transform(ob_mat) + #print("ploppp:" + str(ob_mat) ) + # _must_ do this first since it re-allocs arrays + # triangulate all the mesh: + mesh_triangulate(me) + # calculated normals: + me.calc_normals() + # export UV mapping: + faceuv = len(me.uv_textures) > 0 + if faceuv: + uv_texture = me.uv_textures.active.data[:] + uv_layer = me.uv_layers.active.data[:] + me_verts = me.vertices[:] + # Make our own list so it can be sorted to reduce context switching + face_index_pairs = [(face, index) for index, face in enumerate(me.polygons)] + # faces = [ f for f in me.tessfaces ] + edges = me.edges + if not (len(face_index_pairs) + len(edges) + len(me.vertices)): # Make sure there is somthing to write + # clean up + bpy.data.meshes.remove(me) + continue # dont bother with this mesh. + + materials = me.materials[:] + material_names = [m.name if m else None for m in materials] + # avoid bad index errors + if not materials: + materials = [None] + material_names = [name_compat(None)] + # Sort by Material, then images + # so we dont over context switch in the obj file. + if faceuv: + face_index_pairs.sort(key=lambda a: (a[0].material_index, hash(uv_texture[a[1]].image), a[0].use_smooth)) + elif len(materials) > 1: + face_index_pairs.sort(key=lambda a: (a[0].material_index, a[0].use_smooth)) + else: + # no materials + face_index_pairs.sort(key=lambda a: a[0].use_smooth) + # Set the default mat to no material and no image. + contextMat = 0, 0 # Can never be this, so we will label a new material the first chance we get. + contextSmooth = None # Will either be true or false, set bad to force initialization switch. + # use:blen obs ??? what is this .... + name1 = ob.name + name2 = ob.data.name + if name1 == name2: + obnamestring = name_compat(name1) + else: + obnamestring = '%s_%s' % (name_compat(name1), name_compat(name2)) + file.write('Mesh:%s\n' % obnamestring) # Write Object name + ########################################################### + ## Vert + ########################################################### + file.write('\tVertex:%d\n\t\t' % len(me_verts)) + for v in me_verts: + file.write('%.6f %.6f %.6f|' % v.co[:]) + file.write('\n') + ########################################################### + ## UV + ########################################################### + if faceuv: + file.write('\tUV-mapping:\n\t\t') + # in case removing some of these dont get defined. + uv = uvkey = uv_dict = f_index = uv_index = None + uv_face_mapping = [None] * len(face_index_pairs) + uv_dict = {} # could use a set() here + for f, f_index in face_index_pairs: + uv_ls = uv_face_mapping[f_index] = [] + for uv_index, l_index in enumerate(f.loop_indices): + uv = uv_layer[l_index].uv + uvkey = veckey2d(uv) + try: + uv_k = uv_dict[uvkey] + except: + uv_k = uv_dict[uvkey] = len(uv_dict) + file.write('%.6f %.6f|' % uv[:]) + uv_ls.append(uv_k) + uv_unique_count = len(uv_dict) + del uv, uvkey, uv_dict, f_index, uv_index, uv_ls, uv_k + # Only need uv_unique_count and uv_face_mapping + file.write('\n') + else: + print("does not use UV-MAPPING") + ########################################################### + ## NORMAL + ########################################################### + if len(face_index_pairs) > 0: + if face_index_pairs[0][0].use_smooth: + localIsSmooth = 'vertex' + else: + localIsSmooth = 'face' + else: + localIsSmooth = 'face' + file.write('\tNormal(%s):%d\n\t\t' % (localIsSmooth, len(face_index_pairs)) ) + for f, f_index in face_index_pairs: + if f.use_smooth: + for v_idx in f.vertices: + v = me_verts[v_idx] + noKey = veckey3d(v.normal) + if noKey not in globalNormals: + globalNormals[noKey] = totno + totno += 1 + file.write('%.6f %.6f %.6f|' % noKey) + else: + # Hard, 1 normal from the face. + noKey = veckey3d(f.normal) + if noKey not in globalNormals: + globalNormals[noKey] = totno + totno += 1 + file.write('%.6f %.6f %.6f|' % noKey) + + file.write('\n') + if not faceuv: + f_image = None + ########################################################### + ## faces + ########################################################### + file.write('\tFace:%d' % len(face_index_pairs)) + for f, f_index in face_index_pairs: + f_smooth = f.use_smooth + f_mat = min(f.material_index, len(materials) - 1) + if faceuv: + tface = uv_texture[f_index] + f_image = tface.image + # MAKE KEY + if faceuv and f_image: # Object is always true. + key = material_names[f_mat], f_image.name + else: + key = material_names[f_mat], None # No image, use None instead. + # CHECK FOR CONTEXT SWITCH + if key == contextMat: + pass # Context already switched, dont do anything + else: + if key[0] is None and key[1] is None: + # inform the use of a material: + file.write("\n\t\t---:") # mat, image + else: + mat_data = mtl_dict.get(key) + if not mat_data: + # First add to global dict so we can export to mtl + # Then write mtl + # Make a new names from the mat and image name, + # converting any spaces to underscores with name_compat. + # If none image dont bother adding it to the name + # Try to avoid as much as possible adding texname (or other things) + # to the mtl name (see [#32102])... + mtl_name = "%s" % name_compat(key[0]) + if mtl_rev_dict.get(mtl_name, None) not in {key, None}: + if key[1] is None: + tmp_ext = "_NONE" + else: + tmp_ext = "_%s" % name_compat(key[1]) + i = 0 + while mtl_rev_dict.get(mtl_name + tmp_ext, None) not in {key, None}: + i += 1 + tmp_ext = "_%3d" % i + mtl_name += tmp_ext + mat_data = mtl_dict[key] = mtl_name, materials[f_mat], f_image + mtl_rev_dict[mtl_name] = key + # set the use of a material: + file.write("\n\t\t%s\n\t\t\t" % mat_data[0]) # can be mat_image or (null) + contextMat = key + f_v = [(vi, me_verts[v_idx]) for vi, v_idx in enumerate(f.vertices)] + if faceuv: + # export the normals: + if f_smooth: # Smoothed, use vertex normals + for vi, v in f_v: + file.write(" %d/%d/%d" % + (v.index + totverts-1, + totuvco + uv_face_mapping[f_index][vi]-1, + globalNormals[veckey3d(v.normal)]-1, + )) # vert, uv, normal + else: # No smoothing, face normals + no = globalNormals[veckey3d(f.normal)] + for vi, v in f_v: + file.write(" %d/%d/%d" % + (v.index + totverts-1, + totuvco + uv_face_mapping[f_index][vi]-1, + no-1, + )) # vert, uv, normal + face_vert_index += len(f_v) + else: # No UV's + # export the normals: + if f_smooth: # Smoothed, use vertex normals + for vi, v in f_v: + file.write(" %d/%d" % ( + v.index + totverts-1, + globalNormals[veckey3d(v.normal)]-1, + )) + else: # No smoothing, face normals + no = globalNormals[veckey3d(f.normal)] + for vi, v in f_v: + file.write(" %d/%d" % (v.index + totverts-1, no-1)) + file.write('|') + file.write('\n') + # Write edges. ==> did not know what it is ... + #file.write('Faces:%d' % len(edges)) + #for ed in edges: + # if ed.is_loose: + # file.write('%d %d\n' % (ed.vertices[0] + totverts, ed.vertices[1] + totverts)) + + # Make the indices global rather then per mesh + totverts += len(me_verts) + if faceuv: + totuvco += uv_unique_count + # clean up + bpy.data.meshes.remove(me) + + if object.dupli_type != 'NONE': + object.dupli_list_clear() + ##################################################################### + ## Save collision shapes (for one object): + ##################################################################### + for subObj in getChildren(object): + print(" child:'%s' check if start with : '%s'" % (subObj.name, EXPORT_COLLISION_NAME)) + if subObj.name.lower().startswith(EXPORT_COLLISION_NAME): + print(" find physics:'%s'" % (subObj.name)) + write_collision_shape(subObj, file, object.scale, 1) + + + +""" + " @brief Basic write function. The context and options must be already set. +""" +def write_file(filepath, + objects, + scene, + EXPORT_PATH_MODE='AUTO', + EXPORT_BINARY_MODE=False, + EXPORT_COLLISION_NAME="" + ): + print('EMF Export path: %r' % filepath) + + time1 = time.time() + + mtlfilepath = os.path.splitext(filepath)[0] + ".mtl" + + file = open(filepath, "w", encoding="utf8", newline="\n") + + # Write Header + file.write('EMF(STRING)\n') # if binary:file.write('EMF(BINARY)\n') + file.write('# Blender v%s EMF File: %r\n' % (bpy.app.version_string, os.path.basename(bpy.data.filepath))) + + # A Dict of Materials + # (material.name, image.name):matname_imagename # matname_imagename has gaps removed. + mtl_dict = {} + + copy_set = set() + """ + nb_total_mesh = 0 + nb_total_physic = 0 + for ob_main in objects: + print("**************** '" + str(ob_main.name) + "' *******************") + if ob_main.type == 'EMPTY': + for sub_obj in getChildren(ob_main): + print(" child:'" + str(sub_obj.name) + "' type=" + sub_obj.type) + if sub_obj.type == 'MESH': + nb_total_mesh += 1 + elif sub_obj.type == 'EMPTY' \ + and sub_obj.name.lower().startswith("physic"): + nb_total_physic += 1 + for sub_obj_2 in getChildren(sub_obj): + print(" child:'" + str(sub_obj_2.name) + "' type=" + sub_obj_2.type) + for sub_obj_3 in getChildren(sub_obj_2): + print(" child:'" + str(sub_obj_3.name) + "' type=" + sub_obj_3.type) + if ob_main.type == 'MESH': + nb_total_mesh += 1 + print("nb_total_mesh: " + str(nb_total_mesh)) + print("nb_total_physic: " + str(nb_total_physic)) + """ + + # Get all meshes + for ob_main in objects: + if ob_main.type == 'MESH': + write_mesh(scene, file, ob_main, mtl_dict) + elif ob_main.type == 'EMPTY': + for sub_obj in getChildren(ob_main): + print(" child:'" + str(sub_obj.name) + "' type=" + sub_obj.type) + if sub_obj.type == 'MESH': + write_mesh(scene, file, sub_obj, mtl_dict) + elif sub_obj.type == 'EMPTY' \ + and sub_obj.name.lower().startswith("physic"): + print(" child:'" + str(sub_obj.name) + "' type=" + sub_obj.type) + ##################################################################### + ## Save collision shapes (for one all): + ##################################################################### + write_collision_shape(sub_obj, file, sub_obj.scale, 0) + else: + print(" child:'" + str(sub_obj.name) + "' type=" + sub_obj.type + " not parsed ...") + + ##################################################################### + ## Now we have all our materials, save them in the material section + ##################################################################### + write_mtl(scene, file, mtlfilepath, EXPORT_PATH_MODE, copy_set, mtl_dict) + + ##################################################################### + ## End of the file generation: + ##################################################################### + file.close() + + # copy all collected files. + bpy_extras.io_utils.path_reference_copy(copy_set) + + print("EMF Export time: %.2f" % (time.time() - time1)) + + +""" + " @brief generate the requested object file ... with his material inside and ... + " +""" +def _write(context, + filepath, + EXPORT_SEL_ONLY, + EXPORT_PATH_MODE, + EXPORT_BINARY_MODE, + EXPORT_COLLISION_NAME, + ): + # + base_name, ext = os.path.splitext(filepath) + # create the output name: + context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension + # get the curent scene: + scene = context.scene + # Exit edit mode before exporting, so current object states are exported properly. + if bpy.ops.object.mode_set.poll(): + bpy.ops.object.mode_set(mode='OBJECT') + # get the curent frame selected: + frame = scene.frame_current + # Loop through all frames in the scene and export. + scene.frame_set(frame, subframe=0.0) + # get only the object that are selected or all... + if EXPORT_SEL_ONLY: + objects = context.selected_objects + else: + objects = scene.objects + + full_path = ''.join(context_name) + + write_file(full_path, + objects, + scene, + EXPORT_PATH_MODE, + EXPORT_BINARY_MODE, + EXPORT_COLLISION_NAME, + ) + + + +""" + " @brief Save the current element in the file requested. + " +""" +def save(operator, + context, + filepath="", + use_selection=True, + use_binary=False, + collision_object_name="", + path_mode='AUTO' + ): + _write(context, + filepath, + EXPORT_SEL_ONLY=use_selection, + EXPORT_PATH_MODE=path_mode, + EXPORT_BINARY_MODE=use_binary, + EXPORT_COLLISION_NAME=collision_object_name, + ) + + return {'FINISHED'} diff --git a/samples/.checkstyle b/samples/.checkstyle new file mode 100644 index 0000000..428926e --- /dev/null +++ b/samples/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/.classpath b/samples/.classpath new file mode 100644 index 0000000..6cf5cb9 --- /dev/null +++ b/samples/.classpath @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/.gitignore b/samples/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/samples/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/samples/.project b/samples/.project new file mode 100644 index 0000000..445ad66 --- /dev/null +++ b/samples/.project @@ -0,0 +1,17 @@ + + + atriasoft-ege-samples + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/samples/.settings/org.eclipse.jdt.ui.prefs b/samples/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..7103be7 --- /dev/null +++ b/samples/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/samples/.settings/org.eclipse.ltk.core.refactoring.prefs b/samples/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..b196c64 --- /dev/null +++ b/samples/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/resources/res/DragonBlender.blend b/samples/resources/res/DragonBlender.blend similarity index 100% rename from resources/res/DragonBlender.blend rename to samples/resources/res/DragonBlender.blend diff --git a/resources/res/Tree1.obj b/samples/resources/res/Tree1.obj similarity index 100% rename from resources/res/Tree1.obj rename to samples/resources/res/Tree1.obj diff --git a/resources/res/blendMap.png b/samples/resources/res/blendMap.png similarity index 100% rename from resources/res/blendMap.png rename to samples/resources/res/blendMap.png diff --git a/resources/res/box.obj b/samples/resources/res/box.obj similarity index 100% rename from resources/res/box.obj rename to samples/resources/res/box.obj diff --git a/resources/res/box.png b/samples/resources/res/box.png similarity index 100% rename from resources/res/box.png rename to samples/resources/res/box.png diff --git a/resources/res/bunny.obj b/samples/resources/res/bunny.obj similarity index 100% rename from resources/res/bunny.obj rename to samples/resources/res/bunny.obj diff --git a/resources/res/cube-one.obj b/samples/resources/res/cube-one.obj similarity index 100% rename from resources/res/cube-one.obj rename to samples/resources/res/cube-one.obj diff --git a/resources/res/cube.blend b/samples/resources/res/cube.blend similarity index 100% rename from resources/res/cube.blend rename to samples/resources/res/cube.blend diff --git a/resources/res/cube.mtl b/samples/resources/res/cube.mtl similarity index 100% rename from resources/res/cube.mtl rename to samples/resources/res/cube.mtl diff --git a/resources/res/cube.obj b/samples/resources/res/cube.obj similarity index 100% rename from resources/res/cube.obj rename to samples/resources/res/cube.obj diff --git a/resources/res/dirt.png b/samples/resources/res/dirt.png similarity index 100% rename from resources/res/dirt.png rename to samples/resources/res/dirt.png diff --git a/resources/res/dragon.obj b/samples/resources/res/dragon.obj similarity index 100% rename from resources/res/dragon.obj rename to samples/resources/res/dragon.obj diff --git a/resources/res/drone.obj b/samples/resources/res/drone.obj similarity index 100% rename from resources/res/drone.obj rename to samples/resources/res/drone.obj diff --git a/resources/res/exampleOBJ.obj b/samples/resources/res/exampleOBJ.obj similarity index 100% rename from resources/res/exampleOBJ.obj rename to samples/resources/res/exampleOBJ.obj diff --git a/resources/res/fern.obj b/samples/resources/res/fern.obj similarity index 100% rename from resources/res/fern.obj rename to samples/resources/res/fern.obj diff --git a/resources/res/fern.png b/samples/resources/res/fern.png similarity index 100% rename from resources/res/fern.png rename to samples/resources/res/fern.png diff --git a/resources/res/fern_atlas.png b/samples/resources/res/fern_atlas.png similarity index 100% rename from resources/res/fern_atlas.png rename to samples/resources/res/fern_atlas.png diff --git a/resources/res/flower.png b/samples/resources/res/flower.png similarity index 100% rename from resources/res/flower.png rename to samples/resources/res/flower.png diff --git a/resources/res/grass.obj b/samples/resources/res/grass.obj similarity index 100% rename from resources/res/grass.obj rename to samples/resources/res/grass.obj diff --git a/resources/res/grass.png b/samples/resources/res/grass.png similarity index 100% rename from resources/res/grass.png rename to samples/resources/res/grass.png diff --git a/resources/res/grassFlowers.png b/samples/resources/res/grassFlowers.png similarity index 100% rename from resources/res/grassFlowers.png rename to samples/resources/res/grassFlowers.png diff --git a/resources/res/grassModel.obj b/samples/resources/res/grassModel.obj similarity index 100% rename from resources/res/grassModel.obj rename to samples/resources/res/grassModel.obj diff --git a/resources/res/grassTexture.png b/samples/resources/res/grassTexture.png similarity index 100% rename from resources/res/grassTexture.png rename to samples/resources/res/grassTexture.png diff --git a/resources/res/grassy.png b/samples/resources/res/grassy.png similarity index 100% rename from resources/res/grassy.png rename to samples/resources/res/grassy.png diff --git a/resources/res/health.png b/samples/resources/res/health.png similarity index 100% rename from resources/res/health.png rename to samples/resources/res/health.png diff --git a/resources/res/heightmap.png b/samples/resources/res/heightmap.png similarity index 100% rename from resources/res/heightmap.png rename to samples/resources/res/heightmap.png diff --git a/resources/res/image.png b/samples/resources/res/image.png similarity index 100% rename from resources/res/image.png rename to samples/resources/res/image.png diff --git a/resources/res/lamp.mtl b/samples/resources/res/lamp.mtl similarity index 100% rename from resources/res/lamp.mtl rename to samples/resources/res/lamp.mtl diff --git a/resources/res/lamp.obj b/samples/resources/res/lamp.obj similarity index 100% rename from resources/res/lamp.obj rename to samples/resources/res/lamp.obj diff --git a/resources/res/lamp.png b/samples/resources/res/lamp.png similarity index 100% rename from resources/res/lamp.png rename to samples/resources/res/lamp.png diff --git a/resources/res/lowPolyTree.obj b/samples/resources/res/lowPolyTree.obj similarity index 100% rename from resources/res/lowPolyTree.obj rename to samples/resources/res/lowPolyTree.obj diff --git a/resources/res/lowPolyTree.png b/samples/resources/res/lowPolyTree.png similarity index 100% rename from resources/res/lowPolyTree.png rename to samples/resources/res/lowPolyTree.png diff --git a/resources/res/mud.png b/samples/resources/res/mud.png similarity index 100% rename from resources/res/mud.png rename to samples/resources/res/mud.png diff --git a/resources/res/path.png b/samples/resources/res/path.png similarity index 100% rename from resources/res/path.png rename to samples/resources/res/path.png diff --git a/resources/res/person.blend b/samples/resources/res/person.blend similarity index 100% rename from resources/res/person.blend rename to samples/resources/res/person.blend diff --git a/resources/res/person.blend1 b/samples/resources/res/person.blend1 similarity index 100% rename from resources/res/person.blend1 rename to samples/resources/res/person.blend1 diff --git a/resources/res/person.obj b/samples/resources/res/person.obj similarity index 100% rename from resources/res/person.obj rename to samples/resources/res/person.obj diff --git a/resources/res/person_-xfw_zup.mtl b/samples/resources/res/person_-xfw_zup.mtl similarity index 100% rename from resources/res/person_-xfw_zup.mtl rename to samples/resources/res/person_-xfw_zup.mtl diff --git a/resources/res/person_-xfw_zup.obj b/samples/resources/res/person_-xfw_zup.obj similarity index 100% rename from resources/res/person_-xfw_zup.obj rename to samples/resources/res/person_-xfw_zup.obj diff --git a/resources/res/person_-yfw_zup.mtl b/samples/resources/res/person_-yfw_zup.mtl similarity index 100% rename from resources/res/person_-yfw_zup.mtl rename to samples/resources/res/person_-yfw_zup.mtl diff --git a/resources/res/person_-yfw_zup.obj b/samples/resources/res/person_-yfw_zup.obj similarity index 100% rename from resources/res/person_-yfw_zup.obj rename to samples/resources/res/person_-yfw_zup.obj diff --git a/resources/res/pine.obj b/samples/resources/res/pine.obj similarity index 100% rename from resources/res/pine.obj rename to samples/resources/res/pine.obj diff --git a/resources/res/pine.png b/samples/resources/res/pine.png similarity index 100% rename from resources/res/pine.png rename to samples/resources/res/pine.png diff --git a/resources/res/playerTexture.png b/samples/resources/res/playerTexture.png similarity index 100% rename from resources/res/playerTexture.png rename to samples/resources/res/playerTexture.png diff --git a/resources/res/skybox/back.png b/samples/resources/res/skybox/back.png similarity index 100% rename from resources/res/skybox/back.png rename to samples/resources/res/skybox/back.png diff --git a/resources/res/skybox/bottom.png b/samples/resources/res/skybox/bottom.png similarity index 100% rename from resources/res/skybox/bottom.png rename to samples/resources/res/skybox/bottom.png diff --git a/resources/res/skybox/front.png b/samples/resources/res/skybox/front.png similarity index 100% rename from resources/res/skybox/front.png rename to samples/resources/res/skybox/front.png diff --git a/resources/res/skybox/left.png b/samples/resources/res/skybox/left.png similarity index 100% rename from resources/res/skybox/left.png rename to samples/resources/res/skybox/left.png diff --git a/resources/res/skybox/right.png b/samples/resources/res/skybox/right.png similarity index 100% rename from resources/res/skybox/right.png rename to samples/resources/res/skybox/right.png diff --git a/resources/res/skybox/top.png b/samples/resources/res/skybox/top.png similarity index 100% rename from resources/res/skybox/top.png rename to samples/resources/res/skybox/top.png diff --git a/resources/res/skybox2/back.png b/samples/resources/res/skybox2/back.png similarity index 100% rename from resources/res/skybox2/back.png rename to samples/resources/res/skybox2/back.png diff --git a/resources/res/skybox2/bottom.png b/samples/resources/res/skybox2/bottom.png similarity index 100% rename from resources/res/skybox2/bottom.png rename to samples/resources/res/skybox2/bottom.png diff --git a/resources/res/skybox2/front.png b/samples/resources/res/skybox2/front.png similarity index 100% rename from resources/res/skybox2/front.png rename to samples/resources/res/skybox2/front.png diff --git a/resources/res/skybox2/left.png b/samples/resources/res/skybox2/left.png similarity index 100% rename from resources/res/skybox2/left.png rename to samples/resources/res/skybox2/left.png diff --git a/resources/res/skybox2/right.png b/samples/resources/res/skybox2/right.png similarity index 100% rename from resources/res/skybox2/right.png rename to samples/resources/res/skybox2/right.png diff --git a/resources/res/skybox2/top.png b/samples/resources/res/skybox2/top.png similarity index 100% rename from resources/res/skybox2/top.png rename to samples/resources/res/skybox2/top.png diff --git a/resources/res/socuwan.png b/samples/resources/res/socuwan.png similarity index 100% rename from resources/res/socuwan.png rename to samples/resources/res/socuwan.png diff --git a/resources/res/stall.blend b/samples/resources/res/stall.blend similarity index 100% rename from resources/res/stall.blend rename to samples/resources/res/stall.blend diff --git a/resources/res/stall.obj b/samples/resources/res/stall.obj similarity index 100% rename from resources/res/stall.obj rename to samples/resources/res/stall.obj diff --git a/resources/res/stallTexture.png b/samples/resources/res/stallTexture.png similarity index 100% rename from resources/res/stallTexture.png rename to samples/resources/res/stallTexture.png diff --git a/samples/resources/res/tower.dae b/samples/resources/res/tower.dae new file mode 100644 index 0000000..88cdbc5 --- /dev/null +++ b/samples/resources/res/tower.dae @@ -0,0 +1,327 @@ + + + + + Blender User + Blender 2.92.0 commit date:2021-02-24, commit time:16:25, hash:02948a2cab44 + + 2021-04-15T23:57:56 + 2021-04-15T23:57:56 + + Z_UP + + + + + + + 39.59775 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 10 + + + + + + + + + 1000 1000 1000 + 1 + 0 + 0.00111109 + + + + + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 1000 + 29.99998 + 75 + 0.15 + 0 + 1 + 2 + 0.04999995 + 30.002 + 1 + 3 + 2880 + 3 + 1 + 1 + 0.1 + 0.1 + 1 + + + + + + + + + + + 0 0 0 1 + + + 0.001353697 0.8000001 0.05331983 1 + + + 1.45 + + + + + + + + + + + 0 0 0 1 + + + 0.8000001 0 0.008711318 1 + + + 1.45 + + + + + + + + + + + 0 0 0 1 + + + 0.1136548 0.510074 0.8000001 1 + + + 1.45 + + + + + + + + + + + 0 0 0 1 + + + 0.0146695 0.0146695 0.0146695 1 + + + 1.45 + + + + + + + + + + + + + + + + + + + + + + + + + + 1 1 1 1 1 -0.4590548 1 -1 1 1 -1 -0.4590548 -1 1 1 -1 1 -0.4590548 -1 -1 1 -1 -1 -0.4590548 0.5190913 0.5190913 2.020207 0.5190913 -0.5190913 2.020207 -0.5190913 0.5190913 2.020207 -0.5190913 -0.5190913 2.020207 1.267435 0.5190913 2.311062 1.267435 -0.5190913 2.311062 -0.5190913 0.5190913 2.311062 -0.5190913 -0.5190913 2.311062 1.267435 0.5190913 3.133908 1.267435 -0.5190913 3.133908 -0.5190913 0.5190913 3.133908 -0.5190913 -0.5190913 3.133908 -1.007701 0.1338565 2.616392 -1.007701 -0.1338565 2.616392 -1.007701 0.1338565 2.828578 -1.007701 -0.1338565 2.828578 -3.394721 0.1081237 2.636788 -3.394721 -0.1081237 2.636788 -3.394721 0.1081237 2.808182 -3.394721 -0.1081237 2.808182 -3.394721 0.1483429 2.604911 -3.394721 -0.1483429 2.604911 -3.394721 0.1483429 2.840059 -3.394721 -0.1483429 2.840059 -3.865651 0.1483429 2.604911 -3.865651 -0.1483429 2.604911 -3.865651 0.1483429 2.840059 -3.865651 -0.1483429 2.840059 0.4686203 0.2274325 2.087707 0.4686203 -0.2274325 2.087707 -0.2274325 0.2274325 2.087707 -0.2274325 -0.2274325 2.087707 0.6712364 0.2274325 2.408801 0.6712364 -0.2274325 2.408801 0.2163712 0.2274325 2.408801 0.2163712 -0.2274325 2.408801 1.304951 1.304951 -0.6408936 1.304951 -1.304951 -0.6408936 -1.304951 1.304951 -0.6408936 -1.304951 -1.304951 -0.6408936 1.304951 1.304951 -0.9694133 1.304951 -1.304951 -0.9694133 -1.304951 1.304951 -0.9694133 -1.304951 -1.304951 -0.9694133 1.644974 0.3190181 2.469636 1.644974 -0.3190181 2.469636 1.644974 0.3190181 2.975334 1.644974 -0.3190181 2.975334 1.469387 0.1548147 2.599781 1.469387 -0.1548147 2.599781 1.469387 0.1548147 2.845189 1.469387 -0.1548147 2.845189 -3.865651 0.08153259 2.657864 -3.865651 -0.08153259 2.657864 -3.865651 0.08153259 2.787106 -3.865651 -0.08153259 2.787106 0.3018358 0.08153259 2.657864 0.3018358 -0.08153259 2.657864 0.3018358 0.08153259 2.787106 0.3018358 -0.08153259 2.787106 + + + + + + + + + + 0 0.9045414 0.4263859 0 -1 0 -1 0 0 0 -0.5121497 0.8588963 1 0 0 0 1 0 0 0 -1 0 -0.9045414 0.4263859 -0.9045414 0 0.4263859 0.9045414 0 0.4263859 0 -0.225474 0.9742492 0 1 0 -0.225474 0 0.9742492 0 0 1 0.4682527 0.8835947 0 -0.6191396 0.785281 0 -0.01077967 -0.999942 0 -0.5299356 0 0.8480379 -0.6191396 -0.785281 0 -0.5299357 0 -0.8480378 -0.008543968 0 0.9999635 -0.01077961 0.999942 0 -0.008544087 0 -0.9999635 1 4.32336e-6 0 1 -4.32335e-6 0 -1 -5.69097e-6 0 0 0.2254741 0.9742492 0.8008747 0 0.5988321 0.8457028 0 -0.5336541 0 -1 0 -0.5861729 0 0.8101861 -0.5121498 0 0.8588962 0.5121498 0 0.8588962 0 0.5121497 0.8588963 0.5954643 0 0.8033819 0.3872494 0 0.921975 0.4682528 -0.8835946 0 0.3872498 0 -0.921975 0.6830338 0.7303869 0 0.5954651 0 -0.8033812 0.6830338 -0.7303869 0 -1 5.69097e-6 0 0 0.9045414 0.4263858 0 -0.5121495 0.8588964 0 -0.9045414 0.4263858 -0.9045414 0 0.4263858 0.9045414 0 0.4263858 0 -0.2254741 0.9742492 0 1 0 -0.2254737 0 0.9742493 0.4682531 0.8835944 0 -0.6191402 0.7852805 0 -0.01077961 -0.9999419 0 -0.529936 0 0.8480377 -0.6191402 -0.7852805 0 -0.5299366 0 -0.8480374 -0.008544027 0 0.9999636 -0.01077967 0.9999419 0 -0.008543848 0 -0.9999636 1 -1.26048e-5 0 1 1.26048e-5 0 0 0.225474 0.9742492 0.8008742 0 0.5988326 0.845703 0 -0.5336538 0 -1 0 -0.5861732 0 0.8101858 -0.5121495 0 0.8588964 0.5121495 0 0.8588964 0 0.5121495 0.8588964 0.5954657 0 0.8033809 0.3872495 0 0.921975 0.4682529 -0.8835946 0 0.3872503 0 -0.9219747 0.6830333 0.7303873 0 0.5954657 0 -0.8033809 0.6830333 -0.7303873 0 + + + + + + + + + + 0.625 0.25 0.625 0.5 0.625 0.5 0.625 0.75 0.375 1 0.375 0.75 0.625 0 0.375 0.25 0.375 0 0.375 1 0.375 0.75 0.375 0.75 0.625 0.5 0.375 0.75 0.375 0.5 0.625 0.25 0.375 0.5 0.375 0.25 0.625 0 0.625 0.5 0.625 0.75 0.625 0.75 0.625 1 0.625 1 0.625 0 0.625 0.25 0.625 0.25 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.25 0.625 0.5 0.625 0.5 0.625 0.75 0.625 1 0.625 1 0.625 0.5 0.625 0.25 0.625 0.5 0.625 0 0.625 0.25 0.625 0.25 0.875 0.5 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.75 0.625 1 0.625 1 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.75 0.875 0.75 0.625 1 0.625 1 0.625 1 0.625 0 0.625 0.25 0.625 0.25 0.875 0.5 0.875 0.75 0.875 0.75 0.875 0.5 0.875 0.75 0.875 0.75 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0.25 0.625 0.25 0.625 1 0.625 1 0.625 1 0.625 1 0.625 1 0.625 1 0.625 0 0.625 0.25 0.625 0.25 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.75 0.875 0.75 0.625 0.5 0.625 0.25 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0 0.625 0.75 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 1 0.625 1 0.625 0 0.625 0.25 0.625 0.25 0.375 0.75 0.375 0.5 0.375 0.5 0.375 0.25 0.375 0 0.375 0 0.375 0.75 0.375 0.5 0.375 0.5 0.375 0.5 0.375 0.25 0.375 0.25 0.375 0.5 0.125 0.75 0.125 0.5 0.375 0.5 0.375 0.25 0.375 0.25 0.375 1 0.375 0.75 0.375 0.75 0.375 0.25 0.375 0 0.375 0 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0.25 0.875 0.5 0.875 0.75 0.875 0.75 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0.25 0.625 0.25 0.625 0 0.625 0.25 0.625 0.25 0.625 0 0.625 0.25 0.625 0.25 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.75 0.875 0.75 0.625 0.25 0.625 0.25 0.625 0.5 0.625 0.75 0.625 1 0.375 1 0.625 0 0.625 0.25 0.375 0.25 0.375 1 0.375 1 0.375 0.75 0.625 0.5 0.625 0.75 0.375 0.75 0.625 0.25 0.625 0.5 0.375 0.5 0.625 0 0.625 0.25 0.625 0.5 0.625 0.75 0.625 0.75 0.625 1 0.625 0 0.625 0 0.625 0.25 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.25 0.625 0.25 0.625 0.5 0.625 0.75 0.625 0.75 0.625 1 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.875 0.5 0.875 0.75 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.75 0.625 0.75 0.625 1 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.5 0.875 0.75 0.625 1 0.625 1 0.625 1 0.625 0 0.625 0 0.625 0.25 0.875 0.5 0.875 0.5 0.875 0.75 0.875 0.5 0.875 0.5 0.875 0.75 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.625 1 0.625 1 0.625 1 0.625 1 0.625 1 0.625 1 0.625 0 0.625 0 0.625 0.25 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.5 0.875 0.75 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.5 0.625 0.25 0.625 0 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 1 0.625 0 0.625 0 0.625 0.25 0.375 0.75 0.375 0.75 0.375 0.5 0.375 0.25 0.375 0.25 0.375 0 0.375 0.75 0.375 0.75 0.375 0.5 0.375 0.5 0.375 0.5 0.375 0.25 0.375 0.5 0.375 0.75 0.125 0.75 0.375 0.5 0.375 0.5 0.375 0.25 0.375 1 0.375 1 0.375 0.75 0.375 0.25 0.375 0.25 0.375 0 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.5 0.625 0.25 0.625 0.25 0.625 0.25 0.875 0.5 0.875 0.5 0.875 0.75 0.625 0.25 0.625 0.25 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.625 0 0.625 0 0.625 0.25 0.625 1 0.625 1 0.625 1 0.875 0.5 0.875 0.5 0.875 0.75 + + + + + + + + + + + + + + +

15 6 18 12 6 19 13 6 20 14 5 30 16 5 31 12 5 32 9 10 33 39 10 34 11 10 35 36 11 36 42 11 37 40 11 38 11 12 39 38 12 40 10 12 41 18 13 42 17 13 43 16 13 44 14 15 48 22 15 49 18 15 50 13 1 51 19 1 52 15 1 53 18 17 57 23 17 58 19 17 59 19 18 60 21 18 61 15 18 62 15 19 63 20 19 64 14 19 65 26 4 66 31 4 67 27 4 68 28 5 78 34 5 79 30 5 80 24 23 81 30 23 82 26 23 83 25 4 84 28 4 85 24 4 86 27 24 87 29 24 88 25 24 89 35 25 90 61 25 91 33 25 92 29 6 93 32 6 94 28 6 95 31 1 96 33 1 97 29 1 98 30 13 99 35 13 100 31 13 101 8 26 102 38 26 103 36 26 104 8 27 105 37 27 106 9 27 107 40 13 108 43 13 109 41 13 110 36 28 111 41 28 112 37 28 113 37 29 114 43 29 115 39 29 116 39 30 117 42 30 118 38 30 119 52 34 144 57 34 145 53 34 146 56 4 156 59 4 157 57 4 158 53 38 159 59 38 160 55 38 161 55 39 162 58 39 163 54 39 164 54 40 165 56 40 166 52 40 167 60 1 168 66 1 169 62 1 170 34 2 171 63 2 172 35 2 173 32 41 174 62 41 175 34 41 176 33 2 177 60 2 178 32 2 179 65 2 180 66 2 181 64 2 182 61 13 183 64 13 184 60 13 185 63 5 186 65 5 187 61 5 188 62 6 189 67 6 190 63 6 191 15 6 210 14 6 211 12 6 212 14 5 222 18 5 223 16 5 224 9 47 225 37 47 226 39 47 227 36 48 228 38 48 229 42 48 230 11 49 231 39 49 232 38 49 233 18 13 234 19 13 235 17 13 236 14 51 240 20 51 241 22 51 242 13 1 243 17 1 244 19 1 245 18 53 249 22 53 250 23 53 251 19 54 252 23 54 253 21 54 254 15 55 255 21 55 256 20 55 257 26 4 258 30 4 259 31 4 260 28 5 270 32 5 271 34 5 272 24 59 273 28 59 274 30 59 275 25 4 276 29 4 277 28 4 278 27 60 279 31 60 280 29 60 281 35 2 282 63 2 283 61 2 284 29 6 285 33 6 286 32 6 287 31 1 288 35 1 289 33 1 290 30 13 291 34 13 292 35 13 293 8 61 294 10 61 295 38 61 296 8 62 297 36 62 298 37 62 299 40 13 300 42 13 301 43 13 302 36 63 303 40 63 304 41 63 305 37 64 306 41 64 307 43 64 308 39 65 309 43 65 310 42 65 311 52 69 336 56 69 337 57 69 338 56 4 348 58 4 349 59 4 350 53 73 351 57 73 352 59 73 353 55 74 354 59 74 355 58 74 356 54 75 357 58 75 358 56 75 359 60 1 360 64 1 361 66 1 362 34 2 363 62 2 364 63 2 365 32 2 366 60 2 367 62 2 368 33 2 369 61 2 370 60 2 371 65 2 372 67 2 373 66 2 374 61 13 375 65 13 376 64 13 377 63 5 378 67 5 379 65 5 380 62 6 381 66 6 382 67 6 383

+
+ + + + +

16 14 45 52 14 46 12 14 47 23 16 54 25 16 55 21 16 56 22 20 69 27 20 70 23 20 71 20 21 72 26 21 73 22 21 74 21 22 75 24 22 76 20 22 77 17 35 147 54 35 148 16 35 149 13 36 150 55 36 151 17 36 152 12 37 153 53 37 154 13 37 155 16 50 237 54 50 238 52 50 239 23 52 246 27 52 247 25 52 248 22 56 261 26 56 262 27 56 263 20 57 264 24 57 265 26 57 266 21 58 267 25 58 268 24 58 269 17 70 339 55 70 340 54 70 341 13 71 342 53 71 343 55 71 344 12 72 345 52 72 346 53 72 347

+
+ + + + +

4 0 0 8 0 1 0 0 2 2 1 3 7 1 4 3 1 5 6 2 6 5 2 7 7 2 8 0 4 12 3 4 13 1 4 14 4 5 15 1 5 16 5 5 17 2 7 21 11 7 22 6 7 23 6 8 24 10 8 25 4 8 26 0 9 27 9 9 28 2 9 29 4 42 192 10 42 193 8 42 194 2 1 195 6 1 196 7 1 197 6 2 198 4 2 199 5 2 200 0 4 204 2 4 205 3 4 206 4 5 207 0 5 208 1 5 209 2 44 213 9 44 214 11 44 215 6 45 216 11 45 217 10 45 218 0 46 219 8 46 220 9 46 221

+
+ + + + +

7 3 9 45 3 10 3 3 11 45 4 120 48 4 121 44 4 122 5 31 123 47 31 124 7 31 125 3 32 126 44 32 127 1 32 128 1 33 129 46 33 130 5 33 131 48 6 132 51 6 133 50 6 134 44 5 135 50 5 136 46 5 137 47 1 138 49 1 139 45 1 140 46 2 141 51 2 142 47 2 143 7 43 201 47 43 202 45 43 203 45 4 312 49 4 313 48 4 314 5 66 315 46 66 316 47 66 317 3 67 318 45 67 319 44 67 320 1 68 321 44 68 322 46 68 323 48 6 324 49 6 325 51 6 326 44 5 327 48 5 328 50 5 329 47 1 330 51 1 331 49 1 332 46 2 333 50 2 334 51 2 335

+
+
+
+
+ + + + 0.2627871 6.71843e-9 -0.05000365 -0.04638017 -6.71843e-9 0.2675021 6.33515e-10 -0.0201487 0.05000365 6.33515e-10 0.2627871 0.2520798 0 0 0 1 + + Base canon + + + + + + + + 0.2627871 0 -0.05000364 0.002031147 0.05000364 0 0.2627871 -0.002338945 0 -0.2675021 0 -2.28e-4 0 0 0 1 3.33654e-4 0 0.267502 -0.9852814 -0.267502 0 3.33625e-4 0.1841412 0 -0.2675022 0 -2.2814e-4 0 0 0 1 + + + + + + + + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + + + + + + + + + + + + + + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 1 66 1 67 + + + + + + + + 3.672395 -9.38887e-8 0.6987906 -0.005824752 9.38887e-8 3.738287 8.85324e-9 0.07532164 -0.6987906 8.85324e-9 3.672395 0.01000908 0 0 0 1 + + 1 0 0 -5.1177e-10 0 0 -1 -0.0203767 0 1 0 -4.82573e-11 0 0 0 1 + + -0.1857027 -0.9826061 -5.18209e-8 0 0.9826061 -0.1857026 1.38398e-7 1 -1.45614e-7 -2.52188e-8 1 0 0 0 0 1 + + + 1 + 0 + -1.757583 + -1.161196 + 0 + -0.2194542 + + + + + + 0 + + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + #Armature_Base + + + + + + + + + + + + + + + + + + + + + 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + + + + +
\ No newline at end of file diff --git a/resources/res/tree.obj b/samples/resources/res/tree.obj similarity index 100% rename from resources/res/tree.obj rename to samples/resources/res/tree.obj diff --git a/resources/res/tree.png b/samples/resources/res/tree.png similarity index 100% rename from resources/res/tree.png rename to samples/resources/res/tree.png diff --git a/resources/res/tree_sample.png b/samples/resources/res/tree_sample.png similarity index 100% rename from resources/res/tree_sample.png rename to samples/resources/res/tree_sample.png diff --git a/resources/res/white.png b/samples/resources/res/white.png similarity index 100% rename from resources/res/white.png rename to samples/resources/res/white.png diff --git a/resources/testDataLoxelEngine/data/basic.frag b/samples/resources/s1_textured_cube/data/basic.frag similarity index 100% rename from resources/testDataLoxelEngine/data/basic.frag rename to samples/resources/s1_textured_cube/data/basic.frag diff --git a/resources/testDataLoxelEngine/data/basic.vert b/samples/resources/s1_textured_cube/data/basic.vert similarity index 100% rename from resources/testDataLoxelEngine/data/basic.vert rename to samples/resources/s1_textured_cube/data/basic.vert diff --git a/samples/resources/testDataLoxelEngine/data/basic.frag b/samples/resources/testDataLoxelEngine/data/basic.frag new file mode 100644 index 0000000..13d2aa8 --- /dev/null +++ b/samples/resources/testDataLoxelEngine/data/basic.frag @@ -0,0 +1,17 @@ +#version 400 core + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +in vec2 io_textureCoords; + +uniform sampler2D in_textureBase; + +// output: +out vec4 out_Color; + +void main(void) { + out_Color = texture(in_textureBase, io_textureCoords); +} diff --git a/samples/resources/testDataLoxelEngine/data/basic.vert b/samples/resources/testDataLoxelEngine/data/basic.vert new file mode 100644 index 0000000..c0dcaa7 --- /dev/null +++ b/samples/resources/testDataLoxelEngine/data/basic.vert @@ -0,0 +1,21 @@ +#version 400 core + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +// Input: +in vec3 in_position; +in vec2 in_textureCoords; +uniform mat4 in_matrixTransformation; +uniform mat4 in_matrixProjection; +uniform mat4 in_matrixView; + +// output: +out vec2 io_textureCoords; + +void main(void) { + gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * vec4(in_position, 1.0); + io_textureCoords = in_textureCoords; +} diff --git a/resources/testDataLoxelEngine/data/basicMaterial.frag b/samples/resources/testDataLoxelEngine/data/basicMaterial.frag similarity index 100% rename from resources/testDataLoxelEngine/data/basicMaterial.frag rename to samples/resources/testDataLoxelEngine/data/basicMaterial.frag diff --git a/resources/testDataLoxelEngine/data/basicMaterial.vert b/samples/resources/testDataLoxelEngine/data/basicMaterial.vert similarity index 100% rename from resources/testDataLoxelEngine/data/basicMaterial.vert rename to samples/resources/testDataLoxelEngine/data/basicMaterial.vert diff --git a/resources/testDataLoxelEngine/data/blocks/.DS_Store b/samples/resources/testDataLoxelEngine/data/blocks/.DS_Store similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/.DS_Store rename to samples/resources/testDataLoxelEngine/data/blocks/.DS_Store diff --git a/resources/testDataLoxelEngine/data/blocks/anvil_base.png b/samples/resources/testDataLoxelEngine/data/blocks/anvil_base.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/anvil_base.png rename to samples/resources/testDataLoxelEngine/data/blocks/anvil_base.png diff --git a/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_0.png b/samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_1.png b/samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_2.png b/samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/anvil_top_damaged_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/beacon.png b/samples/resources/testDataLoxelEngine/data/blocks/beacon.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/beacon.png rename to samples/resources/testDataLoxelEngine/data/blocks/beacon.png diff --git a/resources/testDataLoxelEngine/data/blocks/beacon.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/beacon.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/beacon.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/beacon.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/bed_feet_end.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_feet_end.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_feet_end.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_feet_end.png diff --git a/resources/testDataLoxelEngine/data/blocks/bed_feet_side.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_feet_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_feet_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_feet_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/bed_feet_top.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_feet_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_feet_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_feet_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/bed_head_end.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_head_end.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_head_end.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_head_end.png diff --git a/resources/testDataLoxelEngine/data/blocks/bed_head_side.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_head_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_head_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_head_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/bed_head_top.png b/samples/resources/testDataLoxelEngine/data/blocks/bed_head_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bed_head_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/bed_head_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/bedrock.png b/samples/resources/testDataLoxelEngine/data/blocks/bedrock.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bedrock.png rename to samples/resources/testDataLoxelEngine/data/blocks/bedrock.png diff --git a/resources/testDataLoxelEngine/data/blocks/bookshelf.png b/samples/resources/testDataLoxelEngine/data/blocks/bookshelf.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/bookshelf.png rename to samples/resources/testDataLoxelEngine/data/blocks/bookshelf.png diff --git a/resources/testDataLoxelEngine/data/blocks/brewing_stand.png b/samples/resources/testDataLoxelEngine/data/blocks/brewing_stand.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/brewing_stand.png rename to samples/resources/testDataLoxelEngine/data/blocks/brewing_stand.png diff --git a/resources/testDataLoxelEngine/data/blocks/brewing_stand_base.png b/samples/resources/testDataLoxelEngine/data/blocks/brewing_stand_base.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/brewing_stand_base.png rename to samples/resources/testDataLoxelEngine/data/blocks/brewing_stand_base.png diff --git a/resources/testDataLoxelEngine/data/blocks/brick.png b/samples/resources/testDataLoxelEngine/data/blocks/brick.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/brick.png rename to samples/resources/testDataLoxelEngine/data/blocks/brick.png diff --git a/resources/testDataLoxelEngine/data/blocks/cactus_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/cactus_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cactus_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/cactus_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/cactus_side.png b/samples/resources/testDataLoxelEngine/data/blocks/cactus_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cactus_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/cactus_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/cactus_top.png b/samples/resources/testDataLoxelEngine/data/blocks/cactus_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cactus_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/cactus_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/cake_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/cake_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cake_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/cake_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/cake_inner.png b/samples/resources/testDataLoxelEngine/data/blocks/cake_inner.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cake_inner.png rename to samples/resources/testDataLoxelEngine/data/blocks/cake_inner.png diff --git a/resources/testDataLoxelEngine/data/blocks/cake_side.png b/samples/resources/testDataLoxelEngine/data/blocks/cake_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cake_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/cake_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/cake_top.png b/samples/resources/testDataLoxelEngine/data/blocks/cake_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cake_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/cake_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/carrots_stage_0.png b/samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/carrots_stage_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/carrots_stage_1.png b/samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/carrots_stage_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/carrots_stage_2.png b/samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/carrots_stage_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/carrots_stage_3.png b/samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_3.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/carrots_stage_3.png rename to samples/resources/testDataLoxelEngine/data/blocks/carrots_stage_3.png diff --git a/resources/testDataLoxelEngine/data/blocks/cauldron_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/cauldron_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cauldron_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/cauldron_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/cauldron_inner.png b/samples/resources/testDataLoxelEngine/data/blocks/cauldron_inner.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cauldron_inner.png rename to samples/resources/testDataLoxelEngine/data/blocks/cauldron_inner.png diff --git a/resources/testDataLoxelEngine/data/blocks/cauldron_side.png b/samples/resources/testDataLoxelEngine/data/blocks/cauldron_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cauldron_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/cauldron_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/cauldron_top.png b/samples/resources/testDataLoxelEngine/data/blocks/cauldron_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cauldron_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/cauldron_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/chorus_flower.png b/samples/resources/testDataLoxelEngine/data/blocks/chorus_flower.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/chorus_flower.png rename to samples/resources/testDataLoxelEngine/data/blocks/chorus_flower.png diff --git a/resources/testDataLoxelEngine/data/blocks/chorus_flower_dead.png b/samples/resources/testDataLoxelEngine/data/blocks/chorus_flower_dead.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/chorus_flower_dead.png rename to samples/resources/testDataLoxelEngine/data/blocks/chorus_flower_dead.png diff --git a/resources/testDataLoxelEngine/data/blocks/chorus_plant.png b/samples/resources/testDataLoxelEngine/data/blocks/chorus_plant.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/chorus_plant.png rename to samples/resources/testDataLoxelEngine/data/blocks/chorus_plant.png diff --git a/resources/testDataLoxelEngine/data/blocks/clay.png b/samples/resources/testDataLoxelEngine/data/blocks/clay.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/clay.png rename to samples/resources/testDataLoxelEngine/data/blocks/clay.png diff --git a/resources/testDataLoxelEngine/data/blocks/coal_block.png b/samples/resources/testDataLoxelEngine/data/blocks/coal_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/coal_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/coal_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/coal_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/coal_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/coal_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/coal_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/coarse_dirt.png b/samples/resources/testDataLoxelEngine/data/blocks/coarse_dirt.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/coarse_dirt.png rename to samples/resources/testDataLoxelEngine/data/blocks/coarse_dirt.png diff --git a/resources/testDataLoxelEngine/data/blocks/cobblestone.png b/samples/resources/testDataLoxelEngine/data/blocks/cobblestone.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cobblestone.png rename to samples/resources/testDataLoxelEngine/data/blocks/cobblestone.png diff --git a/resources/testDataLoxelEngine/data/blocks/cobblestone_mossy.png b/samples/resources/testDataLoxelEngine/data/blocks/cobblestone_mossy.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cobblestone_mossy.png rename to samples/resources/testDataLoxelEngine/data/blocks/cobblestone_mossy.png diff --git a/resources/testDataLoxelEngine/data/blocks/cocoa_stage_0.png b/samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cocoa_stage_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/cocoa_stage_1.png b/samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cocoa_stage_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/cocoa_stage_2.png b/samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/cocoa_stage_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/cocoa_stage_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/command_block.png b/samples/resources/testDataLoxelEngine/data/blocks/command_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/command_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/command_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/command_block.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/command_block.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/command_block.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/command_block.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/comparator_off.png b/samples/resources/testDataLoxelEngine/data/blocks/comparator_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/comparator_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/comparator_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/comparator_on.png b/samples/resources/testDataLoxelEngine/data/blocks/comparator_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/comparator_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/comparator_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/crafting_table_front.png b/samples/resources/testDataLoxelEngine/data/blocks/crafting_table_front.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/crafting_table_front.png rename to samples/resources/testDataLoxelEngine/data/blocks/crafting_table_front.png diff --git a/resources/testDataLoxelEngine/data/blocks/crafting_table_side.png b/samples/resources/testDataLoxelEngine/data/blocks/crafting_table_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/crafting_table_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/crafting_table_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/crafting_table_top.png b/samples/resources/testDataLoxelEngine/data/blocks/crafting_table_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/crafting_table_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/crafting_table_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/daylight_detector_inverted_top.png b/samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_inverted_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/daylight_detector_inverted_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_inverted_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/daylight_detector_side.png b/samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/daylight_detector_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/daylight_detector_top.png b/samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/daylight_detector_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/daylight_detector_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/deadbush.png b/samples/resources/testDataLoxelEngine/data/blocks/deadbush.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/deadbush.png rename to samples/resources/testDataLoxelEngine/data/blocks/deadbush.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_0.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_1.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_2.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_3.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_3.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_3.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_3.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_4.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_4.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_4.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_4.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_5.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_5.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_5.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_5.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_6.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_6.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_6.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_6.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_7.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_7.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_7.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_7.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_8.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_8.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_8.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_8.png diff --git a/resources/testDataLoxelEngine/data/blocks/destroy_stage_9.png b/samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_9.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/destroy_stage_9.png rename to samples/resources/testDataLoxelEngine/data/blocks/destroy_stage_9.png diff --git a/resources/testDataLoxelEngine/data/blocks/diamond.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/diamond.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/diamond.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/diamond.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/diamond_block.png b/samples/resources/testDataLoxelEngine/data/blocks/diamond_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/diamond_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/diamond_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/diamond_block.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/diamond_block.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/diamond_block.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/diamond_block.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/diamond_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/diamond_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/diamond_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/diamond_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/diamond_ore.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/diamond_ore.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/diamond_ore.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/diamond_ore.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/dirt.png b/samples/resources/testDataLoxelEngine/data/blocks/dirt.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dirt.png rename to samples/resources/testDataLoxelEngine/data/blocks/dirt.png diff --git a/resources/testDataLoxelEngine/data/blocks/dirt_podzol_side.png b/samples/resources/testDataLoxelEngine/data/blocks/dirt_podzol_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dirt_podzol_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/dirt_podzol_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/dirt_podzol_top.png b/samples/resources/testDataLoxelEngine/data/blocks/dirt_podzol_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dirt_podzol_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/dirt_podzol_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/dispenser_front_horizontal.png b/samples/resources/testDataLoxelEngine/data/blocks/dispenser_front_horizontal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dispenser_front_horizontal.png rename to samples/resources/testDataLoxelEngine/data/blocks/dispenser_front_horizontal.png diff --git a/resources/testDataLoxelEngine/data/blocks/dispenser_front_vertical.png b/samples/resources/testDataLoxelEngine/data/blocks/dispenser_front_vertical.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dispenser_front_vertical.png rename to samples/resources/testDataLoxelEngine/data/blocks/dispenser_front_vertical.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_acacia_lower.png b/samples/resources/testDataLoxelEngine/data/blocks/door_acacia_lower.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_acacia_lower.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_acacia_lower.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_acacia_upper.png b/samples/resources/testDataLoxelEngine/data/blocks/door_acacia_upper.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_acacia_upper.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_acacia_upper.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_dark_oak_lower.png b/samples/resources/testDataLoxelEngine/data/blocks/door_dark_oak_lower.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_dark_oak_lower.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_dark_oak_lower.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_dark_oak_upper.png b/samples/resources/testDataLoxelEngine/data/blocks/door_dark_oak_upper.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_dark_oak_upper.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_dark_oak_upper.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_iron_lower.png b/samples/resources/testDataLoxelEngine/data/blocks/door_iron_lower.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_iron_lower.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_iron_lower.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_iron_upper.png b/samples/resources/testDataLoxelEngine/data/blocks/door_iron_upper.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_iron_upper.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_iron_upper.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_wood_lower.png b/samples/resources/testDataLoxelEngine/data/blocks/door_wood_lower.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_wood_lower.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_wood_lower.png diff --git a/resources/testDataLoxelEngine/data/blocks/door_wood_upper.png b/samples/resources/testDataLoxelEngine/data/blocks/door_wood_upper.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/door_wood_upper.png rename to samples/resources/testDataLoxelEngine/data/blocks/door_wood_upper.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_fern_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_fern_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_fern_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_fern_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_fern_top.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_fern_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_fern_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_fern_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_top.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_paeonia_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_rose_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_rose_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_rose_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_rose_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_rose_top.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_rose_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_rose_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_rose_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_syringa_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_top.png b/samples/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/double_plant_syringa_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/double_plant_syringa_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/dragon_egg.png b/samples/resources/testDataLoxelEngine/data/blocks/dragon_egg.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dragon_egg.png rename to samples/resources/testDataLoxelEngine/data/blocks/dragon_egg.png diff --git a/resources/testDataLoxelEngine/data/blocks/dragon_egg.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/dragon_egg.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dragon_egg.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/dragon_egg.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/dropper_front_horizontal.png b/samples/resources/testDataLoxelEngine/data/blocks/dropper_front_horizontal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dropper_front_horizontal.png rename to samples/resources/testDataLoxelEngine/data/blocks/dropper_front_horizontal.png diff --git a/resources/testDataLoxelEngine/data/blocks/dropper_front_vertical.png b/samples/resources/testDataLoxelEngine/data/blocks/dropper_front_vertical.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/dropper_front_vertical.png rename to samples/resources/testDataLoxelEngine/data/blocks/dropper_front_vertical.png diff --git a/resources/testDataLoxelEngine/data/blocks/emerald_block.png b/samples/resources/testDataLoxelEngine/data/blocks/emerald_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/emerald_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/emerald_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/emerald_block.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/emerald_block.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/emerald_block.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/emerald_block.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/emerald_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/emerald_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/emerald_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/emerald_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/emerald_ore.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/emerald_ore.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/emerald_ore.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/emerald_ore.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/end_bricks.png b/samples/resources/testDataLoxelEngine/data/blocks/end_bricks.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/end_bricks.png rename to samples/resources/testDataLoxelEngine/data/blocks/end_bricks.png diff --git a/resources/testDataLoxelEngine/data/blocks/end_rod.png b/samples/resources/testDataLoxelEngine/data/blocks/end_rod.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/end_rod.png rename to samples/resources/testDataLoxelEngine/data/blocks/end_rod.png diff --git a/resources/testDataLoxelEngine/data/blocks/end_stone.png b/samples/resources/testDataLoxelEngine/data/blocks/end_stone.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/end_stone.png rename to samples/resources/testDataLoxelEngine/data/blocks/end_stone.png diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_eye.png b/samples/resources/testDataLoxelEngine/data/blocks/endframe_eye.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_eye.png rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_eye.png diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_eye.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/endframe_eye.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_eye.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_eye.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_side.png b/samples/resources/testDataLoxelEngine/data/blocks/endframe_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_side.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/endframe_side.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_side.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_side.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_top.png b/samples/resources/testDataLoxelEngine/data/blocks/endframe_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/endframe_top.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/endframe_top.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/endframe_top.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/endframe_top.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/farmland_dry.png b/samples/resources/testDataLoxelEngine/data/blocks/farmland_dry.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/farmland_dry.png rename to samples/resources/testDataLoxelEngine/data/blocks/farmland_dry.png diff --git a/resources/testDataLoxelEngine/data/blocks/farmland_wet.png b/samples/resources/testDataLoxelEngine/data/blocks/farmland_wet.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/farmland_wet.png rename to samples/resources/testDataLoxelEngine/data/blocks/farmland_wet.png diff --git a/resources/testDataLoxelEngine/data/blocks/fern.png b/samples/resources/testDataLoxelEngine/data/blocks/fern.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/fern.png rename to samples/resources/testDataLoxelEngine/data/blocks/fern.png diff --git a/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png b/samples/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/fire_layer_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/fire_layer_0.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/fire_layer_0.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png b/samples/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/fire_layer_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/fire_layer_1.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/fire_layer_1.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/flower_dandelion.png b/samples/resources/testDataLoxelEngine/data/blocks/flower_dandelion.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/flower_dandelion.png rename to samples/resources/testDataLoxelEngine/data/blocks/flower_dandelion.png diff --git a/resources/testDataLoxelEngine/data/blocks/flower_rose.png b/samples/resources/testDataLoxelEngine/data/blocks/flower_rose.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/flower_rose.png rename to samples/resources/testDataLoxelEngine/data/blocks/flower_rose.png diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_front_off.png b/samples/resources/testDataLoxelEngine/data/blocks/furnace_front_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_front_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_front_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png b/samples/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_front_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_front_on.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_front_on.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_side.png b/samples/resources/testDataLoxelEngine/data/blocks/furnace_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_top.png b/samples/resources/testDataLoxelEngine/data/blocks/furnace_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/furnace_top.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/furnace_top.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/furnace_top.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/furnace_top.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/glass.png b/samples/resources/testDataLoxelEngine/data/blocks/glass.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_black.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_black.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_black.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_black.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_brown.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_brown.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_brown.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_brown.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_cyan.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_cyan.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_cyan.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_cyan.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_gray.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_gray.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_gray.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_gray.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_green.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_green.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_green.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_green.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_light_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_light_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_light_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_light_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_lime.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_lime.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_lime.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_lime.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_magenta.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_magenta.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_magenta.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_magenta.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_orange.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_orange.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_orange.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_orange.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_pane_top.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_pane_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_pane_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_pane_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_pink.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_pink.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_pink.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_pink.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_purple.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_purple.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_purple.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_purple.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_red.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_red.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_red.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_red.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_silver.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_silver.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_silver.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_silver.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_white.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_white.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_white.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_white.png diff --git a/resources/testDataLoxelEngine/data/blocks/glass_yellow.png b/samples/resources/testDataLoxelEngine/data/blocks/glass_yellow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glass_yellow.png rename to samples/resources/testDataLoxelEngine/data/blocks/glass_yellow.png diff --git a/resources/testDataLoxelEngine/data/blocks/glowstone.png b/samples/resources/testDataLoxelEngine/data/blocks/glowstone.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glowstone.png rename to samples/resources/testDataLoxelEngine/data/blocks/glowstone.png diff --git a/resources/testDataLoxelEngine/data/blocks/glowstone.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/glowstone.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/glowstone.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/glowstone.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/gold_block.png b/samples/resources/testDataLoxelEngine/data/blocks/gold_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/gold_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/gold_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/gold_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/gold_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/gold_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/gold_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/gold_ore.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/gold_ore.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/gold_ore.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/gold_ore.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/gold_top.png b/samples/resources/testDataLoxelEngine/data/blocks/gold_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/gold_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/gold_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_path_side.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_path_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_path_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_path_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_path_top.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_path_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_path_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_path_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_side_block.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_side_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_side_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_side_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_side_overlay.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_side_overlay.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_side_overlay.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_side_overlay.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_side_overlay2.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_side_overlay2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_side_overlay2.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_side_overlay2.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_side_snowed.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_side_snowed.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_side_snowed.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_side_snowed.png diff --git a/resources/testDataLoxelEngine/data/blocks/grass_top.png b/samples/resources/testDataLoxelEngine/data/blocks/grass_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/grass_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/grass_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/gravel.png b/samples/resources/testDataLoxelEngine/data/blocks/gravel.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/gravel.png rename to samples/resources/testDataLoxelEngine/data/blocks/gravel.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_black.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_black.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_black.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_black.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_brown.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_brown.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_brown.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_brown.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_cyan.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_cyan.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_cyan.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_cyan.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_gray.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_gray.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_gray.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_gray.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_green.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_green.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_green.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_green.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_light_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_light_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_light_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_light_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_lime.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_lime.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_lime.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_lime.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_magenta.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_magenta.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_magenta.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_magenta.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_orange.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_orange.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_orange.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_orange.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_pink.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_pink.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_pink.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_pink.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_purple.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_purple.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_purple.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_purple.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_red.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_red.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_red.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_red.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_silver.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_silver.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_silver.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_silver.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_white.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_white.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_white.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_white.png diff --git a/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_yellow.png b/samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_yellow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_yellow.png rename to samples/resources/testDataLoxelEngine/data/blocks/hardened_clay_stained_yellow.png diff --git a/resources/testDataLoxelEngine/data/blocks/hay_block_side.png b/samples/resources/testDataLoxelEngine/data/blocks/hay_block_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hay_block_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/hay_block_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/hay_block_top.png b/samples/resources/testDataLoxelEngine/data/blocks/hay_block_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hay_block_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/hay_block_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/hopper_inside.png b/samples/resources/testDataLoxelEngine/data/blocks/hopper_inside.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hopper_inside.png rename to samples/resources/testDataLoxelEngine/data/blocks/hopper_inside.png diff --git a/resources/testDataLoxelEngine/data/blocks/hopper_outside.png b/samples/resources/testDataLoxelEngine/data/blocks/hopper_outside.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hopper_outside.png rename to samples/resources/testDataLoxelEngine/data/blocks/hopper_outside.png diff --git a/resources/testDataLoxelEngine/data/blocks/hopper_top.png b/samples/resources/testDataLoxelEngine/data/blocks/hopper_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/hopper_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/hopper_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/ice.png b/samples/resources/testDataLoxelEngine/data/blocks/ice.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/ice.png rename to samples/resources/testDataLoxelEngine/data/blocks/ice.png diff --git a/resources/testDataLoxelEngine/data/blocks/ice_packed.png b/samples/resources/testDataLoxelEngine/data/blocks/ice_packed.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/ice_packed.png rename to samples/resources/testDataLoxelEngine/data/blocks/ice_packed.png diff --git a/resources/testDataLoxelEngine/data/blocks/ice_packed.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/ice_packed.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/ice_packed.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/ice_packed.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/iron_bars.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_bars.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_bars.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_bars.png diff --git a/resources/testDataLoxelEngine/data/blocks/iron_bars_top.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_bars_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_bars_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_bars_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/iron_block.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/iron_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/iron_top.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/iron_trapdoor.png b/samples/resources/testDataLoxelEngine/data/blocks/iron_trapdoor.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/iron_trapdoor.png rename to samples/resources/testDataLoxelEngine/data/blocks/iron_trapdoor.png diff --git a/resources/testDataLoxelEngine/data/blocks/itemframe_background.png b/samples/resources/testDataLoxelEngine/data/blocks/itemframe_background.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/itemframe_background.png rename to samples/resources/testDataLoxelEngine/data/blocks/itemframe_background.png diff --git a/resources/testDataLoxelEngine/data/blocks/jukebox_side.png b/samples/resources/testDataLoxelEngine/data/blocks/jukebox_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/jukebox_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/jukebox_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/jukebox_side.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/jukebox_side.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/jukebox_side.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/jukebox_side.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/jukebox_top.png b/samples/resources/testDataLoxelEngine/data/blocks/jukebox_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/jukebox_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/jukebox_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/lapis_block.png b/samples/resources/testDataLoxelEngine/data/blocks/lapis_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lapis_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/lapis_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/lapis_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/lapis_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lapis_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/lapis_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/lava_flow.png b/samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_flow.png rename to samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png diff --git a/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta copy b/samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta copy similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta copy rename to samples/resources/testDataLoxelEngine/data/blocks/lava_flow.png.mcmeta copy diff --git a/resources/testDataLoxelEngine/data/blocks/lava_still.png b/samples/resources/testDataLoxelEngine/data/blocks/lava_still.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_still.png rename to samples/resources/testDataLoxelEngine/data/blocks/lava_still.png diff --git a/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta copy b/samples/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta copy similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta copy rename to samples/resources/testDataLoxelEngine/data/blocks/lava_still.png.mcmeta copy diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_acacia.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_acacia.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_acacia.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_acacia.png diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_big_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_big_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_big_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_big_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_birch.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_birch.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_birch.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_birch.png diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_jungle.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_jungle.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_jungle.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_jungle.png diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/leaves_spruce.png b/samples/resources/testDataLoxelEngine/data/blocks/leaves_spruce.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/leaves_spruce.png rename to samples/resources/testDataLoxelEngine/data/blocks/leaves_spruce.png diff --git a/resources/testDataLoxelEngine/data/blocks/lever.png b/samples/resources/testDataLoxelEngine/data/blocks/lever.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/lever.png rename to samples/resources/testDataLoxelEngine/data/blocks/lever.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_acacia.png b/samples/resources/testDataLoxelEngine/data/blocks/log_acacia.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_acacia.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_acacia.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_acacia_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_acacia_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_acacia_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_acacia_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_big_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/log_big_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_big_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_big_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_big_oak_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_big_oak_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_big_oak_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_big_oak_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_birch.png b/samples/resources/testDataLoxelEngine/data/blocks/log_birch.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_birch.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_birch.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_birch_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_birch_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_birch_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_birch_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_jungle.png b/samples/resources/testDataLoxelEngine/data/blocks/log_jungle.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_jungle.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_jungle.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_jungle_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_jungle_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_jungle_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_jungle_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/log_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_oak_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_oak_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_oak_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_oak_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_spruce.png b/samples/resources/testDataLoxelEngine/data/blocks/log_spruce.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_spruce.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_spruce.png diff --git a/resources/testDataLoxelEngine/data/blocks/log_spruce_top.png b/samples/resources/testDataLoxelEngine/data/blocks/log_spruce_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/log_spruce_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/log_spruce_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/melon_side.png b/samples/resources/testDataLoxelEngine/data/blocks/melon_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/melon_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/melon_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/melon_stem_connected.png b/samples/resources/testDataLoxelEngine/data/blocks/melon_stem_connected.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/melon_stem_connected.png rename to samples/resources/testDataLoxelEngine/data/blocks/melon_stem_connected.png diff --git a/resources/testDataLoxelEngine/data/blocks/melon_stem_disconnected.png b/samples/resources/testDataLoxelEngine/data/blocks/melon_stem_disconnected.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/melon_stem_disconnected.png rename to samples/resources/testDataLoxelEngine/data/blocks/melon_stem_disconnected.png diff --git a/resources/testDataLoxelEngine/data/blocks/melon_top.png b/samples/resources/testDataLoxelEngine/data/blocks/melon_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/melon_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/melon_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/mob_spawner.png b/samples/resources/testDataLoxelEngine/data/blocks/mob_spawner.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mob_spawner.png rename to samples/resources/testDataLoxelEngine/data/blocks/mob_spawner.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_block_inside.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_inside.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_block_inside.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_inside.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_brown.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_brown.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_brown.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_brown.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_red.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_red.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_red.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_red.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_stem.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_stem.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_stem.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_block_skin_stem.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_brown.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_brown.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_brown.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_brown.png diff --git a/resources/testDataLoxelEngine/data/blocks/mushroom_red.png b/samples/resources/testDataLoxelEngine/data/blocks/mushroom_red.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mushroom_red.png rename to samples/resources/testDataLoxelEngine/data/blocks/mushroom_red.png diff --git a/resources/testDataLoxelEngine/data/blocks/mycelium_side.png b/samples/resources/testDataLoxelEngine/data/blocks/mycelium_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mycelium_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/mycelium_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/mycelium_top.png b/samples/resources/testDataLoxelEngine/data/blocks/mycelium_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/mycelium_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/mycelium_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/nether_brick.png b/samples/resources/testDataLoxelEngine/data/blocks/nether_brick.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_brick.png rename to samples/resources/testDataLoxelEngine/data/blocks/nether_brick.png diff --git a/resources/testDataLoxelEngine/data/blocks/nether_portal.png b/samples/resources/testDataLoxelEngine/data/blocks/nether_portal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_portal.png rename to samples/resources/testDataLoxelEngine/data/blocks/nether_portal.png diff --git a/resources/testDataLoxelEngine/data/blocks/nether_portal.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/nether_portal.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_portal.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/nether_portal.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_0.png b/samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_wart_stage_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_1.png b/samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_wart_stage_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_2.png b/samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/nether_wart_stage_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/nether_wart_stage_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/netherrack.png b/samples/resources/testDataLoxelEngine/data/blocks/netherrack.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/netherrack.png rename to samples/resources/testDataLoxelEngine/data/blocks/netherrack.png diff --git a/resources/testDataLoxelEngine/data/blocks/noteblock.png b/samples/resources/testDataLoxelEngine/data/blocks/noteblock.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/noteblock.png rename to samples/resources/testDataLoxelEngine/data/blocks/noteblock.png diff --git a/resources/testDataLoxelEngine/data/blocks/obsidian.png b/samples/resources/testDataLoxelEngine/data/blocks/obsidian.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/obsidian.png rename to samples/resources/testDataLoxelEngine/data/blocks/obsidian.png diff --git a/resources/testDataLoxelEngine/data/blocks/piston_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/piston_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/piston_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/piston_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/piston_inner.png b/samples/resources/testDataLoxelEngine/data/blocks/piston_inner.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/piston_inner.png rename to samples/resources/testDataLoxelEngine/data/blocks/piston_inner.png diff --git a/resources/testDataLoxelEngine/data/blocks/piston_side.png b/samples/resources/testDataLoxelEngine/data/blocks/piston_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/piston_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/piston_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/piston_top_normal.png b/samples/resources/testDataLoxelEngine/data/blocks/piston_top_normal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/piston_top_normal.png rename to samples/resources/testDataLoxelEngine/data/blocks/piston_top_normal.png diff --git a/resources/testDataLoxelEngine/data/blocks/piston_top_sticky.png b/samples/resources/testDataLoxelEngine/data/blocks/piston_top_sticky.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/piston_top_sticky.png rename to samples/resources/testDataLoxelEngine/data/blocks/piston_top_sticky.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_acacia.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_acacia.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_acacia.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_acacia.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_big_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_big_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_big_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_big_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_birch.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_birch.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_birch.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_birch.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_jungle.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_jungle.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_jungle.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_jungle.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_oak.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_oak.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_oak.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_oak.png diff --git a/resources/testDataLoxelEngine/data/blocks/planks_spruce.png b/samples/resources/testDataLoxelEngine/data/blocks/planks_spruce.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/planks_spruce.png rename to samples/resources/testDataLoxelEngine/data/blocks/planks_spruce.png diff --git a/resources/testDataLoxelEngine/data/blocks/portal.png b/samples/resources/testDataLoxelEngine/data/blocks/portal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/portal.png rename to samples/resources/testDataLoxelEngine/data/blocks/portal.png diff --git a/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta copy b/samples/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta copy similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta copy rename to samples/resources/testDataLoxelEngine/data/blocks/portal.png.mcmeta copy diff --git a/resources/testDataLoxelEngine/data/blocks/portal_effect.png b/samples/resources/testDataLoxelEngine/data/blocks/portal_effect.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/portal_effect.png rename to samples/resources/testDataLoxelEngine/data/blocks/portal_effect.png diff --git a/resources/testDataLoxelEngine/data/blocks/portal_effect.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/portal_effect.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/portal_effect.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/portal_effect.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/potatoes_stage_0.png b/samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/potatoes_stage_0.png rename to samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_0.png diff --git a/resources/testDataLoxelEngine/data/blocks/potatoes_stage_1.png b/samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/potatoes_stage_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/potatoes_stage_2.png b/samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/potatoes_stage_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/potatoes_stage_3.png b/samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_3.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/potatoes_stage_3.png rename to samples/resources/testDataLoxelEngine/data/blocks/potatoes_stage_3.png diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_bricks.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_dark.png b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_dark.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_dark.png rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_dark.png diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_rough.png rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta copy b/samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta copy similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta copy rename to samples/resources/testDataLoxelEngine/data/blocks/prismarine_rough.png.mcmeta copy diff --git a/resources/testDataLoxelEngine/data/blocks/pumpkin_face_off.png b/samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/pumpkin_face_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png b/samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/pumpkin_face_on.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/pumpkin_side.png b/samples/resources/testDataLoxelEngine/data/blocks/pumpkin_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/pumpkin_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/pumpkin_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/pumpkin_top.png b/samples/resources/testDataLoxelEngine/data/blocks/pumpkin_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/pumpkin_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/pumpkin_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/purpur_block.png b/samples/resources/testDataLoxelEngine/data/blocks/purpur_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/purpur_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/purpur_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/purpur_pillar.png b/samples/resources/testDataLoxelEngine/data/blocks/purpur_pillar.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/purpur_pillar.png rename to samples/resources/testDataLoxelEngine/data/blocks/purpur_pillar.png diff --git a/resources/testDataLoxelEngine/data/blocks/purpur_pillar_top.png b/samples/resources/testDataLoxelEngine/data/blocks/purpur_pillar_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/purpur_pillar_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/purpur_pillar_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled_top.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_chiseled_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_lines.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_lines.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_lines.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_lines.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_lines_top.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_lines_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_lines_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_lines_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_side.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_block_top.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_block_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_block_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_block_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/quartz_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/quartz_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/quartz_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/quartz_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_activator.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_activator.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_activator.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_activator.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/rail_activator_powered.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/rail_detector.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_detector.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_detector.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_detector.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/rail_detector_powered.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/rail_golden.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_golden.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_golden.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_golden.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/rail_golden_powered.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/rail_normal.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_normal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_normal.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_normal.png diff --git a/resources/testDataLoxelEngine/data/blocks/rail_normal_turned.png b/samples/resources/testDataLoxelEngine/data/blocks/rail_normal_turned.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/rail_normal_turned.png rename to samples/resources/testDataLoxelEngine/data/blocks/rail_normal_turned.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sand.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sand.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sand.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sand.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_carved.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_1.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_2.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_carved_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_normal.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_normal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_normal.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_normal.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_smooth.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_smooth.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_smooth.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_smooth.png diff --git a/resources/testDataLoxelEngine/data/blocks/red_sandstone_top.png b/samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/red_sandstone_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/red_sandstone_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_block.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_block.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_block.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_block.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_block.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/redstone_block.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_block.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_block.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_dust_cross.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_cross.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_dust_cross.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_cross.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_dust_dot.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_dot.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_dust_dot.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_dot.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_dust_line.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_dust_line.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_dust_line0.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line0.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_dust_line0.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line0.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_dust_line1.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_dust_line1.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_dust_line1.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_lamp_off.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_lamp_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_lamp_on.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_ore.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_ore.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_ore.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_ore.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_ore.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/redstone_ore.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_ore.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_ore.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_torch_off.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_torch_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png b/samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/redstone_torch_on.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/reeds.png b/samples/resources/testDataLoxelEngine/data/blocks/reeds.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/reeds.png rename to samples/resources/testDataLoxelEngine/data/blocks/reeds.png diff --git a/resources/testDataLoxelEngine/data/blocks/repeater_off.png b/samples/resources/testDataLoxelEngine/data/blocks/repeater_off.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/repeater_off.png rename to samples/resources/testDataLoxelEngine/data/blocks/repeater_off.png diff --git a/resources/testDataLoxelEngine/data/blocks/repeater_on.png b/samples/resources/testDataLoxelEngine/data/blocks/repeater_on.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/repeater_on.png rename to samples/resources/testDataLoxelEngine/data/blocks/repeater_on.png diff --git a/resources/testDataLoxelEngine/data/blocks/sand.png b/samples/resources/testDataLoxelEngine/data/blocks/sand.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sand.png rename to samples/resources/testDataLoxelEngine/data/blocks/sand.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_carved.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_carved.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_carved_1.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_carved_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_carved_2.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_carved_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_carved_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_normal.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_normal.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_normal.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_normal.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_smooth.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_smooth.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_smooth.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_smooth.png diff --git a/resources/testDataLoxelEngine/data/blocks/sandstone_top.png b/samples/resources/testDataLoxelEngine/data/blocks/sandstone_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sandstone_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/sandstone_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/sea_lantern.png b/samples/resources/testDataLoxelEngine/data/blocks/sea_lantern.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sea_lantern.png rename to samples/resources/testDataLoxelEngine/data/blocks/sea_lantern.png diff --git a/resources/testDataLoxelEngine/data/blocks/slime.png b/samples/resources/testDataLoxelEngine/data/blocks/slime.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/slime.png rename to samples/resources/testDataLoxelEngine/data/blocks/slime.png diff --git a/resources/testDataLoxelEngine/data/blocks/snow.png b/samples/resources/testDataLoxelEngine/data/blocks/snow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/snow.png rename to samples/resources/testDataLoxelEngine/data/blocks/snow.png diff --git a/resources/testDataLoxelEngine/data/blocks/soul_sand.png b/samples/resources/testDataLoxelEngine/data/blocks/soul_sand.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/soul_sand.png rename to samples/resources/testDataLoxelEngine/data/blocks/soul_sand.png diff --git a/resources/testDataLoxelEngine/data/blocks/sponge.png b/samples/resources/testDataLoxelEngine/data/blocks/sponge.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sponge.png rename to samples/resources/testDataLoxelEngine/data/blocks/sponge.png diff --git a/resources/testDataLoxelEngine/data/blocks/sponge_wet.png b/samples/resources/testDataLoxelEngine/data/blocks/sponge_wet.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sponge_wet.png rename to samples/resources/testDataLoxelEngine/data/blocks/sponge_wet.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone.png b/samples/resources/testDataLoxelEngine/data/blocks/stone.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_andesite.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_andesite.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_andesite.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_andesite.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_andesite_smooth.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_andesite_smooth.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_andesite_smooth.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_andesite_smooth.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_diorite.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_diorite.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_diorite.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_diorite.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_diorite_smooth.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_diorite_smooth.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_diorite_smooth.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_diorite_smooth.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_granite.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_granite.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_granite.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_granite.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_granite_smooth.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_granite_smooth.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_granite_smooth.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_granite_smooth.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_slab_side.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_slab_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_slab_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_slab_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/stone_slab_top.png b/samples/resources/testDataLoxelEngine/data/blocks/stone_slab_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stone_slab_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/stone_slab_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_1.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_2.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_carved.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_carved.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_carved.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_carved.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_cracked.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_1.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_1.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_1.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_1.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_2.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_2.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_2.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_cracked_2.png diff --git a/resources/testDataLoxelEngine/data/blocks/stonebrick_mossy.png b/samples/resources/testDataLoxelEngine/data/blocks/stonebrick_mossy.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/stonebrick_mossy.png rename to samples/resources/testDataLoxelEngine/data/blocks/stonebrick_mossy.png diff --git a/resources/testDataLoxelEngine/data/blocks/sunflower_head.png b/samples/resources/testDataLoxelEngine/data/blocks/sunflower_head.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sunflower_head.png rename to samples/resources/testDataLoxelEngine/data/blocks/sunflower_head.png diff --git a/resources/testDataLoxelEngine/data/blocks/sunflower_stem.png b/samples/resources/testDataLoxelEngine/data/blocks/sunflower_stem.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/sunflower_stem.png rename to samples/resources/testDataLoxelEngine/data/blocks/sunflower_stem.png diff --git a/resources/testDataLoxelEngine/data/blocks/tallgrass.png b/samples/resources/testDataLoxelEngine/data/blocks/tallgrass.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/tallgrass.png rename to samples/resources/testDataLoxelEngine/data/blocks/tallgrass.png diff --git a/resources/testDataLoxelEngine/data/blocks/tnt_bottom.png b/samples/resources/testDataLoxelEngine/data/blocks/tnt_bottom.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/tnt_bottom.png rename to samples/resources/testDataLoxelEngine/data/blocks/tnt_bottom.png diff --git a/resources/testDataLoxelEngine/data/blocks/tnt_side.png b/samples/resources/testDataLoxelEngine/data/blocks/tnt_side.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/tnt_side.png rename to samples/resources/testDataLoxelEngine/data/blocks/tnt_side.png diff --git a/resources/testDataLoxelEngine/data/blocks/tnt_top.png b/samples/resources/testDataLoxelEngine/data/blocks/tnt_top.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/tnt_top.png rename to samples/resources/testDataLoxelEngine/data/blocks/tnt_top.png diff --git a/resources/testDataLoxelEngine/data/blocks/trapdoor.png b/samples/resources/testDataLoxelEngine/data/blocks/trapdoor.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/trapdoor.png rename to samples/resources/testDataLoxelEngine/data/blocks/trapdoor.png diff --git a/resources/testDataLoxelEngine/data/blocks/trip_wire.png b/samples/resources/testDataLoxelEngine/data/blocks/trip_wire.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/trip_wire.png rename to samples/resources/testDataLoxelEngine/data/blocks/trip_wire.png diff --git a/resources/testDataLoxelEngine/data/blocks/trip_wire_source.png b/samples/resources/testDataLoxelEngine/data/blocks/trip_wire_source.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/trip_wire_source.png rename to samples/resources/testDataLoxelEngine/data/blocks/trip_wire_source.png diff --git a/resources/testDataLoxelEngine/data/blocks/vine.png b/samples/resources/testDataLoxelEngine/data/blocks/vine.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/vine.png rename to samples/resources/testDataLoxelEngine/data/blocks/vine.png diff --git a/resources/testDataLoxelEngine/data/blocks/water_flow.png b/samples/resources/testDataLoxelEngine/data/blocks/water_flow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/water_flow.png rename to samples/resources/testDataLoxelEngine/data/blocks/water_flow.png diff --git a/resources/testDataLoxelEngine/data/blocks/water_flow.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/water_flow.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/water_flow.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/water_flow.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/water_static.png b/samples/resources/testDataLoxelEngine/data/blocks/water_static.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/water_static.png rename to samples/resources/testDataLoxelEngine/data/blocks/water_static.png diff --git a/resources/testDataLoxelEngine/data/blocks/water_still.png b/samples/resources/testDataLoxelEngine/data/blocks/water_still.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/water_still.png rename to samples/resources/testDataLoxelEngine/data/blocks/water_still.png diff --git a/resources/testDataLoxelEngine/data/blocks/water_still.png.mcmeta b/samples/resources/testDataLoxelEngine/data/blocks/water_still.png.mcmeta similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/water_still.png.mcmeta rename to samples/resources/testDataLoxelEngine/data/blocks/water_still.png.mcmeta diff --git a/resources/testDataLoxelEngine/data/blocks/waterlily.png b/samples/resources/testDataLoxelEngine/data/blocks/waterlily.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/waterlily.png rename to samples/resources/testDataLoxelEngine/data/blocks/waterlily.png diff --git a/resources/testDataLoxelEngine/data/blocks/web.png b/samples/resources/testDataLoxelEngine/data/blocks/web.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/web.png rename to samples/resources/testDataLoxelEngine/data/blocks/web.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_black.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_black.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_black.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_black.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_brown.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_brown.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_brown.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_brown.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_cyan.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_cyan.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_cyan.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_cyan.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_gray.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_gray.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_gray.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_gray.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_green.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_green.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_green.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_green.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_light_blue.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_light_blue.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_light_blue.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_light_blue.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_lime.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_lime.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_lime.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_lime.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_magenta.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_magenta.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_magenta.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_magenta.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_orange.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_orange.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_orange.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_orange.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_pink.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_pink.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_pink.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_pink.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_purple.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_purple.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_purple.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_purple.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_red.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_red.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_red.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_red.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_silver.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_silver.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_silver.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_silver.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_white.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_white.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_white.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_white.png diff --git a/resources/testDataLoxelEngine/data/blocks/wool_colored_yellow.png b/samples/resources/testDataLoxelEngine/data/blocks/wool_colored_yellow.png similarity index 100% rename from resources/testDataLoxelEngine/data/blocks/wool_colored_yellow.png rename to samples/resources/testDataLoxelEngine/data/blocks/wool_colored_yellow.png diff --git a/samples/src/sample/atriasoft/ege/collisiontest/CollisionTestApplication.java b/samples/src/sample/atriasoft/ege/collisiontest/CollisionTestApplication.java index 8d6ebe6..cb76b18 100644 --- a/samples/src/sample/atriasoft/ege/collisiontest/CollisionTestApplication.java +++ b/samples/src/sample/atriasoft/ege/collisiontest/CollisionTestApplication.java @@ -40,7 +40,7 @@ import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.Gale; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.Flag; -import org.atriasoft.gale.context.Context; +import org.atriasoft.gale.context.GaleContext; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; @@ -71,7 +71,7 @@ public class CollisionTestApplication extends GaleApplication { public CollisionTestApplication() {} @Override - public void onCreate(final Context context) { + public void onCreate(final GaleContext context) { // set the system global max speed //ComponentPhysics.globalMaxSpeed = 3; Gale.getContext().grabPointerEvents(true, new Vector2f(0, 0)); @@ -219,7 +219,7 @@ public class CollisionTestApplication extends GaleApplication { } @Override - public void onDraw(final Context context) { + public void onDraw(final GaleContext context) { //Log.info("==> appl Draw ..."); final Vector2f size = getSize(); // Store openGl context. @@ -298,7 +298,7 @@ public class CollisionTestApplication extends GaleApplication { @Override public void onKeyboard(final KeySpecial special, final KeyKeyboard type, final Character value, final KeyStatus state) { - if (type == KeyKeyboard.f1) { + if (type == KeyKeyboard.F1) { Gale.getContext().grabPointerEvents(false, new Vector2f(0, 0)); } if (type == KeyKeyboard.F2) { @@ -316,7 +316,7 @@ public class CollisionTestApplication extends GaleApplication { } @Override - public void onRegenerateDisplay(final Context context) { + public void onRegenerateDisplay(final GaleContext context) { //Log.verbose("Regenerate Gale Application"); this.angleLight += 0.01; final Vector3f posss = this.lightPosition.getTransform().getPosition().add(new Vector3f(5 + (float) Math.cos(this.angleLight) * 7.0f, 5 + (float) Math.sin(this.angleLight) * 7.0f, 0)); diff --git a/samples/src/sample/atriasoft/ege/lowPoly/LowPolyApplication.java b/samples/src/sample/atriasoft/ege/lowPoly/LowPolyApplication.java index 347d629..73d01b1 100644 --- a/samples/src/sample/atriasoft/ege/lowPoly/LowPolyApplication.java +++ b/samples/src/sample/atriasoft/ege/lowPoly/LowPolyApplication.java @@ -28,7 +28,7 @@ import org.atriasoft.etk.math.Vector3f; import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.Flag; -import org.atriasoft.gale.context.Context; +import org.atriasoft.gale.context.GaleContext; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; @@ -47,7 +47,7 @@ public class LowPolyApplication extends GaleApplication { public LowPolyApplication() {} @Override - public void onCreate(final Context context) { + public void onCreate(final GaleContext context) { this.env = new Environement(); setSize(new Vector2f(800, 600)); setTitle("Low Poly sample"); @@ -116,7 +116,7 @@ public class LowPolyApplication extends GaleApplication { } @Override - public void onDraw(final Context context) { + public void onDraw(final GaleContext context) { //Log.info("==> appl Draw ..."); final Vector2f size = getSize(); // Store openGl context. @@ -153,7 +153,7 @@ public class LowPolyApplication extends GaleApplication { } @Override - public void onRegenerateDisplay(final Context context) { + public void onRegenerateDisplay(final GaleContext context) { //Log.verbose("Regenerate Gale Application"); //materialCube.setAmbientFactor(new Vector3f(1.0f,1.0f,1.0f)); // apply a little rotation to show the element move diff --git a/samples/src/sample/atriasoft/ege/loxelEngine/LoxelApplication.java b/samples/src/sample/atriasoft/ege/loxelEngine/LoxelApplication.java index 6ae63bf..f725941 100644 --- a/samples/src/sample/atriasoft/ege/loxelEngine/LoxelApplication.java +++ b/samples/src/sample/atriasoft/ege/loxelEngine/LoxelApplication.java @@ -41,7 +41,7 @@ import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.Gale; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.Flag; -import org.atriasoft.gale.context.Context; +import org.atriasoft.gale.context.GaleContext; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; @@ -74,7 +74,7 @@ public class LoxelApplication extends GaleApplication { } @Override - public void onCreate(final Context context) { + public void onCreate(final GaleContext context) { // set the system global max speed //ComponentPhysics.globalMaxSpeed = 3; Gale.getContext().grabPointerEvents(true, new Vector2f(0, 0)); @@ -331,7 +331,7 @@ public class LoxelApplication extends GaleApplication { } @Override - public void onDraw(final Context context) { + public void onDraw(final GaleContext context) { //Log.info("==> appl Draw ..."); final Vector2f size = getSize(); // Store openGl context. @@ -408,7 +408,7 @@ public class LoxelApplication extends GaleApplication { @Override public void onKeyboard(final KeySpecial special, final KeyKeyboard type, final Character value, final KeyStatus state) { - if (type == KeyKeyboard.f1) { + if (type == KeyKeyboard.F1) { Gale.getContext().grabPointerEvents(false, new Vector2f(0, 0)); } if (type == KeyKeyboard.F2) { @@ -426,7 +426,7 @@ public class LoxelApplication extends GaleApplication { } @Override - public void onRegenerateDisplay(final Context context) { + public void onRegenerateDisplay(final GaleContext context) { //Log.verbose("Regenerate Gale Application"); this.angleLight += 0.01; this.lightPosition.setTransform(this.lightPosition.getTransform() diff --git a/samples/src/sample/atriasoft/ege/s1_texturedCube/S1Application.java b/samples/src/sample/atriasoft/ege/s1_texturedCube/S1Application.java index a742759..c0f19af 100644 --- a/samples/src/sample/atriasoft/ege/s1_texturedCube/S1Application.java +++ b/samples/src/sample/atriasoft/ege/s1_texturedCube/S1Application.java @@ -21,7 +21,7 @@ import org.atriasoft.etk.math.Vector3f; import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.Flag; -import org.atriasoft.gale.context.Context; +import org.atriasoft.gale.context.GaleContext; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; @@ -39,7 +39,7 @@ public class S1Application extends GaleApplication { public S1Application() {} @Override - public void onCreate(final Context context) { + public void onCreate(final GaleContext context) { Log.info("On create .... [BEGIN]"); this.env = new Environement(); setSize(new Vector2f(800, 600)); @@ -78,7 +78,7 @@ public class S1Application extends GaleApplication { } @Override - public void onDraw(final Context context) { + public void onDraw(final GaleContext context) { Log.info("On draw .... [BEGIN]"); //Log.info("==> appl Draw ..."); final Vector2f size = getSize(); @@ -117,7 +117,7 @@ public class S1Application extends GaleApplication { } @Override - public void onRegenerateDisplay(final Context context) { + public void onRegenerateDisplay(final GaleContext context) { Log.info("On Regenerate Display .... [BEGIN]"); //Log.verbose("Regenerate Gale Application"); diff --git a/src/module-info.java b/src/module-info.java index 9b387ec..f366b65 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -10,12 +10,10 @@ open module org.atriasoft.ege { exports org.atriasoft.ege.geometry; exports org.atriasoft.ege.map; exports org.atriasoft.ege.physics.shape; - exports org.atriasoft.ege.resource; exports org.atriasoft.ege.tools; exports entities; exports guis; exports models; - exports objConverter; exports renderEngine; exports shaders; exports skybox; @@ -27,4 +25,5 @@ open module org.atriasoft.ege { requires transitive org.atriasoft.etk; requires transitive org.atriasoft.ewol; requires transitive org.atriasoft.ephysics; + requires org.atriasoft.loader3d; } diff --git a/src/objConverter/ModelData.java b/src/objConverter/ModelData.java deleted file mode 100644 index 0713eda..0000000 --- a/src/objConverter/ModelData.java +++ /dev/null @@ -1,40 +0,0 @@ -package objConverter; - -public class ModelData { - - private float[] vertices; - private float[] textureCoords; - private float[] normals; - private int[] indices; - private float furthestPoint; - - public ModelData(float[] vertices, float[] textureCoords, float[] normals, int[] indices, - float furthestPoint) { - this.vertices = vertices; - this.textureCoords = textureCoords; - this.normals = normals; - this.indices = indices; - this.furthestPoint = furthestPoint; - } - - public float[] getVertices() { - return vertices; - } - - public float[] getTextureCoords() { - return textureCoords; - } - - public float[] getNormals() { - return normals; - } - - public int[] getIndices() { - return indices; - } - - public float getFurthestPoint() { - return furthestPoint; - } - -} diff --git a/src/objConverter/OBJFileLoader.java b/src/objConverter/OBJFileLoader.java deleted file mode 100644 index 06bb09b..0000000 --- a/src/objConverter/OBJFileLoader.java +++ /dev/null @@ -1,164 +0,0 @@ -package objConverter; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; - -import org.atriasoft.ege.internal.Log; -import org.atriasoft.etk.Uri; -import org.atriasoft.etk.math.Vector2f; -import org.atriasoft.etk.math.Vector3f; - -public class OBJFileLoader { - private static float convertDataToArrays(final List vertices, final List textures, final List normals, final float[] verticesArray, final float[] texturesArray, - final float[] normalsArray) { - float furthestPoint = 0; - for (int i = 0; i < vertices.size(); i++) { - final Vertex currentVertex = vertices.get(i); - if (currentVertex.getLength() > furthestPoint) { - furthestPoint = currentVertex.getLength(); - } - final Vector3f position = currentVertex.getPosition(); - final Vector2f textureCoord = textures.get(currentVertex.getTextureIndex()); - final Vector3f normalVector = normals.get(currentVertex.getNormalIndex()); - verticesArray[i * 3] = position.x(); - verticesArray[i * 3 + 1] = position.y(); - verticesArray[i * 3 + 2] = position.z(); - texturesArray[i * 2] = textureCoord.x(); - texturesArray[i * 2 + 1] = 1 - textureCoord.y(); - normalsArray[i * 3] = normalVector.x(); - normalsArray[i * 3 + 1] = normalVector.y(); - normalsArray[i * 3 + 2] = normalVector.z(); - } - return furthestPoint; - } - - private static int[] convertIndicesListToArray(final List indices) { - final int[] indicesArray = new int[indices.size()]; - for (int i = 0; i < indicesArray.length; i++) { - indicesArray[i] = indices.get(i); - } - return indicesArray; - } - - private static void dealWithAlreadyProcessedVertex(final Vertex previousVertex, final int newTextureIndex, final int newNormalIndex, final List indices, final List vertices) { - if (previousVertex.hasSameTextureAndNormal(newTextureIndex, newNormalIndex)) { - indices.add(previousVertex.getIndex()); - } else { - final Vertex anotherVertex = previousVertex.getDuplicateVertex(); - if (anotherVertex != null) { - OBJFileLoader.dealWithAlreadyProcessedVertex(anotherVertex, newTextureIndex, newNormalIndex, indices, vertices); - } else { - final Vertex duplicateVertex = new Vertex(vertices.size(), previousVertex.getPosition()); - duplicateVertex.setTextureIndex(newTextureIndex); - duplicateVertex.setNormalIndex(newNormalIndex); - previousVertex.setDuplicateVertex(duplicateVertex); - vertices.add(duplicateVertex); - indices.add(duplicateVertex.getIndex()); - } - - } - } - - public static ModelData loadOBJ(final Uri objFileName) { - final InputStream stream = Uri.getStream(objFileName); - if (stream == null) { - Log.error("Can not read file: " + objFileName + " ==> load OBJ"); - return null; - } - /* - final FileReader isr = null; - final File objFile = new File(objFileName); - try { - isr = new FileReader(objFile); - } catch (final FileNotFoundException e) { - System.err.println("File not found in res; don't use any extention"); - return null; - } - */ - BufferedReader reader; - try { - reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); - } catch (final UnsupportedEncodingException e1) { - Log.error("Error in loading file: " + objFileName + " ==> load OBJ"); - e1.printStackTrace(); - return null; - } - String line; - final List vertices = new ArrayList<>(); - final List textures = new ArrayList<>(); - final List normals = new ArrayList<>(); - final List indices = new ArrayList<>(); - try { - while (true) { - line = reader.readLine(); - if (line.startsWith("v ")) { - final String[] currentLine = line.split(" "); - final Vector3f vertex = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); - final Vertex newVertex = new Vertex(vertices.size(), vertex); - vertices.add(newVertex); - - } else if (line.startsWith("vt ")) { - final String[] currentLine = line.split(" "); - final Vector2f texture = new Vector2f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2])); - textures.add(texture); - } else if (line.startsWith("vn ")) { - final String[] currentLine = line.split(" "); - final Vector3f normal = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); - normals.add(normal); - } else if (line.startsWith("f ")) { - break; - } - } - while (line != null && line.startsWith("f ")) { - final String[] currentLine = line.split(" "); - final String[] vertex1 = currentLine[1].split("/"); - final String[] vertex2 = currentLine[2].split("/"); - final String[] vertex3 = currentLine[3].split("/"); - OBJFileLoader.processVertex(vertex1, vertices, indices); - OBJFileLoader.processVertex(vertex2, vertices, indices); - OBJFileLoader.processVertex(vertex3, vertices, indices); - line = reader.readLine(); - } - reader.close(); - } catch (final IOException e) { - System.err.println("Error reading the file"); - } - OBJFileLoader.removeUnusedVertices(vertices); - final float[] verticesArray = new float[vertices.size() * 3]; - final float[] texturesArray = new float[vertices.size() * 2]; - final float[] normalsArray = new float[vertices.size() * 3]; - final float furthest = OBJFileLoader.convertDataToArrays(vertices, textures, normals, verticesArray, texturesArray, normalsArray); - final int[] indicesArray = OBJFileLoader.convertIndicesListToArray(indices); - final ModelData data = new ModelData(verticesArray, texturesArray, normalsArray, indicesArray, furthest); - return data; - } - - private static void processVertex(final String[] vertex, final List vertices, final List indices) { - final int index = Integer.parseInt(vertex[0]) - 1; - final Vertex currentVertex = vertices.get(index); - final int textureIndex = Integer.parseInt(vertex[1]) - 1; - final int normalIndex = Integer.parseInt(vertex[2]) - 1; - if (!currentVertex.isSet()) { - currentVertex.setTextureIndex(textureIndex); - currentVertex.setNormalIndex(normalIndex); - indices.add(index); - } else { - OBJFileLoader.dealWithAlreadyProcessedVertex(currentVertex, textureIndex, normalIndex, indices, vertices); - } - } - - private static void removeUnusedVertices(final List vertices) { - for (final Vertex vertex : vertices) { - if (!vertex.isSet()) { - vertex.setTextureIndex(0); - vertex.setNormalIndex(0); - } - } - } - -} \ No newline at end of file diff --git a/src/objConverter/Vertex.java b/src/objConverter/Vertex.java deleted file mode 100644 index 1a7e315..0000000 --- a/src/objConverter/Vertex.java +++ /dev/null @@ -1,66 +0,0 @@ -package objConverter; - -import org.atriasoft.etk.math.Vector3f; - -public class Vertex { - - private static final int NO_INDEX = -1; - - private Vector3f position; - private int textureIndex = NO_INDEX; - private int normalIndex = NO_INDEX; - private Vertex duplicateVertex = null; - private int index; - private float length; - - public Vertex(int index,Vector3f position){ - this.index = index; - this.position = position; - this.length = position.length(); - } - - public int getIndex(){ - return index; - } - - public float getLength(){ - return length; - } - - public boolean isSet(){ - return textureIndex!=NO_INDEX && normalIndex!=NO_INDEX; - } - - public boolean hasSameTextureAndNormal(int textureIndexOther,int normalIndexOther){ - return textureIndexOther==textureIndex && normalIndexOther==normalIndex; - } - - public void setTextureIndex(int textureIndex){ - this.textureIndex = textureIndex; - } - - public void setNormalIndex(int normalIndex){ - this.normalIndex = normalIndex; - } - - public Vector3f getPosition() { - return position; - } - - public int getTextureIndex() { - return textureIndex; - } - - public int getNormalIndex() { - return normalIndex; - } - - public Vertex getDuplicateVertex() { - return duplicateVertex; - } - - public void setDuplicateVertex(Vertex duplicateVertex) { - this.duplicateVertex = duplicateVertex; - } - -} diff --git a/src/org/atriasoft/ege/components/ComponentDynamicMeshs.java b/src/org/atriasoft/ege/components/ComponentDynamicMeshs.java index 6573f46..6df45df 100644 --- a/src/org/atriasoft/ege/components/ComponentDynamicMeshs.java +++ b/src/org/atriasoft/ege/components/ComponentDynamicMeshs.java @@ -6,9 +6,9 @@ import java.util.Set; import org.atriasoft.ege.Component; import org.atriasoft.etk.Uri; +import org.atriasoft.loader3d.resources.ResourceStaticMesh; +import org.atriasoft.loader3d.resources.ResourceStaticMeshObj; import org.atriasoft.ege.engines.EngineDynamicMeshs; -import org.atriasoft.ege.resource.ResourceStaticMesh; -import org.atriasoft.ege.resource.ResourceStaticMeshObj; public class ComponentDynamicMeshs extends Component { protected Map meshs = new HashMap(); diff --git a/src/org/atriasoft/ege/components/ComponentStaticMesh.java b/src/org/atriasoft/ege/components/ComponentStaticMesh.java index e6b56b4..c698954 100644 --- a/src/org/atriasoft/ege/components/ComponentStaticMesh.java +++ b/src/org/atriasoft/ege/components/ComponentStaticMesh.java @@ -2,8 +2,8 @@ package org.atriasoft.ege.components; import org.atriasoft.ege.Component; import org.atriasoft.etk.Uri; -import org.atriasoft.ege.resource.ResourceStaticMesh; -import org.atriasoft.ege.resource.ResourceStaticMeshObj; +import org.atriasoft.loader3d.resources.ResourceStaticMesh; +import org.atriasoft.loader3d.resources.ResourceStaticMeshObj; public class ComponentStaticMesh extends Component { private ResourceStaticMesh mesh = null; diff --git a/src/org/atriasoft/ege/components/ComponentStaticMeshs.java b/src/org/atriasoft/ege/components/ComponentStaticMeshs.java index d8bc32c..dffad65 100644 --- a/src/org/atriasoft/ege/components/ComponentStaticMeshs.java +++ b/src/org/atriasoft/ege/components/ComponentStaticMeshs.java @@ -6,9 +6,9 @@ import java.util.Set; import org.atriasoft.ege.Component; import org.atriasoft.etk.Uri; +import org.atriasoft.loader3d.resources.ResourceStaticMesh; +import org.atriasoft.loader3d.resources.ResourceStaticMeshObj; import org.atriasoft.ege.internal.Log; -import org.atriasoft.ege.resource.ResourceStaticMesh; -import org.atriasoft.ege.resource.ResourceStaticMeshObj; public class ComponentStaticMeshs extends Component { private Map meshs = new HashMap(); diff --git a/src/org/atriasoft/ege/map/ComponentDynamicMeshsVoxelMap.java b/src/org/atriasoft/ege/map/ComponentDynamicMeshsVoxelMap.java index b21f6f8..7299094 100644 --- a/src/org/atriasoft/ege/map/ComponentDynamicMeshsVoxelMap.java +++ b/src/org/atriasoft/ege/map/ComponentDynamicMeshsVoxelMap.java @@ -2,11 +2,11 @@ package org.atriasoft.ege.map; import org.atriasoft.ege.components.ComponentDynamicMeshs; import org.atriasoft.ege.internal.Log; -import org.atriasoft.ege.resource.ResourceListTexturedMesh; import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.etk.math.Vector3i; import org.atriasoft.gale.backend3d.OpenGL.RenderMode; +import org.atriasoft.loader3d.resources.ResourceListTexturedMesh; public class ComponentDynamicMeshsVoxelMap extends ComponentDynamicMeshs { private VoxelChunk chunk; diff --git a/src/org/atriasoft/ege/resource/ResourceListTexturedMesh.java b/src/org/atriasoft/ege/resource/ResourceListTexturedMesh.java deleted file mode 100644 index 5b945d9..0000000 --- a/src/org/atriasoft/ege/resource/ResourceListTexturedMesh.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.atriasoft.ege.resource; - -import java.util.ArrayList; -import java.util.List; - -import org.atriasoft.etk.Uri; -import org.atriasoft.etk.math.Vector2f; -import org.atriasoft.etk.math.Vector3f; -import org.atriasoft.gale.backend3d.OpenGL.RenderMode; -import org.atriasoft.gale.resource.ResourceVirtualArrayObject; - -public class ResourceListTexturedMesh extends ResourceStaticMesh { - public static ResourceListTexturedMesh create(final RenderMode mode) { - ResourceListTexturedMesh resource = new ResourceListTexturedMesh(mode); - getManager().localAdd(resource); - return resource; - } - - protected List vertices = new ArrayList<>(); - protected List textureCoords = new ArrayList<>(); - protected List normals = new ArrayList<>(); - - protected List indices = new ArrayList<>(); - - protected ResourceListTexturedMesh(final RenderMode mode) { - super(mode); - } - - protected ResourceListTexturedMesh(final Uri uriFile) { - super(uriFile); - } - - public void addQuad(final Vector3f v1, final Vector3f v2, final Vector3f v3, final Vector3f v4, final Vector2f t1, final Vector2f t2, final Vector2f t3, final Vector2f t4, final Vector3f n1) { - addTriangle(v1, v2, v3, t1, t2, t3, n1, n1, n1); - addTriangle(v1, v3, v4, t1, t3, t4, n1, n1, n1); - } - - public void addQuad(final Vector3f v1, final Vector3f v2, final Vector3f v3, final Vector3f v4, final Vector2f t1, final Vector2f t2, final Vector2f t3, final Vector2f t4, final Vector3f n1, - final Vector3f n2, final Vector3f n3, final Vector3f n4) { - addTriangle(v1, v2, v3, t1, t2, t3, n1, n2, n3); - addTriangle(v1, v3, v4, t1, t3, t4, n1, n3, n4); - } - - public void addTriangle(final Vector3f v1, final Vector3f v2, final Vector3f v3, final Vector2f t1, final Vector2f t2, final Vector2f t3, final Vector3f n1, final Vector3f n2, final Vector3f n3) { - this.vertices.add(v1); - this.vertices.add(v2); - this.vertices.add(v3); - this.textureCoords.add(t1); - this.textureCoords.add(t2); - this.textureCoords.add(t3); - this.normals.add(n1); - this.normals.add(n2); - this.normals.add(n3); - this.indices.add(this.vertices.size() - 3); - this.indices.add(this.vertices.size() - 2); - this.indices.add(this.vertices.size() - 1); - } - - public void clear() { - this.vertices.clear(); - this.textureCoords.clear(); - this.normals.clear(); - this.indices.clear(); - } - - /** - * Send the data to the graphic card. - */ - public void flush() { - // request to the manager to be call at the next update ... - this.vao = ResourceVirtualArrayObject.create(toFloatV3(this.vertices), toFloatV2(this.textureCoords), toFloatV3(this.normals), toIntArray(this.indices)); - this.vao.flush(); - } - - private float[] toFloatArray(final List values) { - float[] out = new float[values.size()]; - for (int iii = 0; iii < values.size(); iii++) { - out[iii] = values.get(iii); - } - return out; - } - - private float[] toFloatV2(final List values) { - float[] out = new float[values.size() * 2]; - for (int iii = 0; iii < values.size(); iii++) { - Vector2f tmp = values.get(iii); - out[iii * 2] = tmp.x(); - out[iii * 2 + 1] = tmp.y(); - } - return out; - } - - private float[] toFloatV3(final List values) { - float[] out = new float[values.size() * 3]; - for (int iii = 0; iii < values.size(); iii++) { - Vector3f tmp = values.get(iii); - out[iii * 3] = tmp.x(); - out[iii * 3 + 1] = tmp.y(); - out[iii * 3 + 2] = tmp.z(); - } - return out; - } - - private int[] toIntArray(final List values) { - int[] out = new int[values.size()]; - for (int iii = 0; iii < values.size(); iii++) { - out[iii] = values.get(iii); - } - return out; - } - -} diff --git a/src/org/atriasoft/ege/resource/ResourceMesh.java__ b/src/org/atriasoft/ege/resource/ResourceMesh.java__ deleted file mode 100644 index 0b9c65d..0000000 --- a/src/org/atriasoft/ege/resource/ResourceMesh.java__ +++ /dev/null @@ -1,962 +0,0 @@ -package org.atriasoft.gameengine.resource; - -enum NormalMode { - none, - face, - vertex, -} - -public class ResourceMesh { - protected NormalMode normalMode; // select the normal mode of display - public void setNormalMode(NormalMode _mode) { - normalMode = _mode; - } - - protected bool checkNormal; //!< when enable, this check the normal of the mesh before sending it at the 3d card - protected: - ememory::SharedPtr GLprogram; - int32_t GLPosition; - int32_t GLMatrix; - int32_t GLMatrixPosition; - int32_t GLNormal; - int32_t GLtexture; - int32_t GLColor; - int32_t bufferOfset; - int32_t numberOfElments; - MaterialGlId GLMaterial; - ege::Light light; - protected: - etk::Vector listVertex; //!< List of all vertex in the element - etk::Vector listUV; //!< List of all UV point in the mesh (for the specify texture) - etk::Vector listColor; //!< List of all Color point in the mesh - etk::Vector listFacesNormal; //!< List of all Face normal, when calculated - etk::Vector listVertexNormal; //!< List of all Face normal, when calculated - etk::Map listFaces; //!< List of all Face for the mesh - etk::Map> materials; - etk::Vector> physics; //!< collision shape module ... (independent of bullet lib) - void clean() { - physics.clear(); - materials.clear(); - listFaces.clear(); - listColor.clear(); - listVertexNormal.clear(); - listFacesNormal.clear(); - listUV.clear(); - listVertex.clear(); - } - protected: - ememory::SharedPtr verticesVBO; - protected: - Mesh() - normalMode(ege::resource::Mesh::normalMode::none), - checkNormal(false), - GLPosition(-1), - GLMatrix(-1), - GLMatrixPosition(-1), - GLNormal(-1), - GLtexture(-1), - GLColor(-1), - bufferOfset(-1), - numberOfElments(-1), - listFaces(0,false), - materials(0,false), - pointerShape(null), - functionFreeShape(null) { - addResourceType("ege::resource::Mesh"); - } - void init(const etk::Uri& _fileName="---", - const etk::Uri& _shaderName=etk::Uri() //==> Shader is automatically selected (depending on the presence or ot of texture... - ) { - gale::Resource::init(_fileName.getString()); - EGE_VERBOSE("Load a new mesh : '" << _fileName << "'"); - // ------------------------------------------------------------------------------------------------ - // get the shader resource : - GLPosition = 0; - - light.setDirection(vec3(0.0f,0.0f,10)); - light.setHalfPlane(vec3(1.0f,0.0f,0.0f)); - light.setAmbientColor(vec4(1.0f,1.0f,1.0f,1.0f)); // Global anbiant color of the scene - light.setDiffuseColor(vec4(1.0f,1.0f,1.0f,1.0f)); // Color of the object - light.setSpecularColor(vec4(0.0f,0.0f,0.0f,1.0f)); // Light color reflection - // ------------------------------------------------------------------------------------------------ - // this is the properties of the buffer requested : "r"/"w" + "-" + buffer type "f"=flaot "i"=integer - verticesVBO = gale::resource::VirtualBufferObject::create(5); - if (verticesVBO == null) { - EGE_ERROR("can not instanciate VBO ..."); - return; - } - // TO facilitate some debugs we add a name of the VBO: - verticesVBO->setName("[VBO] of " + _fileName.getString()); - // ------------------------------------------------------------------------------------------------ - // load the curent file : - etk::String extention = etk::toLower(_fileName.getPath().getExtention()); - // select the corect loader : - if (extention == "obj") { - if (loadOBJ(_fileName) == false) { - EGE_ERROR("Error To load OBJ file " << _fileName ); - return; - } - } else if (extention == "emf") { - if (loadEMF(_fileName) == false) { - EGE_ERROR("Error To load EMF file " << _fileName ); - return; - } - //EGE_CRITICAL("Load a new mesh : '" << _fileName << "' (end)"); - } else { - // nothing to do == > reqiest an enmpty mesh ==> user manage it ... - } - // ------------------------------------------------------------------------------------------------ - etk::Uri shaderName = _shaderName; - if (shaderName.isEmpty() == true) { - shaderName = "DATA:///material3D.prog"; - for (auto &it: materials) { - if (it.second->haveTexture() == true) { - shaderName = "DATA:///material3DTextured.prog"; - break; - } - } - } - // ------------------------------------------------------------------------------------------------ - EGE_VERBOSE(name << " " << light << " shader=" << shaderName); - GLprogram = gale::resource::Program::create(shaderName); - if (GLprogram != null) { - GLPosition = GLprogram->getAttribute("EW_coord3d"); - GLtexture = GLprogram->getAttribute("EW_texture2d"); - GLNormal = GLprogram->getAttribute("EW_normal"); - GLColor = GLprogram->getAttribute("EW_color"); - GLMatrix = GLprogram->getUniform("EW_MatrixTransformation"); - GLMatrixPosition = GLprogram->getUniform("EW_MatrixPosition"); - // Link material and Lights - GLMaterial.link(GLprogram, "EW_material"); - light.link(GLprogram, "EW_directionalLight"); - } - // ------------------------------------------------------------------------------------------------ - } - @Override - public void cleanUp() { - // remove dynamics dependencies : - if (functionFreeShape != null) { - functionFreeShape(pointerShape); - pointerShape = null; - } - } - public: - virtual void draw(mat4& _positionMatrix, bool _enableDepthTest=true, bool _enableDepthUpdate=true) { - // TODO Remove this, it is just for test the 23-04-2016 - //checkNormal = false; - EGE_VERBOSE("draw Mesh : " << name << " (start)"); - if (GLprogram == null) { - EGE_ERROR("No shader ..."); - return; - } - //EGE_DEBUG(name << " " << light); - if (_enableDepthTest == true) { - gale::openGL::enable(gale::openGL::flag_depthTest); - if (_enableDepthUpdate == false) { - glDepthMask(GL_FALSE); - } - } else { - gale::openGL::disable(gale::openGL::flag_depthTest); - } - //EGE_DEBUG(" display " << coord.size() << " elements" ); - GLprogram->use(); - // set Matrix : translation/positionMatrix - mat4 projMatrix = gale::openGL::getMatrix(); - mat4 camMatrix = gale::openGL::getCameraMatrix(); - mat4 tmpMatrix = projMatrix * camMatrix; - GLprogram->uniformMatrix(GLMatrix, tmpMatrix); - GLprogram->uniformMatrix(GLMatrixPosition, _positionMatrix); - // position : - GLprogram->sendAttributePointer(GLPosition, verticesVBO, MESH_VBO_VERTICES); - // Texture (if needed): - if (listUV.size() != 0) { - GLprogram->sendAttributePointer(GLtexture, verticesVBO, MESH_VBO_TEXTURE); - } - // position : - if (normalMode != ege::resource::Mesh::normalMode::none) { - GLprogram->sendAttributePointer(GLNormal, verticesVBO, MESH_VBO_VERTICES_NORMAL); - #if DEBUG - // TODO ... - #endif - #if DEBUG - } else { - // TODO ... - } - #else - } - #endif - // colors : - GLprogram->sendAttributePointer(GLColor, verticesVBO, MESH_VBO_COLOR); - // draw lights : - //EGE_INFO("light : " << light); - light.draw(GLprogram); - #ifdef DISPLAY_NB_VERTEX_DISPLAYED - int32_t nbElementDrawTheoric = 0; - int32_t nbElementDraw = 0; - #endif - for (size_t kkk=0; kkkdraw(GLprogram, GLMaterial); - if (true) { // TODO understand why the optimisation does not work at all ... : if (checkNormal == false) { - gale::openGL::drawElements(materials[listFaces.getKey(kkk)]->getRenderModeOpenGl(), listFaces.getValue(kkk).index); - #ifdef DISPLAY_NB_VERTEX_DISPLAYED - nbElementDraw += listFaces.getValue(kkk).index.size(); - nbElementDrawTheoric += listFaces.getValue(kkk).index.size(); - #endif - } else { - mat4 mattttt = (projMatrix * camMatrix) * _positionMatrix; - mattttt.mat[3] = 0; - mattttt.mat[7] = 0; - mattttt.mat[11] = 0; - //vec3 cameraNormal = vec3(-mattttt.mat[2], -mattttt.mat[6], -mattttt.mat[10]); - vec3 cameraNormal = vec3(0,0,-1); - cameraNormal.normalized(); - // remove face that is notin the view ... - etk::Vector tmpIndexResult; - etk::Vector& tmppFaces = listFaces.getValue(kkk).faces; - //etk::Vector& tmppIndex = listFaces.getValue(kkk).index; - switch(normalMode) { - case ege::resource::Mesh::normalMode::face: - for(size_t iii=0; iii= 0.0f) { - tmpIndexResult.pushBack(iii*3); - tmpIndexResult.pushBack(iii*3+1); - tmpIndexResult.pushBack(iii*3+2); - } - } - break; - case ege::resource::Mesh::normalMode::vertex: - for(size_t iii=0; iii= -0.2f) - || ((mattttt * listVertexNormal[tmppFaces[iii].normal[1]]).dot(cameraNormal) >= -0.2f) - || ((mattttt * listVertexNormal[tmppFaces[iii].normal[2]]).dot(cameraNormal) >= -0.2f) ) { - tmpIndexResult.pushBack(iii*3); - tmpIndexResult.pushBack(iii*3+1); - tmpIndexResult.pushBack(iii*3+2); - } - } - break; - default: - for(size_t iii=0; iiigetRenderModeOpenGl(), tmpIndexResult); - #ifdef DISPLAY_NB_VERTEX_DISPLAYED - nbElementDraw += tmpIndexResult.size(); - nbElementDrawTheoric += listFaces.getValue(kkk).index.size(); - #endif - } - } - #ifdef DISPLAY_NB_VERTEX_DISPLAYED - if (listFaces.size() == 0) { - EGE_ERROR(" !!!! No Face to display elements [" << name << "]"); - } else { - if (nbElementDrawTheoric != 0) { - EGE_WARNING(((float)nbElementDraw/(float)nbElementDrawTheoric*100.0f) << "% Request draw : " << listFaces.size() << ":" << nbElementDraw << "/" << nbElementDrawTheoric << " elements [" << name << "]"); - } else { - EGE_WARNING("0% Request draw : " << listFaces.size() << ":" << nbElementDraw << "/" << nbElementDrawTheoric << " elements [" << name << "]"); - } - } - #endif - GLprogram->unUse(); - - if (_enableDepthTest == true){ - if (_enableDepthUpdate == false) { - glDepthMask(GL_TRUE); - } - gale::openGL::disable(gale::openGL::flag_depthTest); - } - // TODO UNDERSTAND why ... it is needed - gale::openGL::unbindBuffer(); - EGE_VERBOSE("draw Mesh : " << name << " ( end )"); - } - - virtual void draw(mat4& _positionMatrix, - Color _mainColor, - bool _enableDepthTest = true, - bool _enableDepthUpdate = true) { - draw(_positionMatrix, _enableDepthTest, _enableDepthUpdate); - } - // For debug only ... - void drawNormal(mat4& _positionMatrix, - ememory::SharedPtr _draw) { - Color tmpColor(0.0, 1.0, 0.0, 1.0); - etk::Vector vertices; - // generate element in 2 pass : - // - create new index dependeng a vertex is a unique componenet of position, texture, normal - // - the index list generation (can be dynamic ... (TODO later) - for (size_t kkk=0; kkkgetRenderMode()) { - case gale::openGL::renderMode::triangle: - case gale::openGL::renderMode::triangleStrip: - case gale::openGL::renderMode::triangleFan: - nbIndicInFace = 3; - break; - case gale::openGL::renderMode::line: - case gale::openGL::renderMode::lineStrip: - case gale::openGL::renderMode::lineLoop: - nbIndicInFace = 2; - break; - case gale::openGL::renderMode::point: - nbIndicInFace = 1; - break; - case gale::openGL::renderMode::quad: - case gale::openGL::renderMode::quadStrip: - nbIndicInFace = 4; - break; - case gale::openGL::renderMode::polygon: - nbIndicInFace = 3; - break; - } - FaceIndexing& tmpFaceList = listFaces.getValue(kkk); - for (size_t iii=0; iii= listFacesNormal.size()) { - EGE_ERROR("not enougth normal in the buffer ... " << index << " >= " << listFacesNormal.size()); - return; - } - vec3 normal = listFacesNormal[index]; - vertices.pushBack(center); - vertices.pushBack(center+normal*0.5f); - } break; - case ege::resource::Mesh::normalMode::none: - break; - } - } - } - _draw->drawLine(vertices, tmpColor, _positionMatrix); - } - void generateVBO() { - // calculate the normal of all faces if needed - if ( normalMode != ege::resource::Mesh::normalMode::none - && listFacesNormal.size() == 0) { - // when no normal detected == > auto generate Face normal .... - EGE_ERROR("Calculate normal face ... in case ????"); - calculateNormaleFace(listFaces.getKeys()[0]); - } - EGE_WARNING("Generate VBO for nb faces layers: " << listFaces.size() << " list layer=" << etk::toString(listFaces.getKeys())); - - // generate element in 2 pass: - // - create new index depending on a vertex is a unique component of position, texture, normal - // - the index list generation (can be dynamic ... (TODO later)) - for (size_t kkk=0; kkkgetRenderMode()) { - case gale::openGL::renderMode::triangle: - case gale::openGL::renderMode::triangleStrip: - case gale::openGL::renderMode::triangleFan: - nbIndicInFace = 3; - break; - case gale::openGL::renderMode::line: - case gale::openGL::renderMode::lineStrip: - case gale::openGL::renderMode::lineLoop: - nbIndicInFace = 2; - break; - case gale::openGL::renderMode::point: - nbIndicInFace = 1; - break; - case gale::openGL::renderMode::quad: - case gale::openGL::renderMode::quadStrip: - nbIndicInFace = 4; - break; - case gale::openGL::renderMode::polygon: - nbIndicInFace = 3; - break; - } - #ifdef TRY_MINIMAL_VBO - int64_t tmpppppp=0; - #endif - FaceIndexing& tmpFaceList = listFaces.getValue(kkk); - for (size_t iii=0; iiisizeOnBufferVec3(MESH_VBO_VERTICES); jjj++) { - if( verticesVBO->getOnBufferVec3(MESH_VBO_VERTICES,jjj) == position - && verticesVBO->getOnBufferVec3(MESH_VBO_VERTICES_NORMAL,jjj) == normal - && verticesVBO->getOnBufferVec2(MESH_VBO_TEXTURE,jjj) == texturepos) { - vertexVBOId[indice] = jjj; - elementFind = true; - //EGE_DEBUG("search indice : " << jjj); - tmpppppp += jjj; - // stop searching ... - break; - } - } - #endif - if (elementFind == false) { - verticesVBO->pushOnBuffer(MESH_VBO_VERTICES, position); - if (normalMode != ege::resource::Mesh::normalMode::none) { - verticesVBO->pushOnBuffer(MESH_VBO_VERTICES_NORMAL, normal); - } - verticesVBO->pushOnBuffer(MESH_VBO_TEXTURE, texturepos); - verticesVBO->pushOnBuffer(MESH_VBO_COLOR, color); - vertexVBOId[indice] = verticesVBO->bufferSize(MESH_VBO_VERTICES)-1; - } - } - for(size_t indice=0 ; indiceflush(); - } - private: - void calculateNormaleFace(const etk::String& _materialName) { - listFacesNormal.clear(); - if (normalMode == ege::resource::Mesh::normalMode::face) { - EGE_VERBOSE("calculateNormaleFace(" << _materialName << ")"); - gale::openGL::renderMode tmpRenderMode = materials[_materialName]->getRenderMode(); - if ( tmpRenderMode == gale::openGL::renderMode::point - || tmpRenderMode == gale::openGL::renderMode::line - || tmpRenderMode == gale::openGL::renderMode::lineStrip - || tmpRenderMode == gale::openGL::renderMode::lineLoop) { - EGE_ERROR("calculateNormaleFace(" << _materialName << ") : can not calculate normal on lines ..."); - normalMode = ege::resource::Mesh::normalMode::none; - return; - } - for(auto &it : listFaces[_materialName].faces) { - // for all case, We use only the 3 vertex for quad element, in theory 3D modeler export element in triangle if it is not a real plane. - vec3 normal = (listVertex[it.vertex[0]]-listVertex[it.vertex[1]]).cross(listVertex[it.vertex[1]]-listVertex[it.vertex[2]]); - //EGE_INFO("normal: " << normal.normalized()); - if (normal == vec3(0,0,0)) { - EGE_ERROR("Null vertor for a face ... " << listVertex[it.vertex[0]] << " " << listVertex[it.vertex[1]] << " " << listVertex[it.vertex[2]]); - listFacesNormal.pushBack(vec3(1,0,0)); - } else { - listFacesNormal.pushBack(normal.normalized()); - } - int32_t normalID = listFacesNormal.size() - 1; - it.normal[0] = normalID; - it.normal[1] = normalID; - it.normal[2] = normalID; - } - } - } - void calculateNormaleEdge(const etk::String& _materialName) { - listVertexNormal.clear(); - if (normalMode == ege::resource::Mesh::normalMode::vertex) { - EGE_INFO("calculateNormaleEdge(" << _materialName << ")"); - gale::openGL::renderMode tmpRenderMode = materials[_materialName]->getRenderMode(); - if ( tmpRenderMode == gale::openGL::renderMode::point - || tmpRenderMode == gale::openGL::renderMode::line - || tmpRenderMode == gale::openGL::renderMode::lineStrip - || tmpRenderMode == gale::openGL::renderMode::lineLoop) { - EGE_ERROR("calculateNormaleEdge(" << _materialName << ") : can not calculate normal on lines ..."); - normalMode = ege::resource::Mesh::normalMode::none; - return; - } - for(size_t iii=0 ; iii& tmpFaceList = listFaces[_materialName].faces; - vec3 normal(0,0,0); - // add the vertex from all the element in the list for face when the element in the face ... - for(size_t jjj=0 ; jjjpushOnBuffer(MESH_VBO_VERTICES_NORMAL, normal); - if( tmpFaceList[jjj].vertex[0] == (int32_t)iii - || tmpFaceList[jjj].vertex[1] == (int32_t)iii - || tmpFaceList[jjj].vertex[2] == (int32_t)iii) { - normal += listFacesNormal[jjj]; - } - } - if (normal == vec3(0,0,0)) { - listVertexNormal.pushBack(vec3(1,1,1)); - } else { - listVertexNormal.pushBack(normal.normalized()); - } - } - } - } - public : - void createViewBox(const etk::String& _materialName,float _size=1.0) { - normalMode = ege::resource::Mesh::normalMode::none; - ege::viewBox::create(materials, listFaces, listVertex, listUV, - _materialName, _size); - calculateNormaleFace(_materialName); - } - void createIcoSphere(const etk::String& _materialName,float _size=1.0, int32_t _subdivision=3) { - normalMode = ege::resource::Mesh::normalMode::none; - ege::icoSphere::create(materials, listFaces, listVertex, listUV, - _materialName, _size, _subdivision); - calculateNormaleFace(_materialName); - } - private: - bool loadOBJ(const etk::Uri& _fileName); - bool loadEMF(const etk::Uri& _fileName); - public: - void addMaterial(const etk::String& _name, ememory::SharedPtr _data) { - if (_data == null) { - EGE_ERROR(" can not add material with null pointer"); - return; - } - if (_name == "") { - EGE_ERROR(" can not add material with no name"); - return; - } - // really add the material: - EGE_WARNING("Add material: " << _name); - materials.add(_name, _data); - } - public: - /** - * @brief set the check of normal position befor sending it to the openGl card - * @param _status New state. - */ - void setCheckNormal(bool _status) { - checkNormal=_status; - }; - /** - * @brief get the check value of normal position befor sending it to the openGl card - * @return get the chcking stus of normal or not - */ - bool getCheckNormal() { - return checkNormal; - }; - const etk::Vector>& getPhysicalProperties() { - for (auto &it: physics) { - if (it == null) { - EGE_WARNING("Get null ... "); - continue; - } - if (it->getType() == ege::physics::Shape::type::concave) { - // need to generate the internal list of point and triangle needed: - ege::physics::shape::Concave* tmpElement = it->toConcave(); - if (tmpElement == null) { - EGE_ERROR(" Concave ==> can not cast in Concave"); - return physics; - } - tmpElement->clear(); - //EGE_INFO(" add vertices : " << listVertex); - tmpElement->setListOfVertex(listVertex); - for (size_t kkk=0; kkk index; - for (auto &it : listFaces.getValue(kkk).faces) { - index.pushBack(it.vertex[0]); - index.pushBack(it.vertex[1]); - index.pushBack(it.vertex[2]); - } - //EGE_INFO(" add triangle : " << listFaces.getValue(kkk).index); - - //tmpElement->addTriangle(listFaces.getValue(kkk).index); - tmpElement->addTriangle(index); - } - //EGE_CRITICAL("kjlkj"); - // Can have only one concave element in a mesh ... - //return physics; - } - } - return physics; - } - void addPhysicElement(const ememory::SharedPtr& _shape) { - if (_shape == null) { - return; - } - physics.pushBack(_shape); - } - private: - void* pointerShape; //!< all mesh have a basic shape (bullet or other) the void pointer mermit to not depent on the bullet lib - public: - /** - * @brief set the shape pointer (no type == > user might know it ...) - * @param _shape The new shape (this remove the previous one) - */ - void setShape(void* _shape) { - if (functionFreeShape!=null) { - functionFreeShape(pointerShape); - pointerShape = null; - } - pointerShape=_shape; - } - /** - * @brief get the pointer on the shame (no type) - * @return Pointer on shape. - */ - void* getShape() { - return pointerShape; - }; - private: - void (*functionFreeShape)(void* _pointer); - public: - void setFreeShapeFunction(void (*_functionFreeShape)(void* _pointer)) { - functionFreeShape = _functionFreeShape; - }; - /** - * @brief Add in the faces list the layer requested - * @param _layerName face index to add - */ - void addFaceIndexing(const etk::String& _layerName) { - if (listFaces.exist(_layerName) == false) { - FaceIndexing empty; - listFaces.add(_layerName, empty); - } - } - public: - - void addPoint(const etk::String& _layerName, const vec3& _pos, Color _color) { - if ( listFaces.exist(_layerName) == false - || materials.exist(_layerName) == false) { - EGE_ERROR("Mesh layer : " << _layerName << " does not exist in list faces=" << listFaces.exist(_layerName) << " materials=" << listFaces.exist(_layerName) << " ..."); - return; - } - gale::openGL::renderMode tmpRenderMode = materials[_layerName]->getRenderMode(); - if (tmpRenderMode != gale::openGL::renderMode::point) { - EGE_ERROR("try to add Point in a mesh material section that not support Point"); - return; - } - // try to find position: - int32_t pos = findPositionInList(_pos); - // try to find UV mapping: - int32_t color = findColorInList(_color); - Face tmpFace; - tmpFace.setVertex(pos); - tmpFace.setColor(color, color, color); - listFaces[_layerName].faces.pushBack(tmpFace); - } - - void addLine(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, Color _color) { - addLine( _layerName, _pos1, _pos2, _color, _color); - } - void addLine(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, Color _color1, Color _color2) { - if ( listFaces.exist(_layerName) == false - || materials.exist(_layerName) == false) { - EGE_ERROR("Mesh layer : " << _layerName << " does not exist in list faces=" << listFaces.exist(_layerName) << " materials=" << listFaces.exist(_layerName) << " ..."); - return; - } - gale::openGL::renderMode tmpRenderMode = materials[_layerName]->getRenderMode(); - if ( tmpRenderMode != gale::openGL::renderMode::line - && tmpRenderMode != gale::openGL::renderMode::lineStrip - && tmpRenderMode != gale::openGL::renderMode::lineLoop) { - EGE_ERROR("try to add Line in a mesh material section that not support Line"); - return; - } - // try to find position: - int32_t pos1 = findPositionInList(_pos1); - int32_t pos2 = findPositionInList(_pos2); - // try to find UV mapping: - int32_t color1 = findColorInList(_color1); - int32_t color2 = findColorInList(_color2); - Face tmpFace; - tmpFace.setVertex(pos1, pos2); - tmpFace.setColor(color1, color2, color2); - listFaces[_layerName].faces.pushBack(tmpFace); - } - - void addLines(const etk::String& _layerName, const etk::Vector& _list, Color _color){ - for (size_t iii=1; iii<_list.size(); ++iii) { - addLine(_layerName, _list[iii-1], _list[iii], _color); - } - } - - void addLines(const etk::String& _layerName, const etk::Vector& _list, const etk::Vector& _color) { - if (_color.size() != _list.size()) { - EGE_ERROR("Can not add line with changing color without same number of color"); - return; - } - for (size_t iii=1; iii<_list.size(); ++iii) { - addLine(_layerName, _list[iii-1], _list[iii], _color[iii-1], _color[iii]); - } - } - - /** - * @not_in_doc - * @brief draw a colored triangle (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _color1 color of the _pos1 element - * @param _color2 color of the _pos2 element - * @param _color3 color of the _pos3 element - */ - void addTriangle(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, Color _color) { - addTriangle(_layerName, _pos1, _pos2, _pos3, _color, _color, _color); - } - /** - * @not_in_doc - * @brief draw a colored triangle (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _color1 color of the _pos1 element - * @param _color2 color of the _pos2 element - * @param _color3 color of the _pos3 element - */ - void addTriangle(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, - Color _color1, Color _color2, Color _color3) { - if ( listFaces.exist(_layerName) == false - || materials.exist(_layerName) == false) { - EGE_ERROR("Mesh layer : " << _layerName << " does not exist in list faces=" << listFaces.exist(_layerName) << " materials=" << listFaces.exist(_layerName) << " ..."); - return; - } - gale::openGL::renderMode tmpRenderMode = materials[_layerName]->getRenderMode(); - if ( tmpRenderMode == gale::openGL::renderMode::quad - || tmpRenderMode == gale::openGL::renderMode::quadStrip) { - EGE_TODO("Create quad interface ..."); - } else if ( tmpRenderMode == gale::openGL::renderMode::triangle - || tmpRenderMode == gale::openGL::renderMode::lineStrip - || tmpRenderMode == gale::openGL::renderMode::triangleFan) { - - // try to find position: - int32_t pos1 = findPositionInList(_pos1); - int32_t pos2 = findPositionInList(_pos2); - int32_t pos3 = findPositionInList(_pos3); - // try to find Color: - int32_t color1 = findColorInList(_color1); - int32_t color2 = findColorInList(_color2); - int32_t color3 = findColorInList(_color3); - Face tmpFace(pos1, -1, - pos2, -1, - pos3, -1); - tmpFace.setColor(color1, color2, color3); - listFaces[_layerName].faces.pushBack(tmpFace); - } else { - EGE_ERROR("try to add Quad in a mesh material section that not support Quad"); - return; - } - } - /** - * @not_in_doc - * @brief draw a colored quad (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _pos4 faurth point position - * @param _color color of all elements - */ - void addQuad(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, const vec3& _pos4, Color _color) { - addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _color, _color, _color, _color); - } - /** - * @not_in_doc - * @brief draw a colored quad (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _pos4 faurth point position - * @param _color1 color of the _pos1 element - * @param _color2 color of the _pos2 element - * @param _color3 color of the _pos3 element - * @param _color4 color of the _pos4 element - */ - void addQuad(const etk::String& _layerName, const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, const vec3& _pos4, - Color _color1, Color _color2, Color _color3, Color _color4) { - addTriangle(_layerName, _pos1, _pos2, _pos3, _color1, _color2, _color3); - addTriangle(_layerName, _pos1, _pos3, _pos4, _color1, _color3, _color4); - } - /** - * @not_in_doc - * @brief draw a textured colored triangle (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _color color of all elements - * @param _uv1 texture position of the _pos1 element - * @param _uv2 texture position of the _pos2 element - * @param _uv3 texture position of the _pos3 element - */ - void addTriangle(const etk::String& _layerName, - const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, - const vec2& _uv1, const vec2& _uv2, const vec2& _uv3, - Color _color) { - addTriangle(_layerName, _pos1, _pos2, _pos3, _uv1, _uv2, _uv3, _color, _color, _color); - } - /** - * @not_in_doc - * @brief draw a textured colored triangle (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _color1 color of the _pos1 element - * @param _color2 color of the _pos2 element - * @param _color3 color of the _pos3 element - * @param _uv1 texture position of the _pos1 element - * @param _uv2 texture position of the _pos2 element - * @param _uv3 texture position of the _pos3 element - */ - void addTriangle(const etk::String& _layerName, - const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, - const vec2& _uv1, const vec2& _uv2, const vec2& _uv3, - Color _color1=etk::color::white, Color _color2=etk::color::white, Color _color3=etk::color::white) { - EGE_INFO("add Triangle: " << _layerName << " ..."); - if ( listFaces.exist(_layerName) == false - || materials.exist(_layerName) == false) { - EGE_ERROR("Mesh layer : " << _layerName << " does not exist in list faces=" << listFaces.exist(_layerName) << " materials=" << listFaces.exist(_layerName) << " ..."); - return; - } - gale::openGL::renderMode tmpRenderMode = materials[_layerName]->getRenderMode(); - if ( tmpRenderMode != gale::openGL::renderMode::triangle - && tmpRenderMode != gale::openGL::renderMode::triangleStrip - && tmpRenderMode != gale::openGL::renderMode::triangleFan) { - EGE_ERROR("try to add Line in a mesh material section that not support Line"); - return; - } - // try to find position: - int32_t pos1 = findPositionInList(_pos1); - int32_t pos2 = findPositionInList(_pos2); - int32_t pos3 = findPositionInList(_pos3); - // try to find UV mapping: - int32_t uv1 = findTextureInList(_uv1); - int32_t uv2 = findTextureInList(_uv2); - int32_t uv3 = findTextureInList(_uv3); - // try to find Color: - int32_t color1 = findColorInList(_color1); - int32_t color2 = findColorInList(_color2); - int32_t color3 = findColorInList(_color3); - Face tmpFace(pos1, uv1, - pos2, uv2, - pos3, uv3); - tmpFace.setColor(color1, color2, color3); - listFaces[_layerName].faces.pushBack(tmpFace); - EGE_INFO(" nbFace: " << listFaces[_layerName].faces.size()); - } - /** - * @not_in_doc - * @brief draw a textured colored quad (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _pos4 faurth point position - * @param _color color of all elements - * @param _uv1 texture position of the _pos1 element - * @param _uv2 texture position of the _pos2 element - * @param _uv3 texture position of the _pos3 element - * @param _uv4 texture position of the _pos4 element - */ - void addQuad(const etk::String& _layerName, - const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, const vec3& _pos4, - const vec2& _uv1, const vec2& _uv2, const vec2& _uv3, const vec2& _uv4, - Color _color) { - addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _uv1, _uv2, _uv3, _uv4, _color, _color, _color, _color); - } - /** - * @not_in_doc - * @brief draw a textured quad (usefull for debug and test) - * @param _layerName Material and face indexing layer name - * @param _pos1 First point position - * @param _pos2 Second point position - * @param _pos3 Third point position - * @param _pos4 faurth point position - * @param _uv1 texture position of the _pos1 element - * @param _uv2 texture position of the _pos2 element - * @param _uv3 texture position of the _pos3 element - * @param _uv4 texture position of the _pos4 element - * @param _color1 color of the _pos1 element - * @param _color2 color of the _pos2 element - * @param _color3 color of the _pos3 element - * @param _color4 color of the _pos4 element - */ - void addQuad(const etk::String& _layerName, - const vec3& _pos1, const vec3& _pos2, const vec3& _pos3, const vec3& _pos4, - const vec2& _uv1, const vec2& _uv2, const vec2& _uv3, const vec2& _uv4, - Color _color1=etk::color::white, Color _color2=etk::color::white, Color _color3=etk::color::white, Color _color4=etk::color::white) { - addTriangle(_layerName, _pos1, _pos2, _pos3, _uv1, _uv2, _uv3, _color1, _color2, _color3); - addTriangle(_layerName, _pos1, _pos3, _pos4, _uv1, _uv3, _uv4, _color1, _color3, _color4); - } - protected: - int32_t findPositionInList(const vec3& _pos) { - for (size_t iii=0; iii vertices = new ArrayList<>(); diff --git a/src/renderEngine/OBJLoader.java b/src/renderEngine/OBJLoader.java index ab692a4..efcce43 100644 --- a/src/renderEngine/OBJLoader.java +++ b/src/renderEngine/OBJLoader.java @@ -1,15 +1,15 @@ package renderEngine; import org.atriasoft.etk.Uri; +import org.atriasoft.loader3d.OBJFileLoader; +import org.atriasoft.loader3d.model.ModelData; import models.RawModel; -import objConverter.ModelData; -import objConverter.OBJFileLoader; public class OBJLoader { public static RawModel loadObjModel(Uri fileName, Loader loader) { System.out.println("Load file " + fileName); final ModelData data = OBJFileLoader.loadOBJ(fileName); - return loader.loadToVAO(data.getVertices(), data.getTextureCoords(), data.getNormals(), data.getIndices()); + return loader.loadToVAO(data.vertices(), data.textureCoords(), data.normals(), data.indices()); } }