From 89623ea11d29229af6e9fa8d2d47fb0dbd1029a1 Mon Sep 17 00:00:00 2001 From: stujones11 Date: Sat, 31 Dec 2016 17:33:19 +0000 Subject: [PATCH] Bump version to 0.3.0 --- LICENSE.txt | 4 +- README.md | 144 ++++ README.txt | 62 -- api.lua | 356 ++++++++ depends.txt | 2 + description.txt | 1 + init.lua | 532 +++++++++--- meshnode.conf.example | 17 - meshnode.lua | 111 --- mod.conf | 1 + models/meshnode_ctrl.b3d | Bin 0 -> 212211 bytes models/meshnode_ctrl.obj | 1348 +++++++++++++++++++++++++++++++ models/meshnode_fence.obj | 166 ++++ models/meshnode_fence.x | 633 --------------- models/meshnode_pane.obj | 86 ++ models/meshnode_plant.obj | 34 + models/meshnode_plant.x | 99 --- models/meshnode_slab.x | 130 --- models/meshnode_stair.x | 204 ----- models/meshnode_wall.obj | 112 +++ screenshot.png | Bin 0 -> 18465 bytes textures/meshnode_glue.png | Bin 0 -> 422 bytes textures/meshnode_highlight.png | Bin 0 -> 144 bytes textures/meshnode_side.png | Bin 699 -> 0 bytes textures/meshnode_top.png | Bin 878 -> 0 bytes textures/meshnode_trans.png | Bin 146 -> 128 bytes 26 files changed, 2680 insertions(+), 1362 deletions(-) create mode 100644 README.md delete mode 100644 README.txt create mode 100644 api.lua create mode 100644 description.txt delete mode 100644 meshnode.conf.example delete mode 100644 meshnode.lua create mode 100644 mod.conf create mode 100644 models/meshnode_ctrl.b3d create mode 100644 models/meshnode_ctrl.obj create mode 100644 models/meshnode_fence.obj delete mode 100644 models/meshnode_fence.x create mode 100644 models/meshnode_pane.obj create mode 100644 models/meshnode_plant.obj delete mode 100644 models/meshnode_plant.x delete mode 100644 models/meshnode_slab.x delete mode 100644 models/meshnode_stair.x create mode 100644 models/meshnode_wall.obj create mode 100644 screenshot.png create mode 100644 textures/meshnode_glue.png create mode 100644 textures/meshnode_highlight.png delete mode 100644 textures/meshnode_side.png delete mode 100644 textures/meshnode_top.png diff --git a/LICENSE.txt b/LICENSE.txt index 28b412b..358c186 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,5 +1,7 @@ Meshnodes for Minetest [meshnode] ================================= -Copyright (C) 2013 Stuart Jones - LGPL +License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1 + +License Media Files: CC0 1.0 Universal (CC0 1.0) diff --git a/README.md b/README.md new file mode 100644 index 0000000..f67ced2 --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +Meshnodes for Minetest [meshnode] +================================= + +**Mod Version:** 0.3.0 + +**Minetest Version:** 0.4.14 or later + +**Depends:** default + +Description +----------- +Meshnodes is a mod that transforms ordinary minetest nodes into a connected +array of replica entities to which players can attach to and manoeuvre. + +To use, simply build or place a model using nodes with a supported drawtype +then place a meshnode controller in an appropriate position. Now use the +special 'glue' that you will find in the controller node's inventory to +connect your structure. Alternatively, if you are using worldedit, you can +use the position markers to define the extents of your model. + +When everything is connected you should return the 'glue' to the controller +to enable activation. Once activated, players can then attach themselves +to the controller or restore the model back to nodes. Restored models can +be easily reconnected using the 'Connect from meta positions' option. + +Please note that the 'glue' bottles are unique to a controller's position +and are only useable within a limited range. + +**Supported Drawtypes** + +I have done my best to include support for most of the common nodes that +are useful for building ships etc, like fences, xpanes and walls including +support for all default stairs and slabs in full 6d rotation. It may or +may not work with other decorative nodeboxes/meshnodes, the best way to +find out is to simply try it. + +Exceptions include flowing liquids, wallmounted nodes, rails or any node +with non-generated wield or inventory images. Some drawtypes have only +partial support, like 'plantlike' for example. + +**Construction Advice** + +Place the controller node in the direction you wish to face when you attach +to it and always try to make your models hollow wherever possible. + +Controls +-------- +``` +[Up] Forward +[Down] Reverse +[Left] Turn Left +[Right] Turn Right +[Jump] Up +[Sneak] Down +[RMB] Interact +``` +Crafting +-------- +By default crafting is enabled in singleplayer mode only. + +**Meshnode Controller** [meshnode:controller] + + + + + + + + + + + + + + + + +
[default:bronzeblock][default:diamondblock][default:bronzeblock]
[default:obsidian_block][default:steelblock][default:goldblock]
[default:bronzeblock][default:steelblock][default:bronzeblock]
+ +Multiplayer +----------- +Take care if you use this mod on a public server, while I have done my +best to support basic protection, I am sure this mod could still provide +serious potential for grief in the hands of the wrong people. + +By default the controller node will only be available via `/give[me]` and +requires the 'meshnode' privilege to be effective, however, non-privileged +players will still be able to attach to and operate pre-activated models. + +Note that you will probably need to increase `max_objects_per_block` to +something a little higher than the default 64 to avoid server warnings and +broken models. You can set `meshnode_autoconf = true` to automatically +increase that limit to 4096 which, in theory, equates to one solid map-block +full of meshnodes, though I would not advise testing that on live server. + +Blacklist +--------- +A global blacklist table is stored is in `meshnode.blacklist` keyed by item +name, in multiplayer mode the following nodes are blacklisted by default. +``` +meshnode.blacklist["default:chest_locked"] = true +meshnode.blacklist["default:water_source"] = true +meshnode.blacklist["default:river_water_source"] = true +meshnode.blacklist["default:lava_source"] = true +``` +Configuration +------------- +The global config table is stored `meshnode.config` and can overridden by +adding the config name prefixed with 'meshnode_' to your minetest.conf file. + +**Example:** (multiplayer defaults) +``` +meshnode_max_speed = 2 +meshnode_max_lift = 1 +meshnode_yaw_amount = 0.017 +meshnode_max_radius = 8 +meshnode_show_in_creative = false +meshnode_enable_crafting = false +meshnode_autoconf = false +``` +Note that speed, lift, yaw and radius may still be altered by other mods after +the initial start-up via the global `meshnode.config` table. + +API +--- +I would like to think that this mod could be used as the base for other mods +like airships or sailing ships or perhaps even some fancy construction tool. + +For this reason I have exposed everything that I thought might be potentially +useful under the `meshnode` namespace. I would hope that the source code is +reasonably self-explanatory. + +Know Issues +----------- +Active objects sometimes disappear following a re-start/connect. This could +be for a number or reasons including /clearobjects or a minetest bug. For this +reason you are advised to always 'restore' your model to 'real' nodes before +logging out or moving any significant distance away from it. + +The player controlling the entity may appear to be connected to the wrong +part of the model when viewed by a player that was not present during the +initial attachment. Currently the only solution is for the operator to +detach then re-attach to the model in the presence of said player. + diff --git a/README.txt b/README.txt deleted file mode 100644 index c2d588e..0000000 --- a/README.txt +++ /dev/null @@ -1,62 +0,0 @@ -Meshnodes for Minetest [meshnode] -================================= - -Meshnodes is a mod that transforms ordinary nodes into a connected -array of replica entities to which players can attach to and manoeuvre. - -To use, simply build or place a model using nodes with a supported drawtype. -Next place a meshnode controller in the appropriate position, the operator -will be attached directly on top of the controller node. - -Now right click the controller and enter the minimum and maximum extents of -the model (relative to the controller x,y,z) - -e.g. for a 3x3 square of nodes with the controller placed above the center -node, the relative positions would be minp = -1,-1,-1 maxp = 1,0,1 - -Alternatively, if you are using worldedit, you can use the position -markers to define the extents of the model. However, this must be done -before the controller is placed. - -Supported Drawtypes -=================== - -normal -allfaces_optional -glasslike -plantlike -fencelike - -Also supports all default stairs and slabs in full 6d rotation. - -Controls -======== - -[Up] Forward -[Down] Reverse -[Left] Rotate Left -[Right] Rotate Right -[Jump] Up -[Sneak] Down -[RMB] Attach/Detach - -Limitations -=========== - -Models will disappear or become detached from the controller if they become -unloaded. This can cause the server to warn against excessive objects and -destroy them accordingly. - -I have tried a number of ways the get the models to persist after a server -restart but so far all of my efforts have been thwarted by minetest's buggy -object management system. I also wanted to be able to attach 'passengers' -to the entities, however, this has not been possible for the same reason. - -Know Issues -=========== - -The player controlling the entity may appear to be connected to the wrong -part of the model when viewed by a player that was not present during the -initial attachment. Currently the only solution is for the operator to -detach then re-attach to the model in the presence of said player. - diff --git a/api.lua b/api.lua new file mode 100644 index 0000000..efbcf56 --- /dev/null +++ b/api.lua @@ -0,0 +1,356 @@ +meshnode = {} + +meshnode.config = { + max_speed = 2, + max_lift = 1, + yaw_amount = 0.017, + max_radius = 8, + show_in_creative = false, + enable_crafting = false, + autoconf = false, +} + +meshnode.blacklist = {} + +local face_rotation = { + {x=0, y=0, z=0}, {x=0, y=90, z=0}, {x=0, y=180, z=0}, + {x=0, y=-90, z=0}, {x=90, y=0, z=0}, {x=90, y=0, z=90}, + {x=90, y=0, z=180}, {x=90, y=0, z=-90}, {x=-90, y=0, z=0}, + {x=-90, y=0, z=-90}, {x=-90, y=0, z=180}, {x=-90, y=0, z=90}, + {x=0, y=0, z=-90}, {x=90, y=90, z=0}, {x=180, y=0, z=90}, + {x=0, y=-90, z=-90}, {x=0, y=0, z=90}, {x=0, y=90, z=90}, + {x=180, y=0, z=-90}, {x=0, y=-90, z=90}, {x=180, y=180, z=0}, + {x=180, y=90, z=0}, {x=180, y=0, z=0}, {x=180, y=-90, z=0}, +} + +local meshnode_id = 0 + +local function connects_to_group(pos, groups) + local node = minetest.get_node(pos) + for _, group in pairs(groups) do + if minetest.get_item_group(node.name, group) > 0 then + return true + end + end +end + +local function get_face_textures(facecons, texture) + local textures = { + "meshnode_trans.png", + "meshnode_trans.png", + "meshnode_trans.png", + "meshnode_trans.png", + } + for i = 1, 4 do + if facecons[i] == true then + textures[i] = texture + end + end + return textures +end + +local function restore_facedir(node, delta, yaw) + local facedir = node.param2 or 0 + local def = minetest.registered_items[node.name] or {} + if def.paramtype2 == "facedir" then + local rot = (meshnode.yaw_to_facedir(yaw) + delta) % 4 + node.param2 = meshnode.rotate_facedir(rot, facedir) + end +end + +meshnode.new_id = function() + meshnode_id = meshnode_id + 1 + return tostring(meshnode_id) +end + +meshnode.get_luaentity = function(id) + for _, entity in pairs(minetest.luaentities) do + if entity.mesh_id == id then + return entity + end + end +end + +meshnode.get_map_pos = function(ref, parent) + local pos = parent.object:getpos() + local yaw = parent.object:getyaw() + local rot = meshnode.rotate_offset(yaw, ref.offset) + local vec = vector.add(pos, rot) + return vector.round(vec) +end + +meshnode.facedir_to_yaw = function(facedir) + local yaw = 0 + local rot = facedir % 4 + if rot == 1 then + yaw = 3 * math.pi / 2 + elseif rot == 2 then + yaw = math.pi + elseif rot == 3 then + yaw = math.pi / 2 + end + return yaw +end + +meshnode.yaw_to_facedir = function(yaw) + local deg = math.floor(math.deg(yaw) + 0.5) % 360 + if deg < 90 then + return 0 + end + return 4 - math.floor(deg / 90) +end + +meshnode.facedir_to_rotation = function(facedir) + return face_rotation[facedir + 1] or face_rotation[1] +end + +meshnode.rotation_to_facedir = function(rotation) + for i, v in ipairs(face_rotation) do + if vector.equals(v, rotation) then + return i - 1 + end + end + return 0 +end + +meshnode.rotate_facedir = function(rot, facedir) + if rot == 0 then + return facedir + end + local rotation = facedir % 32 + local axis = math.floor(rotation / 4) + if axis == 0 then + rotation = rotation + rot + elseif axis == 5 then + rotation = rotation - rot + else + local axis_rotation = { + {3, 2, 4}, + {4, 1, 3}, + {2, 4, 1}, + {1, 3, 2}, + } + local next_axis = axis_rotation[axis] + axis = next_axis[rot] + rotation = rotation + rot + end + return axis * 4 + (rotation % 4) +end + +meshnode.rotate_offset = function(yaw, offset) + local cos = math.cos(yaw) + local sin = math.sin(yaw) + local x = offset.x * cos - offset.z * sin + local z = offset.x * sin + offset.z * cos + local ret = vector.round({x=x, y=offset.y, z=z}) + return vector.round({x=x, y=offset.y, z=z}) +end + +meshnode.add_entity = function(ref, parent) + local pos = meshnode.get_map_pos(ref, parent) + local object = minetest.add_entity(pos, "meshnode:mesh") + if object then + local properties = {textures={ref.node.name}} + local def = minetest.registered_items[ref.node.name] or {} + if ref.meshtype == "plant" then + properties.visual = "mesh" + properties.visual_size = {x=1, y=1} + properties.mesh = "meshnode_plant.obj" + properties.textures = {def.tiles[1]} + elseif ref.meshtype == "fence" then + local textures = get_face_textures(ref.facecons, def.tiles[1]) + table.insert(textures, 1, def.tiles[1]) + properties.visual = "mesh" + properties.visual_size = {x=1, y=1} + properties.mesh = "meshnode_fence.obj" + properties.textures = textures + elseif ref.meshtype == "wall" then + local textures = get_face_textures(ref.facecons, def.tiles[1]) + table.insert(textures, 1, def.tiles[1]) + properties.visual = "mesh" + properties.visual_size = {x=1, y=1} + properties.mesh = "meshnode_wall.obj" + properties.textures = textures + elseif ref.meshtype == "pane" then + local textures = get_face_textures(ref.facecons, def.tiles[3]) + properties.visual = "mesh" + properties.visual_size = {x=1, y=1} + properties.mesh = "meshnode_pane.obj" + properties.textures = textures + end + object:set_properties(properties) + if parent then + local entity = object:get_luaentity() + if entity then + entity.mesh_id = ref.id + entity.parent_id = parent.mesh_id + else + object:remove() + return + end + local yaw = parent.object:getyaw() + local offset = vector.multiply(ref.offset, 10) + local rotation = vector.new(ref.rotation) + object:set_attach(parent.object, "", offset, rotation) + end + end + return object +end + +meshnode.create = function(pos, parent) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local def = minetest.registered_items[node.name] or {} + local meshtype = "wielditem" + local scaffold = "meshnode:scaffold" + local facecons = {} + local faces = { + [1] = {x=0, y=0, z=-1}, + [2] = {x=-1, y=0, z=0}, + [3] = {x=0, y=0, z=1}, + [4] = {x=1, y=0, z=0}, + } + if not parent or + meshnode.blacklist[node.name] or + node.name == "meshnode:controller" or + node.name == "air" or + node.name == "ignore" or + def.paramtype2 == "wallmounted" or + def.paramtype2 == "flowingliquid" then + return + elseif def.drawtype == "plantlike" then + meshtype = "plant" + elseif minetest.get_item_group(node.name, "fence") > 0 then + scaffold = "meshnode:scaffold_fence" + if def.drawtype ~= "mesh" then + meshtype = "fence" + for i, face in pairs(faces) do + local p = vector.add(pos, face) + facecons[i] = connects_to_group(p, {"fence", "wood", "tree"}) + end + end + elseif minetest.get_item_group(node.name, "wall") > 0 then + scaffold = "meshnode:scaffold_wall" + if def.drawtype ~= "mesh" then + meshtype = "wall" + for i, face in pairs(faces) do + local p = vector.add(pos, face) + facecons[i] = connects_to_group(p, {"wall", "stone"}) + end + end + elseif minetest.get_item_group(node.name, "pane") > 0 then + meshtype = "pane" + scaffold = "meshnode:scaffold_pane" + if string.find(node.name, "_flat$") then + facecons = {[2]=true, [4]=true} + else + for i, face in pairs(faces) do + local p = vector.add(pos, face) + facecons[i] = connects_to_group(p, {"pane"}) + end + end + elseif def.wield_image ~= "" or def.inventory_image ~="" then + return + end + local param2 = node.param2 or 0 + local offset = vector.subtract(pos, parent.object:getpos()) + local yaw = math.pi * 2 - parent.object:getyaw() + local delta = meshnode.yaw_to_facedir(yaw) + local facedir = meshnode.rotate_facedir(delta, param2) + local meta_str = nil + local meta_tab = meta:to_table() or {} + if meta_tab.inventory then + for _, list in pairs(meta_tab.inventory) do + for i, stack in ipairs(list) do + list[i] = ItemStack(stack):to_string() + end + end + end + if next(meta_tab) then + meta_str = minetest.serialize(meta_tab) + end + local ref = { + id = meshnode.new_id(), + node = node, + meta = meta_str, + delta = delta, + meshtype = meshtype, + facecons = facecons, + offset = meshnode.rotate_offset(yaw, offset), + rotation = meshnode.facedir_to_rotation(facedir), + } + local object = meshnode.add_entity(ref, parent) + if object then + minetest.set_node(pos, {name=scaffold}) + table.insert(parent.nodes, ref) + end + return object +end + +meshnode.restore = function(ref, parent) + local entity = meshnode.get_luaentity(ref.id) + local pos = meshnode.get_map_pos(ref, parent) + local yaw = parent.object:getyaw() + restore_facedir(ref.node, ref.delta, yaw) + minetest.add_node(pos, ref.node) + if entity then + entity.object:setpos(pos) + entity.object:set_detach() + entity.object:remove() + end + if ref.meta then + local meta = minetest.get_meta(pos) + local meta_tab = minetest.deserialize(ref.meta) or {} + meta:from_table(meta_tab) + end +end + +meshnode.restore_all = function(parent, name) + local positions = {} + if #parent.nodes == 0 then + return positions + end + local minp = {x=32000, y=32000, z=32000} + local maxp = vector.multiply(minp, -1) + local yaw = parent.object:getyaw() + local nodedata = {} + for _, ref in pairs(parent.nodes) do + local pos = meshnode.get_map_pos(ref, parent) + if name and minetest.is_protected(pos, name) then + return + end + table.insert(nodedata, {pos=pos, ref=ref}) + for axis, val in pairs(pos) do + if val < minp[axis] then + minp[axis] = val + end + if val > maxp[axis] then + maxp[axis] = val + end + end + end + local vm = minetest.get_voxel_manip(minp, maxp) + for _, data in pairs(nodedata) do + restore_facedir(data.ref.node, data.ref.delta, yaw) + vm:set_node_at(data.pos, data.ref.node) + end + vm:write_to_map() + vm:update_liquids() + vm:update_map() + for _, data in pairs(nodedata) do + local entity = meshnode.get_luaentity(data.ref.id) + if entity then + entity.object:setpos(data.pos) + entity.object:set_detach() + entity.object:remove() + end + if data.ref.meta then + local meta = minetest.get_meta(data.pos) + local meta_tab = minetest.deserialize(data.ref.meta) or {} + meta:from_table(meta_tab) + end + table.insert(positions, data.pos) + end + return positions +end + diff --git a/depends.txt b/depends.txt index e69de29..c28c5f3 100644 --- a/depends.txt +++ b/depends.txt @@ -0,0 +1,2 @@ +default +wordedit? diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..70459a1 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Poor man's voxel area entities. diff --git a/init.lua b/init.lua index 761a2d9..0f9fc96 100644 --- a/init.lua +++ b/init.lua @@ -1,55 +1,219 @@ -dofile(minetest.get_modpath(minetest.get_current_modname()).."/meshnode.lua") - -local groups = {cracky=3, oddly_breakable_by_hand=3} -if MESHNODE_SHOW_IN_CREATIVE == false then - groups.not_in_creative_inventory=1 +-- Boilerplate to support localized strings if intllib mod is installed. +local S = function(s) return s end +if minetest.get_modpath("intllib") then + S = intllib.Getter() end -local function is_valid_pos(pos) - if pos then - if pos.x and pos.y and pos.z then - return math.abs(pos.x) <= MESHNODE_MAX_RADIUS and - math.abs(pos.y) <= MESHNODE_MAX_RADIUS and - math.abs(pos.z) <= MESHNODE_MAX_RADIUS +dofile(minetest.get_modpath(minetest.get_current_modname()).."/api.lua") + +local has_worldedit = minetest.global_exists("worldedit") +local is_singleplayer = minetest.is_singleplayer() +local control_textures = { + "default_steel_block.png", + "default_diamond_block.png", + "default_bronze_block.png", + "default_obsidian_block.png", + "default_gold_block.png", +} + +if is_singleplayer then + meshnode.config.max_radius = 16 + meshnode.config.show_in_creative = true + meshnode.config.enable_crafting = true + meshnode.config.autoconf = true +else + meshnode.blacklist["default:chest_locked"] = true + meshnode.blacklist["default:water_source"] = true + meshnode.blacklist["default:river_water_source"] = true + meshnode.blacklist["default:lava_source"] = true +end + +for name, config in pairs(meshnode.config) do + local setting = minetest.setting_get("meshnode_"..name) + if type(config) == "number" then + setting = tonumber(setting) + elseif type(config) == "boolean" then + setting = minetest.setting_getbool("meshnode_"..name) + end + if setting then + meshnode.config[name] = setting + end +end + +if meshnode.config.autoconf == true then + minetest.setting_set("max_objects_per_block", "4096") +end + +local function has_privilege(name) + if is_singleplayer then + return true + end + return minetest.check_player_privs(name, {meshnode=true}) +end + +local function show_meshnode_formspec(pos, player) + local name = player:get_player_name() + if not has_privilege(name) then + return + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local id = minetest.pos_to_string(pos) + local entity = meshnode.get_luaentity(id) + local spos = pos.x..","..pos.y..","..pos.z + local formspec = "size[8,8]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + default.get_hotbar_bg(0,4).. + "list[current_player;main;0,4;8,1;]".. + "list[current_player;main;0,5.25;8,3;8]".. + "list[nodemeta:"..spos..";tool;0.5,1.5;1,1;]" + local buttons = {} + if entity and #entity.nodes > 0 then + if inv:contains_item("tool", "meshnode:glue") then + table.insert(buttons, {"activate", "Activate meshnode"}) end + table.insert(buttons, {"reset", "Reset connections"}) end + if meta:get_string("meshnode") ~= "" then + table.insert(buttons, {"connect_meta", "Connect meta positions"}) + end + if has_worldedit and worldedit.pos1[name] and worldedit.pos2[name] then + table.insert(buttons, {"connect_we", "Connect worldedit markers"}) + end + local y = 0.25 + for _, btn in pairs(buttons) do + formspec = formspec.."button_exit[2.25,"..y.. + ";5,0.5;"..btn[1]..";"..S(btn[2]).."]" + y = y + 0.9 + end + minetest.show_formspec(name, "meshnode_"..id, formspec) end -local function get_step(a, b) - if a > b then - return -1 - end - return 1 +local function register_scaffold(name, groups) + groups.not_in_creative_inventory = 1 + groups.cracky = 1 + minetest.register_node(name, { + paramtype = "light", + drawtype = "glasslike", + is_ground_content = false, + sunlight_propagates = true, + use_texture_alpha = true, + tiles = {"meshnode_highlight.png"}, + groups = groups, + }) end -minetest.register_entity("meshnode:ctrl", { +register_scaffold("meshnode:scaffold", {}) +register_scaffold("meshnode:scaffold_fence", {fence=1}) +register_scaffold("meshnode:scaffold_wall", {wall=1}) +register_scaffold("meshnode:scaffold_pane", {pane=1}) + +if meshnode.config.enable_crafting then + minetest.register_craft({ + output = "meshnode:controller", + recipe = { + {"default:bronzeblock", "default:diamondblock", "default:bronzeblock"}, + {"default:obsidian_block", "default:steelblock", "default:goldblock"}, + {"default:bronzeblock", "default:steelblock", "default:bronzeblock"}, + } + }) +end + +minetest.register_entity("meshnode:mesh", { physical = true, - visual = "cube", - visual_size = {x=1, y=1}, - textures = { - "meshnode_top.png", - "meshnode_side.png", - "meshnode_side.png", - "meshnode_side.png", - "meshnode_side.png", - "meshnode_side.png", - }, - player = nil, - speed = 0, - lift = 0, - on_activate = function(self, staticdata, dtime_s) - self.object:set_armor_groups({cracky=50}) + visual = "wielditem", + visual_size = {x=0.666, y=0.666}, + on_activate = function(self, staticdata) if staticdata == "expired" then self.object:remove() end end, - on_rightclick = function(self, clicker) - if self.player == nil then - clicker:set_attach(self.object, "", {x=0,y=15,z=0}, {x=0,y=90,z=0}) - self.player = clicker + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_entity("meshnode:ctrl", { + physical = true, + visual = "mesh", + mesh = "meshnode_plant.obj", + visual_size = {x=1, y=1}, + textures = {"meshnode_trans.png"}, + facedir = 0, + speed = 0, + lift = 0, + nodes = {}, + activated = false, + animation = "stand", + on_activate = function(self, staticdata) + local pos = self.object:getpos() + local objects = minetest.get_objects_inside_radius(pos, 0.5) or {} + for _, object in pairs(objects) do + if object ~= self.object then + local entity = object:get_luaentity() + if entity and entity.name == "meshnode:ctrl" then + minetest.log("warning", "meshnode: duplicate object removed") + self.object:remove() + return + end + end + end + self.object:set_armor_groups({immortal=1}) + if staticdata then + local data = minetest.deserialize(staticdata) or {} + self.mesh_id = data[1] + self.activated = data[2] + self.nodes = data[3] or {} + end + if self.activated then + self.mesh_id = meshnode.new_id() else - self.player:set_detach() - self.player = nil + local node = minetest.get_node(pos) + if node.name ~= "meshnode:controller" then + minetest.log("warning", "meshnode: stray object removed") + self.object:remove() + return + end + end + for _, ref in pairs(self.nodes) do + ref.id = meshnode.new_id() + meshnode.add_entity(ref, self) + end + self:set_activated(self.activated) + end, + on_punch = function(self, puncher) + --self.object:remove() + end, + on_rightclick = function(self, clicker) + if not self.mesh_id then + return + end + if self.activated then + local name = clicker:get_player_name() + local buttons = {} + local formspec = "size[4,3.5]" + if self.player then + table.insert(buttons, {"detach", "Detach"}) + local btn = {"animation_sit", "Sit"} + if self.animation == "sit" then + btn = {"animation_stand", "Stand"} + end + table.insert(buttons, btn) + else + table.insert(buttons, {"attach", "Attach"}) + table.insert(buttons, {"restore", "Restore"}) + end + table.insert(buttons, {"align", "Align"}) + local y = 0.5 + for _, btn in pairs(buttons) do + formspec = formspec.."button_exit[0.5,"..y.. + ";3,0.75;"..btn[1]..";"..S(btn[2]).."]" + y = y + 1 + end + local formname = "meshnode_"..self.mesh_id + minetest.show_formspec(name, formname, formspec) end end, on_step = function(self, dtime) @@ -66,31 +230,31 @@ minetest.register_entity("meshnode:ctrl", { else speed = speed * 0.99 end - if speed > MESHNODE_MAX_SPEED then - speed = MESHNODE_MAX_SPEED - elseif speed < 0 - MESHNODE_MAX_SPEED then - speed = 0 - MESHNODE_MAX_SPEED + if speed > meshnode.config.max_speed then + speed = meshnode.config.max_speed + elseif speed < 0 - meshnode.config.max_speed then + speed = 0 - meshnode.config.max_speed end if ctrl.jump then lift = lift + 0.1 elseif ctrl.sneak then lift = lift - 0.1 else - lift = lift * 0.9 + lift = lift * 0.99 end - if lift > MESHNODE_MAX_LIFT then - lift = MESHNODE_MAX_LIFT - elseif lift < 0 - MESHNODE_MAX_LIFT then - lift = 0 - MESHNODE_MAX_LIFT + if lift > meshnode.config.max_lift then + lift = meshnode.config.max_lift + elseif lift < 0 - meshnode.config.max_lift then + lift = 0 - meshnode.config.max_lift end if ctrl.left then - yaw = yaw + MESHNODE_YAW_AMOUNT + yaw = yaw + meshnode.config.yaw_amount elseif ctrl.right then - yaw = yaw - MESHNODE_YAW_AMOUNT + yaw = yaw - meshnode.config.yaw_amount end - velocity.x = math.cos(yaw) * speed + velocity.x = -math.sin(yaw) * speed velocity.y = lift - velocity.z = math.sin(yaw) * speed + velocity.z = math.cos(yaw) * speed self.object:setyaw(yaw) self.object:setvelocity(velocity) self.speed = speed @@ -102,80 +266,238 @@ minetest.register_entity("meshnode:ctrl", { end end, get_staticdata = function(self) - return "expired" + local data = {self.mesh_id, self.activated, self.nodes} + return minetest.serialize(data) end, -}) - -minetest.register_entity("meshnode:mesh", { - physical = true, - visual_size = {x=1, y=1}, - on_activate = function(self, staticdata, dtime_s) - if staticdata == "expired" then - self.object:remove() + set_alignment = function(self) + local pos = self.object:getpos() + local yaw = self.object:getyaw() + local deg = math.deg(yaw) + 45 + deg = math.floor(deg / 90) * 90 + self.object:setvelocity({x=0, y=0, z=0}) + self.object:setyaw(math.rad(deg)) + self.object:setpos(vector.round(pos)) + self.speed = 0 + self.lift = 0 + end, + set_activated = function(self, active) + local mesh = "meshnode_plant.obj" + local anim = {x=0, y=0} + local textures = {"meshnode_trans.png"} + local collisionbox = {0,0,0, 0,0,0} + if active then + mesh = "meshnode_ctrl.b3d" + anim = {x=20, y=100} + textures = control_textures + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5} end - end, - get_staticdata = function(self) - return "expired" + self.object:set_properties({ + mesh = mesh, + textures = textures, + collisionbox = collisionbox, + }) + self.object:set_animation(anim, 15) + self.activated = active end, }) minetest.register_node("meshnode:controller", { - description = "Meshnode Controller", + description = S("Meshnode Controller"), + drawtype = "mesh", + mesh = "meshnode_ctrl.obj", + paramtype = "light", paramtype2 = "facedir", - tiles = {"meshnode_top.png", "meshnode_side.png", "meshnode_side.png"}, - is_ground_content = true, - groups = groups, + tiles = control_textures, + groups = {choppy=2, oddly_breakable_by_hand=2}, on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", "size[5,3]" - .."field[0.5,1;2,0.5;minp;Minp;${minp}]" - .."field[3.0,1;2,0.5;maxp;Maxp;${maxp}]" - .."button_exit[1.0,2;3,0.5;connect;Generate Entity]" - ) - meta:set_string("infotext", "Meshnode Controller") + local inv = meta:get_inventory() + local stack = { + name = "meshnode:glue", + metadata = minetest.pos_to_string(pos), + } + inv:set_size("tool", 1) + inv:add_item("tool", stack) + meta:set_string("infotext", S("Meshnode Controller")) + end, + on_destruct = function(pos) + local id = minetest.pos_to_string(pos) + local entity = meshnode.get_luaentity(id) + if entity then + meshnode.restore_all(entity) + entity.object:remove() + end end, after_place_node = function(pos, placer) - if worldedit then - local name = placer:get_player_name() - local meta = minetest.get_meta(pos) - if worldedit.pos1[name] then - local p = vector.subtract(worldedit.pos1[name], pos) - meta:set_string("minp", p.x..","..p.y..","..p.z) - end - if worldedit.pos2[name] then - local p = vector.subtract(worldedit.pos2[name], pos) - meta:set_string("maxp", p.x..","..p.y..","..p.z) + local node = minetest.get_node(pos) + local id = minetest.pos_to_string(pos) + local object = minetest.add_entity(pos, "meshnode:ctrl") + if object then + local entity = object:get_luaentity() + if entity then + local facedir = node.param2 or 0 + local yaw = meshnode.facedir_to_yaw(facedir) + object:setyaw(yaw) + entity.mesh_id = id end end end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.connect then - local minp = minetest.string_to_pos(fields.minp) - local maxp = minetest.string_to_pos(fields.maxp) - if is_valid_pos(minp) and is_valid_pos(maxp) then - local node = minetest.get_node(pos) - minetest.remove_node(pos) - local positions = {} - local parent = minetest.add_entity(pos, "meshnode:ctrl") - if parent then - for x = minp.x, maxp.x, get_step(minp.x, maxp.x) do - for y = minp.y, maxp.y, get_step(minp.y, maxp.y) do - for z = minp.z, maxp.z, get_step(minp.z, maxp.z) do - local node_pos = vector.add(pos, {x=x, y=y, z=z}) - meshnode:create(node_pos, parent) - table.insert(positions, node_pos) + on_rightclick = function(pos, node, clicker, itemstack) + show_meshnode_formspec(pos, clicker) + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = stack:get_metadata() + if meta then + if vector.equals(minetest.string_to_pos(meta), pos) then + return 1 + end + end + return 0 + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + show_meshnode_formspec(pos, player) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + show_meshnode_formspec(pos, player) + end +}) + +minetest.register_tool("meshnode:glue", { + description = S("Meshnode Glue"), + inventory_image = "meshnode_glue.png", + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + local meta = itemstack:get_metadata() + local parent = meshnode.get_luaentity(meta) + if not parent then + return + end + local name = user:get_player_name() + if not has_privilege(name) then + return "" + end + if pointed_thing and pointed_thing.type == "node" then + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pos then + if minetest.is_protected(pos, name) then + minetest.chat_send_player(name, S("Protected node").."!") + return + end + local node = minetest.get_node_or_nil(pos) + if node then + if string.find(node.name, "meshnode:scaffold") then + for i, ref in pairs(parent.nodes) do + local map_pos = meshnode.get_map_pos(ref, parent) + if vector.equals(map_pos, pos) then + meshnode.restore(ref, parent) + parent.nodes[i] = nil end end - end - for _, pos in pairs(positions) do - minetest.remove_node(pos) + else + local dist = vector.distance(parent.object:getpos(), pos) + if dist > meshnode.config.max_radius then + minetest.chat_send_player(name, S("Out of range").."!") + else + meshnode.create(pos, parent) + end end end - else - local name = sender:get_player_name() - minetest.chat_send_player(name, "Invalid Position!") end end end, }) +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname then + local id = formname:gsub("meshnode_", "") + if id == formname then + return + end + local name = player:get_player_name() + local entity = meshnode.get_luaentity(id) + if not entity then + return + end + local pos = vector.round(entity.object:getpos()) + if fields.activate then + local id = meshnode.new_id() + entity.mesh_id = meshnode.new_id() + entity:set_activated(true) + for _, ref in pairs(entity.nodes) do + local map_pos = meshnode.get_map_pos(ref, entity) + minetest.remove_node(map_pos) + ref.parent = id + end + minetest.remove_node(pos) + elseif fields.connect_meta then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local spos = meta:get_string("meshnode") + local positions = minetest.deserialize(spos) or {} + for _, p in pairs(positions) do + meshnode.create(p, entity) + end + elseif fields.connect_we then + if has_worldedit then + local p1 = worldedit.pos1[name] + local p2 = worldedit.pos2[name] + if p1 and p2 then + local area = VoxelArea:new{MinEdge=p1, MaxEdge=p2} + for i in area:iterp(p1, p2) do + local p = area:position(i) + meshnode.create(p, entity) + end + end + end + elseif fields.reset then + meshnode.restore_all(entity) + entity.nodes = {} + elseif fields.attach and entity.player == nil then + player:set_attach(entity.object, "", {x=0, y=15, z=0}, {x=0, y=0, z=0}) + entity.player = player + entity.object:set_animation({x=0, y=0}, 15) + default.player_attached[name] = true + elseif fields.detach and entity.player == player then + player:set_detach() + entity.player = nil + entity.animation = "stand" + entity.object:set_animation({x=20, y=100}, 15) + default.player_attached[name] = false + elseif fields.animation_sit then + default.player_set_animation(player, "sit", 30) + entity.animation = "sit" + elseif fields.animation_stand then + default.player_set_animation(player, "stand", 30) + entity.animation = "stand" + elseif fields.align then + entity:set_alignment() + elseif fields.restore then + if not has_privilege(name) then + local msg = S("Requires the meshnode privilege") + minetest.chat_send_player(name, msg) + return + end + entity:set_alignment() + local positions = meshnode.restore_all(entity, name) + if positions then + local yaw = entity.object:getyaw() + local node = { + name = "meshnode:controller", + param2 = meshnode.yaw_to_facedir(yaw), + } + minetest.add_node(pos, node) + if #positions > 0 then + local meta = minetest.get_meta(pos) + local spos = minetest.serialize(positions) + meta:set_string("meshnode", spos) + end + entity.nodes = {} + entity.mesh_id = minetest.pos_to_string(pos) + entity:set_activated(false) + else + minetest.chat_send_player(name, S("Protected area").."!") + end + end + end +end) + diff --git a/meshnode.conf.example b/meshnode.conf.example deleted file mode 100644 index c92eb20..0000000 --- a/meshnode.conf.example +++ /dev/null @@ -1,17 +0,0 @@ --- Meshnode configuration (defaults) - --- Maximum Entity Speed -MESHNODE_MAX_SPEED = 2 - --- Maximum Up/Down Velocity -MESHNODE_MAX_LIFT = 1 - --- Rotational Step (Radians) -MESHNODE_YAW_AMOUNT = 0.02 - --- Maximum Entity Area -MESHNODE_MAX_RADIUS = 50 - --- Show Controller in Creative Inventory -MESHNODE_SHOW_IN_CREATIVE = true - diff --git a/meshnode.lua b/meshnode.lua deleted file mode 100644 index 4b74a70..0000000 --- a/meshnode.lua +++ /dev/null @@ -1,111 +0,0 @@ -MESHNODE_MAX_SPEED = 2 -MESHNODE_MAX_LIFT = 1 -MESHNODE_YAW_AMOUNT = 0.02 -MESHNODE_MAX_RADIUS = 50 -MESHNODE_SHOW_IN_CREATIVE = true - -meshnode = { - face_rotation = { - {x=0, y=0, z=0}, {x=0, y=90, z=0}, {x=0, y=180, z=0}, {x=0, y=-90, z=0}, - {x=90, y=0, z=0}, {x=90, y=0, z=90}, {x=90, y=0, z=180}, {x=90, y=0, z=-90}, - {x=-90, y=0, z=0}, {x=-90, y=0, z=-90}, {x=-90, y=0, z=180}, {x=-90, y=0, z=90}, - {x=0, y=0, z=-90}, {x=90, y=90, z=0}, {x=180, y=0, z=90}, {x=0, y=-90, z=-90}, - {x=0, y=0, z=90}, {x=0, y=90, z=90}, {x=180, y=0, z=-90}, {x=0, y=-90, z=90}, - {x=180, y=180, z=0}, {x=180, y=90, z=0}, {x=180, y=0, z=0}, {x=180, y=-90, z=0}, - } -} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) -local input = io.open(modpath.."/meshnode.conf", "r") -if input then - dofile(modpath.."/meshnode.conf") - input:close() - input = nil -end - -function meshnode:get_drawtype(pos) - local node = minetest.get_node(pos) - local item = minetest.registered_items[node.name] - if item then - return item.drawtype - end -end - -function meshnode:create(pos, parent) - local node = minetest.get_node(pos) - local item = minetest.registered_items[node.name] - local object = nil - local rotation = {x=0, y=0, z=0} - if item then - if item.tiles then - local t = item.tiles - local textures = {t[1], t[1], t[1], t[1], t[1], t[1]} - if #t == 3 then - textures = {t[1], t[2], t[3], t[3], t[3], t[3]} - elseif #t == 6 then - textures = t - end - local properties = {textures=textures} - if item.drawtype == "fencelike" then - textures = { - "meshnode_trans.png", - "meshnode_trans.png", - "meshnode_trans.png", - "meshnode_trans.png", - t[1], - } - local p = pos - if self:get_drawtype({x=p.x, y=p.y, z=p.z + 1}) == "fencelike" then - textures[1] = t[1] - end - if self:get_drawtype({x=p.x - 1, y=p.y, z=p.z}) == "fencelike" then - textures[2] = t[1] - end - if self:get_drawtype({x=p.x + 1, y=p.y, z=p.z}) == "fencelike" then - textures[3] = t[1] - end - if self:get_drawtype({x=p.x, y=p.y, z=p.z - 1}) == "fencelike" then - textures[4] = t[1] - end - object = minetest.add_entity(pos, "meshnode:mesh") - properties.textures = textures - properties.mesh = "meshnode_fence.x" - properties.visual = "mesh" - elseif item.drawtype == "plantlike" then - object = minetest.add_entity(pos, "meshnode:mesh") - properties.textures = {textures[1]} - properties.mesh = "meshnode_plant.x" - properties.visual = "mesh" - elseif string.find(node.name, "stairs:slab") then - object = minetest.add_entity(pos, "meshnode:mesh") - properties.textures = {textures[1]} - properties.mesh = "meshnode_slab.x" - properties.visual = "mesh" - elseif string.find(node.name, "stairs:stair") then - object = minetest.add_entity(pos, "meshnode:mesh") - properties.textures = {textures[1]} - properties.mesh = "meshnode_stair.x" - properties.visual = "mesh" - elseif item.drawtype == "normal" or - item.drawtype == "allfaces_optional" or - item.drawtype == "glasslike" then - object = minetest.add_entity(pos, "meshnode:mesh") - properties.visual = "cube" - end - if object then - object:set_properties(properties) - local facedir = node.param2 - if item.paramtype2 == "facedir" and facedir then - rotation = self.face_rotation[facedir + 1] - end - if parent then - local offset = vector.subtract(pos, parent:getpos()) - offset = vector.multiply(offset, {x=10,y=10,z=10}) - object:set_attach(parent, "", offset, rotation) - end - end - end - end - return object, rotation -end - diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..2932564 --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = meshnode diff --git a/models/meshnode_ctrl.b3d b/models/meshnode_ctrl.b3d new file mode 100644 index 0000000000000000000000000000000000000000..f0fa3409b6778aa06a74b4740fc1a497af6e2e7d GIT binary patch literal 212211 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 G_WuB9w)=Yk literal 0 HcmV?d00001 diff --git a/models/meshnode_ctrl.obj b/models/meshnode_ctrl.obj new file mode 100644 index 0000000..3b211dc --- /dev/null +++ b/models/meshnode_ctrl.obj @@ -0,0 +1,1348 @@ +# Blender v2.76 (sub 0) OBJ File: 'meshnode_obj.blend' +# www.blender.org +mtllib meshnode_ctrl.mtl +v -0.375000 -0.375000 0.375000 +v -0.375000 0.375000 0.375000 +v -0.375000 -0.375000 -0.375000 +v -0.375000 0.375000 -0.375000 +v 0.375000 -0.375000 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 -0.375000 -0.375000 +v 0.375000 0.375000 -0.375000 +v -0.375000 0.000000 0.375000 +v -0.375000 0.375000 0.000000 +v -0.375000 0.000000 -0.375000 +v -0.375000 -0.375000 0.000000 +v 0.000000 0.375000 -0.375000 +v 0.375000 0.000000 -0.375000 +v 0.000000 -0.375000 -0.375000 +v 0.375000 0.375000 0.000000 +v 0.375000 0.000000 0.375000 +v 0.375000 -0.375000 0.000000 +v 0.000000 0.375000 0.375000 +v 0.000000 -0.375000 0.375000 +v 0.000000 0.375000 0.000000 +v 0.000000 -0.375000 0.000000 +v 0.000000 0.000000 0.375000 +v 0.375000 0.000000 0.000000 +v 0.000000 0.000000 -0.375000 +v -0.375000 0.000000 0.000000 +v -0.125000 0.250000 0.125000 +v -0.125000 0.500000 0.125000 +v -0.125000 0.250000 -0.125000 +v -0.125000 0.500000 -0.125000 +v 0.125000 0.250000 0.125000 +v 0.125000 0.500000 0.125000 +v 0.125000 0.250000 -0.125000 +v 0.125000 0.500000 -0.125000 +v -0.125000 0.375000 0.125000 +v -0.125000 0.500000 0.000000 +v -0.125000 0.375000 -0.125000 +v -0.125000 0.250000 0.000000 +v 0.000000 0.500000 -0.125000 +v 0.125000 0.375000 -0.125000 +v 0.000000 0.250000 -0.125000 +v 0.125000 0.500000 0.000000 +v 0.125000 0.375000 0.125000 +v 0.125000 0.250000 0.000000 +v 0.000000 0.500000 0.125000 +v 0.000000 0.250000 0.125000 +v 0.000000 0.500000 0.000000 +v 0.000000 0.250000 0.000000 +v 0.000000 0.375000 0.125000 +v 0.125000 0.375000 0.000000 +v 0.000000 0.375000 -0.125000 +v -0.125000 0.375000 0.000000 +v -0.125000 0.250000 -0.250000 +v -0.125000 0.500000 -0.250000 +v -0.125000 0.250000 -0.500000 +v -0.125000 0.500000 -0.500000 +v 0.125000 0.250000 -0.250000 +v 0.125000 0.500000 -0.250000 +v 0.125000 0.250000 -0.500000 +v 0.125000 0.500000 -0.500000 +v -0.125000 0.375000 -0.250000 +v -0.125000 0.500000 -0.375000 +v -0.125000 0.375000 -0.500000 +v -0.125000 0.250000 -0.375000 +v 0.000000 0.500000 -0.500000 +v 0.125000 0.375000 -0.500000 +v 0.000000 0.250000 -0.500000 +v 0.125000 0.500000 -0.375000 +v 0.125000 0.375000 -0.250000 +v 0.125000 0.250000 -0.375000 +v 0.000000 0.500000 -0.250000 +v 0.000000 0.250000 -0.250000 +v 0.000000 0.500000 -0.375000 +v 0.000000 0.250000 -0.375000 +v 0.000000 0.375000 -0.250000 +v 0.125000 0.375000 -0.375000 +v 0.000000 0.375000 -0.500000 +v -0.125000 0.375000 -0.375000 +v -0.125000 -0.125000 0.500000 +v -0.125000 0.125000 0.500000 +v -0.125000 -0.125000 0.250000 +v -0.125000 0.125000 0.250000 +v 0.125000 -0.125000 0.500000 +v 0.125000 0.125000 0.500000 +v 0.125000 -0.125000 0.250000 +v 0.125000 0.125000 0.250000 +v -0.125000 0.000000 0.500000 +v -0.125000 0.125000 0.375000 +v -0.125000 0.000000 0.250000 +v -0.125000 -0.125000 0.375000 +v 0.000000 0.125000 0.250000 +v 0.125000 0.000000 0.250000 +v 0.000000 -0.125000 0.250000 +v 0.125000 0.125000 0.375000 +v 0.125000 0.000000 0.500000 +v 0.125000 -0.125000 0.375000 +v 0.000000 0.125000 0.500000 +v 0.000000 -0.125000 0.500000 +v 0.000000 0.125000 0.375000 +v 0.000000 -0.125000 0.375000 +v 0.000000 0.000000 0.500000 +v 0.125000 0.000000 0.375000 +v 0.000000 0.000000 0.250000 +v -0.125000 0.000000 0.375000 +v 0.250000 -0.125000 0.125000 +v 0.250000 0.125000 0.125000 +v 0.250000 -0.125000 -0.125000 +v 0.250000 0.125000 -0.125000 +v 0.500000 -0.125000 0.125000 +v 0.500000 0.125000 0.125000 +v 0.500000 -0.125000 -0.125000 +v 0.500000 0.125000 -0.125000 +v 0.250000 0.000000 0.125000 +v 0.250000 0.125000 0.000000 +v 0.250000 0.000000 -0.125000 +v 0.250000 -0.125000 0.000000 +v 0.375000 0.125000 -0.125000 +v 0.500000 0.000000 -0.125000 +v 0.375000 -0.125000 -0.125000 +v 0.500000 0.125000 0.000000 +v 0.500000 0.000000 0.125000 +v 0.500000 -0.125000 0.000000 +v 0.375000 0.125000 0.125000 +v 0.375000 -0.125000 0.125000 +v 0.375000 0.125000 0.000000 +v 0.375000 -0.125000 0.000000 +v 0.375000 0.000000 0.125000 +v 0.500000 0.000000 0.000000 +v 0.375000 0.000000 -0.125000 +v 0.250000 0.000000 0.000000 +v 0.250000 -0.125000 -0.250000 +v 0.250000 0.125000 -0.250000 +v 0.250000 -0.125000 -0.500000 +v 0.250000 0.125000 -0.500000 +v 0.500000 -0.125000 -0.250000 +v 0.500000 0.125000 -0.250000 +v 0.500000 -0.125000 -0.500000 +v 0.500000 0.125000 -0.500000 +v 0.250000 0.000000 -0.250000 +v 0.250000 0.125000 -0.375000 +v 0.250000 0.000000 -0.500000 +v 0.250000 -0.125000 -0.375000 +v 0.375000 0.125000 -0.500000 +v 0.500000 0.000000 -0.500000 +v 0.375000 -0.125000 -0.500000 +v 0.500000 0.125000 -0.375000 +v 0.500000 0.000000 -0.250000 +v 0.500000 -0.125000 -0.375000 +v 0.375000 0.125000 -0.250000 +v 0.375000 -0.125000 -0.250000 +v 0.375000 0.125000 -0.375000 +v 0.375000 -0.125000 -0.375000 +v 0.375000 0.000000 -0.250000 +v 0.500000 0.000000 -0.375000 +v 0.375000 0.000000 -0.500000 +v 0.250000 0.000000 -0.375000 +v 0.250000 -0.125000 0.500000 +v 0.250000 0.125000 0.500000 +v 0.250000 -0.125000 0.250000 +v 0.250000 0.125000 0.250000 +v 0.500000 -0.125000 0.500000 +v 0.500000 0.125000 0.500000 +v 0.500000 -0.125000 0.250000 +v 0.500000 0.125000 0.250000 +v 0.250000 0.000000 0.500000 +v 0.250000 0.125000 0.375000 +v 0.250000 0.000000 0.250000 +v 0.250000 -0.125000 0.375000 +v 0.375000 0.125000 0.250000 +v 0.500000 0.000000 0.250000 +v 0.375000 -0.125000 0.250000 +v 0.500000 0.125000 0.375000 +v 0.500000 0.000000 0.500000 +v 0.500000 -0.125000 0.375000 +v 0.375000 0.125000 0.500000 +v 0.375000 -0.125000 0.500000 +v 0.375000 0.125000 0.375000 +v 0.375000 -0.125000 0.375000 +v 0.375000 0.000000 0.500000 +v 0.500000 0.000000 0.375000 +v 0.375000 0.000000 0.250000 +v 0.250000 0.000000 0.375000 +v -0.500000 -0.125000 0.125000 +v -0.500000 0.125000 0.125000 +v -0.500000 -0.125000 -0.125000 +v -0.500000 0.125000 -0.125000 +v -0.250000 -0.125000 0.125000 +v -0.250000 0.125000 0.125000 +v -0.250000 -0.125000 -0.125000 +v -0.250000 0.125000 -0.125000 +v -0.500000 0.000000 0.125000 +v -0.500000 0.125000 0.000000 +v -0.500000 0.000000 -0.125000 +v -0.500000 -0.125000 0.000000 +v -0.375000 0.125000 -0.125000 +v -0.250000 0.000000 -0.125000 +v -0.375000 -0.125000 -0.125000 +v -0.250000 0.125000 0.000000 +v -0.250000 0.000000 0.125000 +v -0.250000 -0.125000 0.000000 +v -0.375000 0.125000 0.125000 +v -0.375000 -0.125000 0.125000 +v -0.375000 0.125000 0.000000 +v -0.375000 -0.125000 0.000000 +v -0.375000 0.000000 0.125000 +v -0.250000 0.000000 0.000000 +v -0.375000 0.000000 -0.125000 +v -0.500000 0.000000 0.000000 +v -0.500000 -0.125000 -0.250000 +v -0.500000 0.125000 -0.250000 +v -0.500000 -0.125000 -0.500000 +v -0.500000 0.125000 -0.500000 +v -0.250000 -0.125000 -0.250000 +v -0.250000 0.125000 -0.250000 +v -0.250000 -0.125000 -0.500000 +v -0.250000 0.125000 -0.500000 +v -0.500000 0.000000 -0.250000 +v -0.500000 0.125000 -0.375000 +v -0.500000 0.000000 -0.500000 +v -0.500000 -0.125000 -0.375000 +v -0.375000 0.125000 -0.500000 +v -0.250000 0.000000 -0.500000 +v -0.375000 -0.125000 -0.500000 +v -0.250000 0.125000 -0.375000 +v -0.250000 0.000000 -0.250000 +v -0.250000 -0.125000 -0.375000 +v -0.375000 0.125000 -0.250000 +v -0.375000 -0.125000 -0.250000 +v -0.375000 0.125000 -0.375000 +v -0.375000 -0.125000 -0.375000 +v -0.375000 0.000000 -0.250000 +v -0.250000 0.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v -0.500000 0.000000 -0.375000 +v -0.500000 -0.125000 0.500000 +v -0.500000 0.125000 0.500000 +v -0.500000 -0.125000 0.250000 +v -0.500000 0.125000 0.250000 +v -0.250000 -0.125000 0.500000 +v -0.250000 0.125000 0.500000 +v -0.250000 -0.125000 0.250000 +v -0.250000 0.125000 0.250000 +v -0.500000 0.000000 0.500000 +v -0.500000 0.125000 0.375000 +v -0.500000 0.000000 0.250000 +v -0.500000 -0.125000 0.375000 +v -0.375000 0.125000 0.250000 +v -0.250000 0.000000 0.250000 +v -0.375000 -0.125000 0.250000 +v -0.250000 0.125000 0.375000 +v -0.250000 0.000000 0.500000 +v -0.250000 -0.125000 0.375000 +v -0.375000 0.125000 0.500000 +v -0.375000 -0.125000 0.500000 +v -0.375000 0.125000 0.375000 +v -0.375000 -0.125000 0.375000 +v -0.375000 0.000000 0.500000 +v -0.250000 0.000000 0.375000 +v -0.375000 0.000000 0.250000 +v -0.500000 0.000000 0.375000 +v -0.125000 -0.125000 -0.250000 +v -0.125000 0.125000 -0.250000 +v -0.125000 -0.125000 -0.500000 +v -0.125000 0.125000 -0.500000 +v 0.125000 -0.125000 -0.250000 +v 0.125000 0.125000 -0.250000 +v 0.125000 -0.125000 -0.500000 +v 0.125000 0.125000 -0.500000 +v -0.125000 0.000000 -0.250000 +v -0.125000 0.125000 -0.375000 +v -0.125000 0.000000 -0.500000 +v -0.125000 -0.125000 -0.375000 +v 0.000000 0.125000 -0.500000 +v 0.125000 0.000000 -0.500000 +v 0.000000 -0.125000 -0.500000 +v 0.125000 0.125000 -0.375000 +v 0.125000 0.000000 -0.250000 +v 0.125000 -0.125000 -0.375000 +v 0.000000 0.125000 -0.250000 +v 0.000000 -0.125000 -0.250000 +v 0.000000 0.125000 -0.375000 +v 0.000000 -0.125000 -0.375000 +v 0.000000 0.000000 -0.250000 +v 0.125000 0.000000 -0.375000 +v 0.000000 0.000000 -0.500000 +v -0.125000 0.000000 -0.375000 +v -0.125000 -0.500000 -0.250000 +v -0.125000 -0.250000 -0.250000 +v -0.125000 -0.500000 -0.500000 +v -0.125000 -0.250000 -0.500000 +v 0.125000 -0.500000 -0.250000 +v 0.125000 -0.250000 -0.250000 +v 0.125000 -0.500000 -0.500000 +v 0.125000 -0.250000 -0.500000 +v -0.125000 -0.375000 -0.250000 +v -0.125000 -0.250000 -0.375000 +v -0.125000 -0.375000 -0.500000 +v -0.125000 -0.500000 -0.375000 +v 0.000000 -0.250000 -0.500000 +v 0.125000 -0.375000 -0.500000 +v 0.000000 -0.500000 -0.500000 +v 0.125000 -0.250000 -0.375000 +v 0.125000 -0.375000 -0.250000 +v 0.125000 -0.500000 -0.375000 +v 0.000000 -0.250000 -0.250000 +v 0.000000 -0.500000 -0.250000 +v 0.000000 -0.250000 -0.375000 +v 0.000000 -0.500000 -0.375000 +v 0.000000 -0.375000 -0.250000 +v 0.125000 -0.375000 -0.375000 +v 0.000000 -0.375000 -0.500000 +v -0.125000 -0.375000 -0.375000 +v -0.125000 0.250000 0.500000 +v -0.125000 0.500000 0.500000 +v -0.125000 0.250000 0.250000 +v -0.125000 0.500000 0.250000 +v 0.125000 0.250000 0.500000 +v 0.125000 0.500000 0.500000 +v 0.125000 0.250000 0.250000 +v 0.125000 0.500000 0.250000 +v -0.125000 0.375000 0.500000 +v -0.125000 0.500000 0.375000 +v -0.125000 0.375000 0.250000 +v -0.125000 0.250000 0.375000 +v 0.000000 0.500000 0.250000 +v 0.125000 0.375000 0.250000 +v 0.000000 0.250000 0.250000 +v 0.125000 0.500000 0.375000 +v 0.125000 0.375000 0.500000 +v 0.125000 0.250000 0.375000 +v 0.000000 0.500000 0.500000 +v 0.000000 0.250000 0.500000 +v 0.000000 0.500000 0.375000 +v 0.000000 0.250000 0.375000 +v 0.000000 0.375000 0.500000 +v 0.125000 0.375000 0.375000 +v 0.000000 0.375000 0.250000 +v -0.125000 0.375000 0.375000 +v -0.125000 -0.500000 0.500000 +v -0.125000 -0.250000 0.500000 +v -0.125000 -0.500000 0.250000 +v -0.125000 -0.250000 0.250000 +v 0.125000 -0.500000 0.500000 +v 0.125000 -0.250000 0.500000 +v 0.125000 -0.500000 0.250000 +v 0.125000 -0.250000 0.250000 +v -0.125000 -0.375000 0.500000 +v -0.125000 -0.250000 0.375000 +v -0.125000 -0.375000 0.250000 +v -0.125000 -0.500000 0.375000 +v 0.000000 -0.250000 0.250000 +v 0.125000 -0.375000 0.250000 +v 0.000000 -0.500000 0.250000 +v 0.125000 -0.250000 0.375000 +v 0.125000 -0.375000 0.500000 +v 0.125000 -0.500000 0.375000 +v 0.000000 -0.250000 0.500000 +v 0.000000 -0.500000 0.500000 +v 0.000000 -0.250000 0.375000 +v 0.000000 -0.500000 0.375000 +v 0.000000 -0.375000 0.500000 +v 0.125000 -0.375000 0.375000 +v 0.000000 -0.375000 0.250000 +v -0.125000 -0.375000 0.375000 +v 0.250000 -0.500000 0.500000 +v 0.250000 -0.250000 0.500000 +v 0.250000 -0.500000 0.250000 +v 0.250000 -0.250000 0.250000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.250000 0.500000 +v 0.500000 -0.500000 0.250000 +v 0.500000 -0.250000 0.250000 +v 0.250000 -0.375000 0.500000 +v 0.250000 -0.250000 0.375000 +v 0.250000 -0.375000 0.250000 +v 0.250000 -0.500000 0.375000 +v 0.375000 -0.250000 0.250000 +v 0.500000 -0.375000 0.250000 +v 0.375000 -0.500000 0.250000 +v 0.500000 -0.250000 0.375000 +v 0.500000 -0.375000 0.500000 +v 0.500000 -0.500000 0.375000 +v 0.375000 -0.250000 0.500000 +v 0.375000 -0.500000 0.500000 +v 0.375000 -0.250000 0.375000 +v 0.375000 -0.500000 0.375000 +v 0.375000 -0.375000 0.500000 +v 0.500000 -0.375000 0.375000 +v 0.375000 -0.375000 0.250000 +v 0.250000 -0.375000 0.375000 +v 0.250000 -0.500000 0.125000 +v 0.250000 -0.250000 0.125000 +v 0.250000 -0.500000 -0.125000 +v 0.250000 -0.250000 -0.125000 +v 0.500000 -0.500000 0.125000 +v 0.500000 -0.250000 0.125000 +v 0.500000 -0.500000 -0.125000 +v 0.500000 -0.250000 -0.125000 +v 0.250000 -0.375000 0.125000 +v 0.250000 -0.250000 0.000000 +v 0.250000 -0.375000 -0.125000 +v 0.250000 -0.500000 0.000000 +v 0.375000 -0.250000 -0.125000 +v 0.500000 -0.375000 -0.125000 +v 0.375000 -0.500000 -0.125000 +v 0.500000 -0.250000 0.000000 +v 0.500000 -0.375000 0.125000 +v 0.500000 -0.500000 0.000000 +v 0.375000 -0.250000 0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 -0.250000 0.000000 +v 0.375000 -0.500000 0.000000 +v 0.375000 -0.375000 0.125000 +v 0.500000 -0.375000 0.000000 +v 0.375000 -0.375000 -0.125000 +v 0.250000 -0.375000 0.000000 +v 0.250000 -0.500000 -0.250000 +v 0.250000 -0.250000 -0.250000 +v 0.250000 -0.500000 -0.500000 +v 0.250000 -0.250000 -0.500000 +v 0.500000 -0.500000 -0.250000 +v 0.500000 -0.250000 -0.250000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.250000 -0.500000 +v 0.250000 -0.375000 -0.250000 +v 0.250000 -0.250000 -0.375000 +v 0.250000 -0.375000 -0.500000 +v 0.250000 -0.500000 -0.375000 +v 0.375000 -0.250000 -0.500000 +v 0.500000 -0.375000 -0.500000 +v 0.375000 -0.500000 -0.500000 +v 0.500000 -0.250000 -0.375000 +v 0.500000 -0.375000 -0.250000 +v 0.500000 -0.500000 -0.375000 +v 0.375000 -0.250000 -0.250000 +v 0.375000 -0.500000 -0.250000 +v 0.375000 -0.250000 -0.375000 +v 0.375000 -0.500000 -0.375000 +v 0.375000 -0.375000 -0.250000 +v 0.500000 -0.375000 -0.375000 +v 0.375000 -0.375000 -0.500000 +v 0.250000 -0.375000 -0.375000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.250000 0.500000 +v -0.500000 -0.500000 0.250000 +v -0.500000 -0.250000 0.250000 +v -0.250000 -0.500000 0.500000 +v -0.250000 -0.250000 0.500000 +v -0.250000 -0.500000 0.250000 +v -0.250000 -0.250000 0.250000 +v -0.500000 -0.375000 0.500000 +v -0.500000 -0.250000 0.375000 +v -0.500000 -0.375000 0.250000 +v -0.500000 -0.500000 0.375000 +v -0.375000 -0.250000 0.250000 +v -0.250000 -0.375000 0.250000 +v -0.375000 -0.500000 0.250000 +v -0.250000 -0.250000 0.375000 +v -0.250000 -0.375000 0.500000 +v -0.250000 -0.500000 0.375000 +v -0.375000 -0.250000 0.500000 +v -0.375000 -0.500000 0.500000 +v -0.375000 -0.250000 0.375000 +v -0.375000 -0.500000 0.375000 +v -0.375000 -0.375000 0.500000 +v -0.250000 -0.375000 0.375000 +v -0.375000 -0.375000 0.250000 +v -0.500000 -0.375000 0.375000 +v -0.500000 -0.500000 0.125000 +v -0.500000 -0.250000 0.125000 +v -0.500000 -0.500000 -0.125000 +v -0.500000 -0.250000 -0.125000 +v -0.250000 -0.500000 0.125000 +v -0.250000 -0.250000 0.125000 +v -0.250000 -0.500000 -0.125000 +v -0.250000 -0.250000 -0.125000 +v -0.500000 -0.375000 0.125000 +v -0.500000 -0.250000 0.000000 +v -0.500000 -0.375000 -0.125000 +v -0.500000 -0.500000 0.000000 +v -0.375000 -0.250000 -0.125000 +v -0.250000 -0.375000 -0.125000 +v -0.375000 -0.500000 -0.125000 +v -0.250000 -0.250000 0.000000 +v -0.250000 -0.375000 0.125000 +v -0.250000 -0.500000 0.000000 +v -0.375000 -0.250000 0.125000 +v -0.375000 -0.500000 0.125000 +v -0.375000 -0.250000 0.000000 +v -0.375000 -0.500000 0.000000 +v -0.375000 -0.375000 0.125000 +v -0.250000 -0.375000 0.000000 +v -0.375000 -0.375000 -0.125000 +v -0.500000 -0.375000 0.000000 +v -0.500000 -0.500000 -0.250000 +v -0.500000 -0.250000 -0.250000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.250000 -0.500000 +v -0.250000 -0.500000 -0.250000 +v -0.250000 -0.250000 -0.250000 +v -0.250000 -0.500000 -0.500000 +v -0.250000 -0.250000 -0.500000 +v -0.500000 -0.375000 -0.250000 +v -0.500000 -0.250000 -0.375000 +v -0.500000 -0.375000 -0.500000 +v -0.500000 -0.500000 -0.375000 +v -0.375000 -0.250000 -0.500000 +v -0.250000 -0.375000 -0.500000 +v -0.375000 -0.500000 -0.500000 +v -0.250000 -0.250000 -0.375000 +v -0.250000 -0.375000 -0.250000 +v -0.250000 -0.500000 -0.375000 +v -0.375000 -0.250000 -0.250000 +v -0.375000 -0.500000 -0.250000 +v -0.375000 -0.250000 -0.375000 +v -0.375000 -0.500000 -0.375000 +v -0.375000 -0.375000 -0.250000 +v -0.250000 -0.375000 -0.375000 +v -0.375000 -0.375000 -0.500000 +v -0.500000 -0.375000 -0.375000 +v -0.500000 0.250000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.250000 0.250000 +v -0.500000 0.500000 0.250000 +v -0.250000 0.250000 0.500000 +v -0.250000 0.500000 0.500000 +v -0.250000 0.250000 0.250000 +v -0.250000 0.500000 0.250000 +v -0.500000 0.375000 0.500000 +v -0.500000 0.500000 0.375000 +v -0.500000 0.375000 0.250000 +v -0.500000 0.250000 0.375000 +v -0.375000 0.500000 0.250000 +v -0.250000 0.375000 0.250000 +v -0.375000 0.250000 0.250000 +v -0.250000 0.500000 0.375000 +v -0.250000 0.375000 0.500000 +v -0.250000 0.250000 0.375000 +v -0.375000 0.500000 0.500000 +v -0.375000 0.250000 0.500000 +v -0.375000 0.500000 0.375000 +v -0.375000 0.250000 0.375000 +v -0.375000 0.375000 0.500000 +v -0.250000 0.375000 0.375000 +v -0.375000 0.375000 0.250000 +v -0.500000 0.375000 0.375000 +v -0.500000 0.250000 0.125000 +v -0.500000 0.500000 0.125000 +v -0.500000 0.250000 -0.125000 +v -0.500000 0.500000 -0.125000 +v -0.250000 0.250000 0.125000 +v -0.250000 0.500000 0.125000 +v -0.250000 0.250000 -0.125000 +v -0.250000 0.500000 -0.125000 +v -0.500000 0.375000 0.125000 +v -0.500000 0.500000 0.000000 +v -0.500000 0.375000 -0.125000 +v -0.500000 0.250000 0.000000 +v -0.375000 0.500000 -0.125000 +v -0.250000 0.375000 -0.125000 +v -0.375000 0.250000 -0.125000 +v -0.250000 0.500000 0.000000 +v -0.250000 0.375000 0.125000 +v -0.250000 0.250000 0.000000 +v -0.375000 0.500000 0.125000 +v -0.375000 0.250000 0.125000 +v -0.375000 0.500000 0.000000 +v -0.375000 0.250000 0.000000 +v -0.375000 0.375000 0.125000 +v -0.250000 0.375000 0.000000 +v -0.375000 0.375000 -0.125000 +v -0.500000 0.375000 0.000000 +v -0.500000 0.250000 -0.250000 +v -0.500000 0.500000 -0.250000 +v -0.500000 0.250000 -0.500000 +v -0.500000 0.500000 -0.500000 +v -0.250000 0.250000 -0.250000 +v -0.250000 0.500000 -0.250000 +v -0.250000 0.250000 -0.500000 +v -0.250000 0.500000 -0.500000 +v -0.500000 0.375000 -0.250000 +v -0.500000 0.500000 -0.375000 +v -0.500000 0.375000 -0.500000 +v -0.500000 0.250000 -0.375000 +v -0.375000 0.500000 -0.500000 +v -0.250000 0.375000 -0.500000 +v -0.375000 0.250000 -0.500000 +v -0.250000 0.500000 -0.375000 +v -0.250000 0.375000 -0.250000 +v -0.250000 0.250000 -0.375000 +v -0.375000 0.500000 -0.250000 +v -0.375000 0.250000 -0.250000 +v -0.375000 0.500000 -0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.375000 -0.250000 +v -0.250000 0.375000 -0.375000 +v -0.375000 0.375000 -0.500000 +v -0.500000 0.375000 -0.375000 +v 0.250000 0.250000 0.500000 +v 0.250000 0.500000 0.500000 +v 0.250000 0.250000 0.250000 +v 0.250000 0.500000 0.250000 +v 0.500000 0.250000 0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 0.250000 0.250000 +v 0.500000 0.500000 0.250000 +v 0.250000 0.375000 0.500000 +v 0.250000 0.500000 0.375000 +v 0.250000 0.375000 0.250000 +v 0.250000 0.250000 0.375000 +v 0.375000 0.500000 0.250000 +v 0.500000 0.375000 0.250000 +v 0.375000 0.250000 0.250000 +v 0.500000 0.500000 0.375000 +v 0.500000 0.375000 0.500000 +v 0.500000 0.250000 0.375000 +v 0.375000 0.500000 0.500000 +v 0.375000 0.250000 0.500000 +v 0.375000 0.500000 0.375000 +v 0.375000 0.250000 0.375000 +v 0.375000 0.375000 0.500000 +v 0.500000 0.375000 0.375000 +v 0.375000 0.375000 0.250000 +v 0.250000 0.375000 0.375000 +v 0.250000 0.250000 0.125000 +v 0.250000 0.500000 0.125000 +v 0.250000 0.250000 -0.125000 +v 0.250000 0.500000 -0.125000 +v 0.500000 0.250000 0.125000 +v 0.500000 0.500000 0.125000 +v 0.500000 0.250000 -0.125000 +v 0.500000 0.500000 -0.125000 +v 0.250000 0.375000 0.125000 +v 0.250000 0.500000 0.000000 +v 0.250000 0.375000 -0.125000 +v 0.250000 0.250000 0.000000 +v 0.375000 0.500000 -0.125000 +v 0.500000 0.375000 -0.125000 +v 0.375000 0.250000 -0.125000 +v 0.500000 0.500000 0.000000 +v 0.500000 0.375000 0.125000 +v 0.500000 0.250000 0.000000 +v 0.375000 0.500000 0.125000 +v 0.375000 0.250000 0.125000 +v 0.375000 0.500000 0.000000 +v 0.375000 0.250000 0.000000 +v 0.375000 0.375000 0.125000 +v 0.500000 0.375000 0.000000 +v 0.375000 0.375000 -0.125000 +v 0.250000 0.375000 0.000000 +v 0.250000 0.250000 -0.250000 +v 0.250000 0.500000 -0.250000 +v 0.250000 0.250000 -0.500000 +v 0.250000 0.500000 -0.500000 +v 0.500000 0.250000 -0.250000 +v 0.500000 0.500000 -0.250000 +v 0.500000 0.250000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.250000 0.375000 -0.250000 +v 0.250000 0.500000 -0.375000 +v 0.250000 0.375000 -0.500000 +v 0.250000 0.250000 -0.375000 +v 0.375000 0.500000 -0.500000 +v 0.500000 0.375000 -0.500000 +v 0.375000 0.250000 -0.500000 +v 0.500000 0.500000 -0.375000 +v 0.500000 0.375000 -0.250000 +v 0.500000 0.250000 -0.375000 +v 0.375000 0.500000 -0.250000 +v 0.375000 0.250000 -0.250000 +v 0.375000 0.500000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.375000 -0.250000 +v 0.500000 0.375000 -0.375000 +v 0.375000 0.375000 -0.500000 +v 0.250000 0.375000 -0.375000 +vt 0.625000 0.625000 +vt 1.000000 0.625000 +vt 1.000000 1.000000 +vt 0.625000 1.000000 +vt 0.000000 0.625000 +vt 0.375000 0.625000 +vt 0.375000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 -0.000000 +vt 0.375000 -0.000000 +vt 0.375000 0.375000 +vt -0.000000 0.375000 +vt 0.625000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.375000 +vt 0.625000 0.375000 +vt 0.875000 0.875000 +vt 1.000000 0.875000 +vt 0.875000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.125000 -0.000000 +vt 0.125000 0.125000 +vt -0.000000 0.125000 +vt 0.875000 0.000000 +vt 1.000000 0.125000 +vt 0.875000 0.125000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +g Cube_Meshnode_Material_1 +usemtl Material_1 +s off +f 26/1/1 11/2/1 3/3/1 12/4/1 +f 25/1/2 14/2/2 7/3/2 15/4/2 +f 24/1/3 17/2/3 5/3/3 18/4/3 +f 23/1/4 9/2/4 1/3/4 20/4/4 +f 22/1/5 15/2/5 7/3/5 18/4/5 +f 21/1/6 13/2/6 4/3/6 10/4/6 +f 19/5/6 21/6/6 10/7/6 2/8/6 +f 6/9/6 16/10/6 21/11/6 19/12/6 +f 16/13/6 8/14/6 13/15/6 21/16/6 +f 20/5/5 22/6/5 18/7/5 5/8/5 +f 1/9/5 12/10/5 22/11/5 20/12/5 +f 12/13/5 3/14/5 15/15/5 22/16/5 +f 17/5/4 23/6/4 20/7/4 5/8/4 +f 6/9/4 19/10/4 23/11/4 17/12/4 +f 19/13/4 2/14/4 9/15/4 23/16/4 +f 14/5/3 24/6/3 18/7/3 7/8/3 +f 8/9/3 16/10/3 24/11/3 14/12/3 +f 16/13/3 6/14/3 17/15/3 24/16/3 +f 11/5/2 25/6/2 15/7/2 3/8/2 +f 4/9/2 13/10/2 25/11/2 11/12/2 +f 13/13/2 8/14/2 14/15/2 25/16/2 +f 9/5/1 26/6/1 12/7/1 1/8/1 +f 2/9/1 10/10/1 26/11/1 9/12/1 +f 10/13/1 4/14/1 11/15/1 26/16/1 +g Cube_Meshnode_Material_2 +usemtl Material_2 +f 52/17/1 37/18/1 29/3/1 38/19/1 +f 51/17/2 40/18/2 33/3/2 41/19/2 +f 50/17/3 43/18/3 31/3/3 44/19/3 +f 49/17/4 35/18/4 27/3/4 46/19/4 +f 48/17/5 41/18/5 33/3/5 44/19/5 +f 47/17/6 39/18/6 30/3/6 36/19/6 +f 45/20/6 47/21/6 36/22/6 28/8/6 +f 32/9/6 42/23/6 47/24/6 45/25/6 +f 42/26/6 34/14/6 39/27/6 47/28/6 +f 46/20/5 48/21/5 44/22/5 31/8/5 +f 27/9/5 38/23/5 48/24/5 46/25/5 +f 38/26/5 29/14/5 41/27/5 48/28/5 +f 43/20/4 49/21/4 46/22/4 31/8/4 +f 32/9/4 45/23/4 49/24/4 43/25/4 +f 45/26/4 28/14/4 35/27/4 49/28/4 +f 40/20/3 50/21/3 44/22/3 33/8/3 +f 34/9/3 42/23/3 50/24/3 40/25/3 +f 42/26/3 32/14/3 43/27/3 50/28/3 +f 37/20/2 51/21/2 41/22/2 29/8/2 +f 30/9/2 39/23/2 51/24/2 37/25/2 +f 39/26/2 34/14/2 40/27/2 51/28/2 +f 35/20/1 52/21/1 38/22/1 27/8/1 +f 28/9/1 36/23/1 52/24/1 35/25/1 +f 36/26/1 30/14/1 37/27/1 52/28/1 +g Cube_Meshnode_Material_3 +usemtl Material_3 +f 78/17/1 63/18/1 55/3/1 64/19/1 +f 77/17/2 66/18/2 59/3/2 67/19/2 +f 76/17/3 69/18/3 57/3/3 70/19/3 +f 75/17/4 61/18/4 53/3/4 72/19/4 +f 74/17/5 67/18/5 59/3/5 70/19/5 +f 73/17/6 65/18/6 56/3/6 62/19/6 +f 71/20/6 73/21/6 62/22/6 54/8/6 +f 58/9/6 68/23/6 73/24/6 71/25/6 +f 68/26/6 60/14/6 65/27/6 73/28/6 +f 72/20/5 74/21/5 70/22/5 57/8/5 +f 53/9/5 64/23/5 74/24/5 72/25/5 +f 64/26/5 55/14/5 67/27/5 74/28/5 +f 69/20/4 75/21/4 72/22/4 57/8/4 +f 58/9/4 71/23/4 75/24/4 69/25/4 +f 71/26/4 54/14/4 61/27/4 75/28/4 +f 66/20/3 76/21/3 70/22/3 59/8/3 +f 60/9/3 68/23/3 76/24/3 66/25/3 +f 68/26/3 58/14/3 69/27/3 76/28/3 +f 63/20/2 77/21/2 67/22/2 55/8/2 +f 56/9/2 65/23/2 77/24/2 63/25/2 +f 65/26/2 60/14/2 66/27/2 77/28/2 +f 61/20/1 78/21/1 64/22/1 53/8/1 +f 54/9/1 62/23/1 78/24/1 61/25/1 +f 62/26/1 56/14/1 63/27/1 78/28/1 +f 130/17/1 115/18/1 107/3/1 116/19/1 +f 129/17/2 118/18/2 111/3/2 119/19/2 +f 128/17/3 121/18/3 109/3/3 122/19/3 +f 127/17/4 113/18/4 105/3/4 124/19/4 +f 126/17/5 119/18/5 111/3/5 122/19/5 +f 125/17/6 117/18/6 108/3/6 114/19/6 +f 123/20/6 125/21/6 114/22/6 106/8/6 +f 110/9/6 120/23/6 125/24/6 123/25/6 +f 120/26/6 112/14/6 117/27/6 125/28/6 +f 124/20/5 126/21/5 122/22/5 109/8/5 +f 105/9/5 116/23/5 126/24/5 124/25/5 +f 116/26/5 107/14/5 119/27/5 126/28/5 +f 121/20/4 127/21/4 124/22/4 109/8/4 +f 110/9/4 123/23/4 127/24/4 121/25/4 +f 123/26/4 106/14/4 113/27/4 127/28/4 +f 118/20/3 128/21/3 122/22/3 111/8/3 +f 112/9/3 120/23/3 128/24/3 118/25/3 +f 120/26/3 110/14/3 121/27/3 128/28/3 +f 115/20/2 129/21/2 119/22/2 107/8/2 +f 108/9/2 117/23/2 129/24/2 115/25/2 +f 117/26/2 112/14/2 118/27/2 129/28/2 +f 113/20/1 130/21/1 116/22/1 105/8/1 +f 106/9/1 114/23/1 130/24/1 113/25/1 +f 114/26/1 108/14/1 115/27/1 130/28/1 +f 156/17/1 141/18/1 133/3/1 142/19/1 +f 155/17/2 144/18/2 137/3/2 145/19/2 +f 154/17/3 147/18/3 135/3/3 148/19/3 +f 153/17/4 139/18/4 131/3/4 150/19/4 +f 152/17/5 145/18/5 137/3/5 148/19/5 +f 151/17/6 143/18/6 134/3/6 140/19/6 +f 149/20/6 151/21/6 140/22/6 132/8/6 +f 136/9/6 146/23/6 151/24/6 149/25/6 +f 146/26/6 138/14/6 143/27/6 151/28/6 +f 150/20/5 152/21/5 148/22/5 135/8/5 +f 131/9/5 142/23/5 152/24/5 150/25/5 +f 142/26/5 133/14/5 145/27/5 152/28/5 +f 147/20/4 153/21/4 150/22/4 135/8/4 +f 136/9/4 149/23/4 153/24/4 147/25/4 +f 149/26/4 132/14/4 139/27/4 153/28/4 +f 144/20/3 154/21/3 148/22/3 137/8/3 +f 138/9/3 146/23/3 154/24/3 144/25/3 +f 146/26/3 136/14/3 147/27/3 154/28/3 +f 141/20/2 155/21/2 145/22/2 133/8/2 +f 134/9/2 143/23/2 155/24/2 141/25/2 +f 143/26/2 138/14/2 144/27/2 155/28/2 +f 139/20/1 156/21/1 142/22/1 131/8/1 +f 132/9/1 140/23/1 156/24/1 139/25/1 +f 140/26/1 134/14/1 141/27/1 156/28/1 +f 182/17/1 167/18/1 159/3/1 168/19/1 +f 181/17/2 170/18/2 163/3/2 171/19/2 +f 180/17/3 173/18/3 161/3/3 174/19/3 +f 179/17/4 165/18/4 157/3/4 176/19/4 +f 178/17/5 171/18/5 163/3/5 174/19/5 +f 177/17/6 169/18/6 160/3/6 166/19/6 +f 175/20/6 177/21/6 166/22/6 158/8/6 +f 162/9/6 172/23/6 177/24/6 175/25/6 +f 172/26/6 164/14/6 169/27/6 177/28/6 +f 176/20/5 178/21/5 174/22/5 161/8/5 +f 157/9/5 168/23/5 178/24/5 176/25/5 +f 168/26/5 159/14/5 171/27/5 178/28/5 +f 173/20/4 179/21/4 176/22/4 161/8/4 +f 162/9/4 175/23/4 179/24/4 173/25/4 +f 175/26/4 158/14/4 165/27/4 179/28/4 +f 170/20/3 180/21/3 174/22/3 163/8/3 +f 164/9/3 172/23/3 180/24/3 170/25/3 +f 172/26/3 162/14/3 173/27/3 180/28/3 +f 167/20/2 181/21/2 171/22/2 159/8/2 +f 160/9/2 169/23/2 181/24/2 167/25/2 +f 169/26/2 164/14/2 170/27/2 181/28/2 +f 165/20/1 182/21/1 168/22/1 157/8/1 +f 158/9/1 166/23/1 182/24/1 165/25/1 +f 166/26/1 160/14/1 167/27/1 182/28/1 +f 208/17/1 193/18/1 185/3/1 194/19/1 +f 207/17/2 196/18/2 189/3/2 197/19/2 +f 206/17/3 199/18/3 187/3/3 200/19/3 +f 205/17/4 191/18/4 183/3/4 202/19/4 +f 204/17/5 197/18/5 189/3/5 200/19/5 +f 203/17/6 195/18/6 186/3/6 192/19/6 +f 201/20/6 203/21/6 192/22/6 184/8/6 +f 188/9/6 198/23/6 203/24/6 201/25/6 +f 198/26/6 190/14/6 195/27/6 203/28/6 +f 202/20/5 204/21/5 200/22/5 187/8/5 +f 183/9/5 194/23/5 204/24/5 202/25/5 +f 194/26/5 185/14/5 197/27/5 204/28/5 +f 199/20/4 205/21/4 202/22/4 187/8/4 +f 188/9/4 201/23/4 205/24/4 199/25/4 +f 201/26/4 184/14/4 191/27/4 205/28/4 +f 196/20/3 206/21/3 200/22/3 189/8/3 +f 190/9/3 198/23/3 206/24/3 196/25/3 +f 198/26/3 188/14/3 199/27/3 206/28/3 +f 193/20/2 207/21/2 197/22/2 185/8/2 +f 186/9/2 195/23/2 207/24/2 193/25/2 +f 195/26/2 190/14/2 196/27/2 207/28/2 +f 191/20/1 208/21/1 194/22/1 183/8/1 +f 184/9/1 192/23/1 208/24/1 191/25/1 +f 192/26/1 186/14/1 193/27/1 208/28/1 +f 234/17/1 219/18/1 211/3/1 220/19/1 +f 233/17/2 222/18/2 215/3/2 223/19/2 +f 232/17/3 225/18/3 213/3/3 226/19/3 +f 231/17/4 217/18/4 209/3/4 228/19/4 +f 230/17/5 223/18/5 215/3/5 226/19/5 +f 229/17/6 221/18/6 212/3/6 218/19/6 +f 227/20/6 229/21/6 218/22/6 210/8/6 +f 214/9/6 224/23/6 229/24/6 227/25/6 +f 224/26/6 216/14/6 221/27/6 229/28/6 +f 228/20/5 230/21/5 226/22/5 213/8/5 +f 209/9/5 220/23/5 230/24/5 228/25/5 +f 220/26/5 211/14/5 223/27/5 230/28/5 +f 225/20/4 231/21/4 228/22/4 213/8/4 +f 214/9/4 227/23/4 231/24/4 225/25/4 +f 227/26/4 210/14/4 217/27/4 231/28/4 +f 222/20/3 232/21/3 226/22/3 215/8/3 +f 216/9/3 224/23/3 232/24/3 222/25/3 +f 224/26/3 214/14/3 225/27/3 232/28/3 +f 219/20/2 233/21/2 223/22/2 211/8/2 +f 212/9/2 221/23/2 233/24/2 219/25/2 +f 221/26/2 216/14/2 222/27/2 233/28/2 +f 217/20/1 234/21/1 220/22/1 209/8/1 +f 210/9/1 218/23/1 234/24/1 217/25/1 +f 218/26/1 212/14/1 219/27/1 234/28/1 +f 260/17/1 245/18/1 237/3/1 246/19/1 +f 259/17/2 248/18/2 241/3/2 249/19/2 +f 258/17/3 251/18/3 239/3/3 252/19/3 +f 257/17/4 243/18/4 235/3/4 254/19/4 +f 256/17/5 249/18/5 241/3/5 252/19/5 +f 255/17/6 247/18/6 238/3/6 244/19/6 +f 253/20/6 255/21/6 244/22/6 236/8/6 +f 240/9/6 250/23/6 255/24/6 253/25/6 +f 250/26/6 242/14/6 247/27/6 255/28/6 +f 254/20/5 256/21/5 252/22/5 239/8/5 +f 235/9/5 246/23/5 256/24/5 254/25/5 +f 246/26/5 237/14/5 249/27/5 256/28/5 +f 251/20/4 257/21/4 254/22/4 239/8/4 +f 240/9/4 253/23/4 257/24/4 251/25/4 +f 253/26/4 236/14/4 243/27/4 257/28/4 +f 248/20/3 258/21/3 252/22/3 241/8/3 +f 242/9/3 250/23/3 258/24/3 248/25/3 +f 250/26/3 240/14/3 251/27/3 258/28/3 +f 245/20/2 259/21/2 249/22/2 237/8/2 +f 238/9/2 247/23/2 259/24/2 245/25/2 +f 247/26/2 242/14/2 248/27/2 259/28/2 +f 243/20/1 260/21/1 246/22/1 235/8/1 +f 236/9/1 244/23/1 260/24/1 243/25/1 +f 244/26/1 238/14/1 245/27/1 260/28/1 +f 312/17/1 297/18/1 289/3/1 298/19/1 +f 311/17/2 300/18/2 293/3/2 301/19/2 +f 310/17/3 303/18/3 291/3/3 304/19/3 +f 309/17/4 295/18/4 287/3/4 306/19/4 +f 308/17/5 301/18/5 293/3/5 304/19/5 +f 307/17/6 299/18/6 290/3/6 296/19/6 +f 305/20/6 307/21/6 296/22/6 288/8/6 +f 292/9/6 302/23/6 307/24/6 305/25/6 +f 302/26/6 294/14/6 299/27/6 307/28/6 +f 306/20/5 308/21/5 304/22/5 291/8/5 +f 287/9/5 298/23/5 308/24/5 306/25/5 +f 298/26/5 289/14/5 301/27/5 308/28/5 +f 303/20/4 309/21/4 306/22/4 291/8/4 +f 292/9/4 305/23/4 309/24/4 303/25/4 +f 305/26/4 288/14/4 295/27/4 309/28/4 +f 300/20/3 310/21/3 304/22/3 293/8/3 +f 294/9/3 302/23/3 310/24/3 300/25/3 +f 302/26/3 292/14/3 303/27/3 310/28/3 +f 297/20/2 311/21/2 301/22/2 289/8/2 +f 290/9/2 299/23/2 311/24/2 297/25/2 +f 299/26/2 294/14/2 300/27/2 311/28/2 +f 295/20/1 312/21/1 298/22/1 287/8/1 +f 288/9/1 296/23/1 312/24/1 295/25/1 +f 296/26/1 290/14/1 297/27/1 312/28/1 +f 338/17/1 323/18/1 315/3/1 324/19/1 +f 337/17/2 326/18/2 319/3/2 327/19/2 +f 336/17/3 329/18/3 317/3/3 330/19/3 +f 335/17/4 321/18/4 313/3/4 332/19/4 +f 334/17/5 327/18/5 319/3/5 330/19/5 +f 333/17/6 325/18/6 316/3/6 322/19/6 +f 331/20/6 333/21/6 322/22/6 314/8/6 +f 318/9/6 328/23/6 333/24/6 331/25/6 +f 328/26/6 320/14/6 325/27/6 333/28/6 +f 332/20/5 334/21/5 330/22/5 317/8/5 +f 313/9/5 324/23/5 334/24/5 332/25/5 +f 324/26/5 315/14/5 327/27/5 334/28/5 +f 329/20/4 335/21/4 332/22/4 317/8/4 +f 318/9/4 331/23/4 335/24/4 329/25/4 +f 331/26/4 314/14/4 321/27/4 335/28/4 +f 326/20/3 336/21/3 330/22/3 319/8/3 +f 320/9/3 328/23/3 336/24/3 326/25/3 +f 328/26/3 318/14/3 329/27/3 336/28/3 +f 323/20/2 337/21/2 327/22/2 315/8/2 +f 316/9/2 325/23/2 337/24/2 323/25/2 +f 325/26/2 320/14/2 326/27/2 337/28/2 +f 321/20/1 338/21/1 324/22/1 313/8/1 +f 314/9/1 322/23/1 338/24/1 321/25/1 +f 322/26/1 316/14/1 323/27/1 338/28/1 +f 364/17/1 349/18/1 341/3/1 350/19/1 +f 363/17/2 352/18/2 345/3/2 353/19/2 +f 362/17/3 355/18/3 343/3/3 356/19/3 +f 361/17/4 347/18/4 339/3/4 358/19/4 +f 360/17/5 353/18/5 345/3/5 356/19/5 +f 359/17/6 351/18/6 342/3/6 348/19/6 +f 357/20/6 359/21/6 348/22/6 340/8/6 +f 344/9/6 354/23/6 359/24/6 357/25/6 +f 354/26/6 346/14/6 351/27/6 359/28/6 +f 358/20/5 360/21/5 356/22/5 343/8/5 +f 339/9/5 350/23/5 360/24/5 358/25/5 +f 350/26/5 341/14/5 353/27/5 360/28/5 +f 355/20/4 361/21/4 358/22/4 343/8/4 +f 344/9/4 357/23/4 361/24/4 355/25/4 +f 357/26/4 340/14/4 347/27/4 361/28/4 +f 352/20/3 362/21/3 356/22/3 345/8/3 +f 346/9/3 354/23/3 362/24/3 352/25/3 +f 354/26/3 344/14/3 355/27/3 362/28/3 +f 349/20/2 363/21/2 353/22/2 341/8/2 +f 342/9/2 351/23/2 363/24/2 349/25/2 +f 351/26/2 346/14/2 352/27/2 363/28/2 +f 347/20/1 364/21/1 350/22/1 339/8/1 +f 340/9/1 348/23/1 364/24/1 347/25/1 +f 348/26/1 342/14/1 349/27/1 364/28/1 +f 390/17/1 375/18/1 367/3/1 376/19/1 +f 389/17/2 378/18/2 371/3/2 379/19/2 +f 388/17/3 381/18/3 369/3/3 382/19/3 +f 387/17/4 373/18/4 365/3/4 384/19/4 +f 386/17/5 379/18/5 371/3/5 382/19/5 +f 385/17/6 377/18/6 368/3/6 374/19/6 +f 383/20/6 385/21/6 374/22/6 366/8/6 +f 370/9/6 380/23/6 385/24/6 383/25/6 +f 380/26/6 372/14/6 377/27/6 385/28/6 +f 384/20/5 386/21/5 382/22/5 369/8/5 +f 365/9/5 376/23/5 386/24/5 384/25/5 +f 376/26/5 367/14/5 379/27/5 386/28/5 +f 381/20/4 387/21/4 384/22/4 369/8/4 +f 370/9/4 383/23/4 387/24/4 381/25/4 +f 383/26/4 366/14/4 373/27/4 387/28/4 +f 378/20/3 388/21/3 382/22/3 371/8/3 +f 372/9/3 380/23/3 388/24/3 378/25/3 +f 380/26/3 370/14/3 381/27/3 388/28/3 +f 375/20/2 389/21/2 379/22/2 367/8/2 +f 368/9/2 377/23/2 389/24/2 375/25/2 +f 377/26/2 372/14/2 378/27/2 389/28/2 +f 373/20/1 390/21/1 376/22/1 365/8/1 +f 366/9/1 374/23/1 390/24/1 373/25/1 +f 374/26/1 368/14/1 375/27/1 390/28/1 +f 416/17/1 401/18/1 393/3/1 402/19/1 +f 415/17/2 404/18/2 397/3/2 405/19/2 +f 414/17/3 407/18/3 395/3/3 408/19/3 +f 413/17/4 399/18/4 391/3/4 410/19/4 +f 412/17/5 405/18/5 397/3/5 408/19/5 +f 411/17/6 403/18/6 394/3/6 400/19/6 +f 409/20/6 411/21/6 400/22/6 392/8/6 +f 396/9/6 406/23/6 411/24/6 409/25/6 +f 406/26/6 398/14/6 403/27/6 411/28/6 +f 410/20/5 412/21/5 408/22/5 395/8/5 +f 391/9/5 402/23/5 412/24/5 410/25/5 +f 402/26/5 393/14/5 405/27/5 412/28/5 +f 407/20/4 413/21/4 410/22/4 395/8/4 +f 396/9/4 409/23/4 413/24/4 407/25/4 +f 409/26/4 392/14/4 399/27/4 413/28/4 +f 404/20/3 414/21/3 408/22/3 397/8/3 +f 398/9/3 406/23/3 414/24/3 404/25/3 +f 406/26/3 396/14/3 407/27/3 414/28/3 +f 401/20/2 415/21/2 405/22/2 393/8/2 +f 394/9/2 403/23/2 415/24/2 401/25/2 +f 403/26/2 398/14/2 404/27/2 415/28/2 +f 399/20/1 416/21/1 402/22/1 391/8/1 +f 392/9/1 400/23/1 416/24/1 399/25/1 +f 400/26/1 394/14/1 401/27/1 416/28/1 +f 442/17/1 427/18/1 419/3/1 428/19/1 +f 441/17/2 430/18/2 423/3/2 431/19/2 +f 440/17/3 433/18/3 421/3/3 434/19/3 +f 439/17/4 425/18/4 417/3/4 436/19/4 +f 438/17/5 431/18/5 423/3/5 434/19/5 +f 437/17/6 429/18/6 420/3/6 426/19/6 +f 435/20/6 437/21/6 426/22/6 418/8/6 +f 422/9/6 432/23/6 437/24/6 435/25/6 +f 432/26/6 424/14/6 429/27/6 437/28/6 +f 436/20/5 438/21/5 434/22/5 421/8/5 +f 417/9/5 428/23/5 438/24/5 436/25/5 +f 428/26/5 419/14/5 431/27/5 438/28/5 +f 433/20/4 439/21/4 436/22/4 421/8/4 +f 422/9/4 435/23/4 439/24/4 433/25/4 +f 435/26/4 418/14/4 425/27/4 439/28/4 +f 430/20/3 440/21/3 434/22/3 423/8/3 +f 424/9/3 432/23/3 440/24/3 430/25/3 +f 432/26/3 422/14/3 433/27/3 440/28/3 +f 427/20/2 441/21/2 431/22/2 419/8/2 +f 420/9/2 429/23/2 441/24/2 427/25/2 +f 429/26/2 424/14/2 430/27/2 441/28/2 +f 425/20/1 442/21/1 428/22/1 417/8/1 +f 418/9/1 426/23/1 442/24/1 425/25/1 +f 426/26/1 420/14/1 427/27/1 442/28/1 +f 468/17/1 453/18/1 445/3/1 454/19/1 +f 467/17/2 456/18/2 449/3/2 457/19/2 +f 466/17/3 459/18/3 447/3/3 460/19/3 +f 465/17/4 451/18/4 443/3/4 462/19/4 +f 464/17/5 457/18/5 449/3/5 460/19/5 +f 463/17/6 455/18/6 446/3/6 452/19/6 +f 461/20/6 463/21/6 452/22/6 444/8/6 +f 448/9/6 458/23/6 463/24/6 461/25/6 +f 458/26/6 450/14/6 455/27/6 463/28/6 +f 462/20/5 464/21/5 460/22/5 447/8/5 +f 443/9/5 454/23/5 464/24/5 462/25/5 +f 454/26/5 445/14/5 457/27/5 464/28/5 +f 459/20/4 465/21/4 462/22/4 447/8/4 +f 448/9/4 461/23/4 465/24/4 459/25/4 +f 461/26/4 444/14/4 451/27/4 465/28/4 +f 456/20/3 466/21/3 460/22/3 449/8/3 +f 450/9/3 458/23/3 466/24/3 456/25/3 +f 458/26/3 448/14/3 459/27/3 466/28/3 +f 453/20/2 467/21/2 457/22/2 445/8/2 +f 446/9/2 455/23/2 467/24/2 453/25/2 +f 455/26/2 450/14/2 456/27/2 467/28/2 +f 451/20/1 468/21/1 454/22/1 443/8/1 +f 444/9/1 452/23/1 468/24/1 451/25/1 +f 452/26/1 446/14/1 453/27/1 468/28/1 +f 494/17/1 479/18/1 471/3/1 480/19/1 +f 493/17/2 482/18/2 475/3/2 483/19/2 +f 492/17/3 485/18/3 473/3/3 486/19/3 +f 491/17/4 477/18/4 469/3/4 488/19/4 +f 490/17/5 483/18/5 475/3/5 486/19/5 +f 489/17/6 481/18/6 472/3/6 478/19/6 +f 487/20/6 489/21/6 478/22/6 470/8/6 +f 474/9/6 484/23/6 489/24/6 487/25/6 +f 484/26/6 476/14/6 481/27/6 489/28/6 +f 488/20/5 490/21/5 486/22/5 473/8/5 +f 469/9/5 480/23/5 490/24/5 488/25/5 +f 480/26/5 471/14/5 483/27/5 490/28/5 +f 485/20/4 491/21/4 488/22/4 473/8/4 +f 474/9/4 487/23/4 491/24/4 485/25/4 +f 487/26/4 470/14/4 477/27/4 491/28/4 +f 482/20/3 492/21/3 486/22/3 475/8/3 +f 476/9/3 484/23/3 492/24/3 482/25/3 +f 484/26/3 474/14/3 485/27/3 492/28/3 +f 479/20/2 493/21/2 483/22/2 471/8/2 +f 472/9/2 481/23/2 493/24/2 479/25/2 +f 481/26/2 476/14/2 482/27/2 493/28/2 +f 477/20/1 494/21/1 480/22/1 469/8/1 +f 470/9/1 478/23/1 494/24/1 477/25/1 +f 478/26/1 472/14/1 479/27/1 494/28/1 +f 520/17/1 505/18/1 497/3/1 506/19/1 +f 519/17/2 508/18/2 501/3/2 509/19/2 +f 518/17/3 511/18/3 499/3/3 512/19/3 +f 517/17/4 503/18/4 495/3/4 514/19/4 +f 516/17/5 509/18/5 501/3/5 512/19/5 +f 515/17/6 507/18/6 498/3/6 504/19/6 +f 513/20/6 515/21/6 504/22/6 496/8/6 +f 500/9/6 510/23/6 515/24/6 513/25/6 +f 510/26/6 502/14/6 507/27/6 515/28/6 +f 514/20/5 516/21/5 512/22/5 499/8/5 +f 495/9/5 506/23/5 516/24/5 514/25/5 +f 506/26/5 497/14/5 509/27/5 516/28/5 +f 511/20/4 517/21/4 514/22/4 499/8/4 +f 500/9/4 513/23/4 517/24/4 511/25/4 +f 513/26/4 496/14/4 503/27/4 517/28/4 +f 508/20/3 518/21/3 512/22/3 501/8/3 +f 502/9/3 510/23/3 518/24/3 508/25/3 +f 510/26/3 500/14/3 511/27/3 518/28/3 +f 505/20/2 519/21/2 509/22/2 497/8/2 +f 498/9/2 507/23/2 519/24/2 505/25/2 +f 507/26/2 502/14/2 508/27/2 519/28/2 +f 503/20/1 520/21/1 506/22/1 495/8/1 +f 496/9/1 504/23/1 520/24/1 503/25/1 +f 504/26/1 498/14/1 505/27/1 520/28/1 +f 546/17/1 531/18/1 523/3/1 532/19/1 +f 545/17/2 534/18/2 527/3/2 535/19/2 +f 544/17/3 537/18/3 525/3/3 538/19/3 +f 543/17/4 529/18/4 521/3/4 540/19/4 +f 542/17/5 535/18/5 527/3/5 538/19/5 +f 541/17/6 533/18/6 524/3/6 530/19/6 +f 539/20/6 541/21/6 530/22/6 522/8/6 +f 526/9/6 536/23/6 541/24/6 539/25/6 +f 536/26/6 528/14/6 533/27/6 541/28/6 +f 540/20/5 542/21/5 538/22/5 525/8/5 +f 521/9/5 532/23/5 542/24/5 540/25/5 +f 532/26/5 523/14/5 535/27/5 542/28/5 +f 537/20/4 543/21/4 540/22/4 525/8/4 +f 526/9/4 539/23/4 543/24/4 537/25/4 +f 539/26/4 522/14/4 529/27/4 543/28/4 +f 534/20/3 544/21/3 538/22/3 527/8/3 +f 528/9/3 536/23/3 544/24/3 534/25/3 +f 536/26/3 526/14/3 537/27/3 544/28/3 +f 531/20/2 545/21/2 535/22/2 523/8/2 +f 524/9/2 533/23/2 545/24/2 531/25/2 +f 533/26/2 528/14/2 534/27/2 545/28/2 +f 529/20/1 546/21/1 532/22/1 521/8/1 +f 522/9/1 530/23/1 546/24/1 529/25/1 +f 530/26/1 524/14/1 531/27/1 546/28/1 +f 572/17/1 557/18/1 549/3/1 558/19/1 +f 571/17/2 560/18/2 553/3/2 561/19/2 +f 570/17/3 563/18/3 551/3/3 564/19/3 +f 569/17/4 555/18/4 547/3/4 566/19/4 +f 568/17/5 561/18/5 553/3/5 564/19/5 +f 567/17/6 559/18/6 550/3/6 556/19/6 +f 565/20/6 567/21/6 556/22/6 548/8/6 +f 552/9/6 562/23/6 567/24/6 565/25/6 +f 562/26/6 554/14/6 559/27/6 567/28/6 +f 566/20/5 568/21/5 564/22/5 551/8/5 +f 547/9/5 558/23/5 568/24/5 566/25/5 +f 558/26/5 549/14/5 561/27/5 568/28/5 +f 563/20/4 569/21/4 566/22/4 551/8/4 +f 552/9/4 565/23/4 569/24/4 563/25/4 +f 565/26/4 548/14/4 555/27/4 569/28/4 +f 560/20/3 570/21/3 564/22/3 553/8/3 +f 554/9/3 562/23/3 570/24/3 560/25/3 +f 562/26/3 552/14/3 563/27/3 570/28/3 +f 557/20/2 571/21/2 561/22/2 549/8/2 +f 550/9/2 559/23/2 571/24/2 557/25/2 +f 559/26/2 554/14/2 560/27/2 571/28/2 +f 555/20/1 572/21/1 558/22/1 547/8/1 +f 548/9/1 556/23/1 572/24/1 555/25/1 +f 556/26/1 550/14/1 557/27/1 572/28/1 +f 598/17/1 583/18/1 575/3/1 584/19/1 +f 597/17/2 586/18/2 579/3/2 587/19/2 +f 596/17/3 589/18/3 577/3/3 590/19/3 +f 595/17/4 581/18/4 573/3/4 592/19/4 +f 594/17/5 587/18/5 579/3/5 590/19/5 +f 593/17/6 585/18/6 576/3/6 582/19/6 +f 591/20/6 593/21/6 582/22/6 574/8/6 +f 578/9/6 588/23/6 593/24/6 591/25/6 +f 588/26/6 580/14/6 585/27/6 593/28/6 +f 592/20/5 594/21/5 590/22/5 577/8/5 +f 573/9/5 584/23/5 594/24/5 592/25/5 +f 584/26/5 575/14/5 587/27/5 594/28/5 +f 589/20/4 595/21/4 592/22/4 577/8/4 +f 578/9/4 591/23/4 595/24/4 589/25/4 +f 591/26/4 574/14/4 581/27/4 595/28/4 +f 586/20/3 596/21/3 590/22/3 579/8/3 +f 580/9/3 588/23/3 596/24/3 586/25/3 +f 588/26/3 578/14/3 589/27/3 596/28/3 +f 583/20/2 597/21/2 587/22/2 575/8/2 +f 576/9/2 585/23/2 597/24/2 583/25/2 +f 585/26/2 580/14/2 586/27/2 597/28/2 +f 581/20/1 598/21/1 584/22/1 573/8/1 +f 574/9/1 582/23/1 598/24/1 581/25/1 +f 582/26/1 576/14/1 583/27/1 598/28/1 +f 624/17/1 609/18/1 601/3/1 610/19/1 +f 623/17/2 612/18/2 605/3/2 613/19/2 +f 622/17/3 615/18/3 603/3/3 616/19/3 +f 621/17/4 607/18/4 599/3/4 618/19/4 +f 620/17/5 613/18/5 605/3/5 616/19/5 +f 619/17/6 611/18/6 602/3/6 608/19/6 +f 617/20/6 619/21/6 608/22/6 600/8/6 +f 604/9/6 614/23/6 619/24/6 617/25/6 +f 614/26/6 606/14/6 611/27/6 619/28/6 +f 618/20/5 620/21/5 616/22/5 603/8/5 +f 599/9/5 610/23/5 620/24/5 618/25/5 +f 610/26/5 601/14/5 613/27/5 620/28/5 +f 615/20/4 621/21/4 618/22/4 603/8/4 +f 604/9/4 617/23/4 621/24/4 615/25/4 +f 617/26/4 600/14/4 607/27/4 621/28/4 +f 612/20/3 622/21/3 616/22/3 605/8/3 +f 606/9/3 614/23/3 622/24/3 612/25/3 +f 614/26/3 604/14/3 615/27/3 622/28/3 +f 609/20/2 623/21/2 613/22/2 601/8/2 +f 602/9/2 611/23/2 623/24/2 609/25/2 +f 611/26/2 606/14/2 612/27/2 623/28/2 +f 607/20/1 624/21/1 610/22/1 599/8/1 +f 600/9/1 608/23/1 624/24/1 607/25/1 +f 608/26/1 602/14/1 609/27/1 624/28/1 +f 650/17/1 635/18/1 627/3/1 636/19/1 +f 649/17/2 638/18/2 631/3/2 639/19/2 +f 648/17/3 641/18/3 629/3/3 642/19/3 +f 647/17/4 633/18/4 625/3/4 644/19/4 +f 646/17/5 639/18/5 631/3/5 642/19/5 +f 645/17/6 637/18/6 628/3/6 634/19/6 +f 643/20/6 645/21/6 634/22/6 626/8/6 +f 630/9/6 640/23/6 645/24/6 643/25/6 +f 640/26/6 632/14/6 637/27/6 645/28/6 +f 644/20/5 646/21/5 642/22/5 629/8/5 +f 625/9/5 636/23/5 646/24/5 644/25/5 +f 636/26/5 627/14/5 639/27/5 646/28/5 +f 641/20/4 647/21/4 644/22/4 629/8/4 +f 630/9/4 643/23/4 647/24/4 641/25/4 +f 643/26/4 626/14/4 633/27/4 647/28/4 +f 638/20/3 648/21/3 642/22/3 631/8/3 +f 632/9/3 640/23/3 648/24/3 638/25/3 +f 640/26/3 630/14/3 641/27/3 648/28/3 +f 635/20/2 649/21/2 639/22/2 627/8/2 +f 628/9/2 637/23/2 649/24/2 635/25/2 +f 637/26/2 632/14/2 638/27/2 649/28/2 +f 633/20/1 650/21/1 636/22/1 625/8/1 +f 626/9/1 634/23/1 650/24/1 633/25/1 +f 634/26/1 628/14/1 635/27/1 650/28/1 +f 676/17/1 661/18/1 653/3/1 662/19/1 +f 675/17/2 664/18/2 657/3/2 665/19/2 +f 674/17/3 667/18/3 655/3/3 668/19/3 +f 673/17/4 659/18/4 651/3/4 670/19/4 +f 672/17/5 665/18/5 657/3/5 668/19/5 +f 671/17/6 663/18/6 654/3/6 660/19/6 +f 669/20/6 671/21/6 660/22/6 652/8/6 +f 656/9/6 666/23/6 671/24/6 669/25/6 +f 666/26/6 658/14/6 663/27/6 671/28/6 +f 670/20/5 672/21/5 668/22/5 655/8/5 +f 651/9/5 662/23/5 672/24/5 670/25/5 +f 662/26/5 653/14/5 665/27/5 672/28/5 +f 667/20/4 673/21/4 670/22/4 655/8/4 +f 656/9/4 669/23/4 673/24/4 667/25/4 +f 669/26/4 652/14/4 659/27/4 673/28/4 +f 664/20/3 674/21/3 668/22/3 657/8/3 +f 658/9/3 666/23/3 674/24/3 664/25/3 +f 666/26/3 656/14/3 667/27/3 674/28/3 +f 661/20/2 675/21/2 665/22/2 653/8/2 +f 654/9/2 663/23/2 675/24/2 661/25/2 +f 663/26/2 658/14/2 664/27/2 675/28/2 +f 659/20/1 676/21/1 662/22/1 651/8/1 +f 652/9/1 660/23/1 676/24/1 659/25/1 +f 660/26/1 654/14/1 661/27/1 676/28/1 +g Cube_Meshnode_Material_4 +usemtl Material_4 +f 286/17/1 271/18/1 263/3/1 272/19/1 +f 285/17/2 274/18/2 267/3/2 275/19/2 +f 284/17/3 277/18/3 265/3/3 278/19/3 +f 283/17/4 269/18/4 261/3/4 280/19/4 +f 282/17/5 275/18/5 267/3/5 278/19/5 +f 281/17/6 273/18/6 264/3/6 270/19/6 +f 279/20/6 281/21/6 270/22/6 262/8/6 +f 266/9/6 276/23/6 281/24/6 279/25/6 +f 276/26/6 268/14/6 273/27/6 281/28/6 +f 280/20/5 282/21/5 278/22/5 265/8/5 +f 261/9/5 272/23/5 282/24/5 280/25/5 +f 272/26/5 263/14/5 275/27/5 282/28/5 +f 277/20/4 283/21/4 280/22/4 265/8/4 +f 266/9/4 279/23/4 283/24/4 277/25/4 +f 279/26/4 262/14/4 269/27/4 283/28/4 +f 274/20/3 284/21/3 278/22/3 267/8/3 +f 268/9/3 276/23/3 284/24/3 274/25/3 +f 276/26/3 266/14/3 277/27/3 284/28/3 +f 271/20/2 285/21/2 275/22/2 263/8/2 +f 264/9/2 273/23/2 285/24/2 271/25/2 +f 273/26/2 268/14/2 274/27/2 285/28/2 +f 269/20/1 286/21/1 272/22/1 261/8/1 +f 262/9/1 270/23/1 286/24/1 269/25/1 +f 270/26/1 264/14/1 271/27/1 286/28/1 +g Cube_Meshnode_Material_5 +usemtl Material_5 +f 104/17/1 89/18/1 81/3/1 90/19/1 +f 103/17/2 92/18/2 85/3/2 93/19/2 +f 102/17/3 95/18/3 83/3/3 96/19/3 +f 101/17/4 87/18/4 79/3/4 98/19/4 +f 100/17/5 93/18/5 85/3/5 96/19/5 +f 99/17/6 91/18/6 82/3/6 88/19/6 +f 97/20/6 99/21/6 88/22/6 80/8/6 +f 84/9/6 94/23/6 99/24/6 97/25/6 +f 94/26/6 86/14/6 91/27/6 99/28/6 +f 98/20/5 100/21/5 96/22/5 83/8/5 +f 79/9/5 90/23/5 100/24/5 98/25/5 +f 90/26/5 81/14/5 93/27/5 100/28/5 +f 95/20/4 101/21/4 98/22/4 83/8/4 +f 84/9/4 97/23/4 101/24/4 95/25/4 +f 97/26/4 80/14/4 87/27/4 101/28/4 +f 92/20/3 102/21/3 96/22/3 85/8/3 +f 86/9/3 94/23/3 102/24/3 92/25/3 +f 94/26/3 84/14/3 95/27/3 102/28/3 +f 89/20/2 103/21/2 93/22/2 81/8/2 +f 82/9/2 91/23/2 103/24/2 89/25/2 +f 91/26/2 86/14/2 92/27/2 103/28/2 +f 87/20/1 104/21/1 90/22/1 79/8/1 +f 80/9/1 88/23/1 104/24/1 87/25/1 +f 88/26/1 82/14/1 89/27/1 104/28/1 diff --git a/models/meshnode_fence.obj b/models/meshnode_fence.obj new file mode 100644 index 0000000..58143bc --- /dev/null +++ b/models/meshnode_fence.obj @@ -0,0 +1,166 @@ +# Blender v2.76 (sub 0) OBJ File: 'meshnode_fence.blend' +# www.blender.org +mtllib meshnode_fence.mtl +v 0.625000 1.875000 -5.000000 +v 0.625000 1.875000 -1.250000 +v -0.625000 1.875000 -1.250000 +v -0.625000 1.875000 -5.000000 +v 0.625000 3.125000 -5.000000 +v 0.625000 3.125000 -1.250000 +v -0.625000 3.125000 -1.250000 +v -0.625000 3.125000 -5.000000 +v -0.625000 -1.875000 -5.000000 +v -0.625000 -1.875000 -1.250000 +v 0.625000 -1.875000 -1.250000 +v 0.625000 -1.875000 -5.000000 +v -0.625000 -3.125000 -5.000000 +v -0.625000 -3.125000 -1.250000 +v 0.625000 -3.125000 -1.250000 +v 0.625000 -3.125000 -5.000000 +v -5.000000 1.875000 -0.624998 +v -1.250000 1.875000 -0.625000 +v -1.250000 1.875000 0.625000 +v -5.000000 1.875000 0.625002 +v -5.000000 3.125000 -0.624998 +v -1.250000 3.125000 -0.625000 +v -1.250000 3.125000 0.625000 +v -5.000000 3.125000 0.625002 +v -5.000000 -1.875000 0.625002 +v -1.250000 -1.875000 0.625000 +v -1.250000 -1.875000 -0.625000 +v -5.000000 -1.875000 -0.624998 +v -5.000000 -3.125000 0.625002 +v -1.250000 -3.125000 0.625000 +v -1.250000 -3.125000 -0.625000 +v -5.000000 -3.125000 -0.624998 +v 1.250004 1.875000 -0.624998 +v 5.000004 1.875000 -0.625000 +v 5.000005 1.875000 0.625000 +v 1.250005 1.875000 0.625002 +v 1.250005 3.125000 -0.624998 +v 5.000005 3.125000 -0.625000 +v 5.000005 3.125000 0.625000 +v 1.250005 3.125000 0.625002 +v 1.250005 -1.875000 0.625002 +v 5.000005 -1.875000 0.625000 +v 5.000005 -1.875000 -0.625000 +v 1.250005 -1.875000 -0.624998 +v 1.250005 -3.125000 0.625002 +v 5.000005 -3.125000 0.625000 +v 5.000004 -3.125000 -0.625000 +v 1.250004 -3.125000 -0.624998 +v 0.625000 1.875000 1.250006 +v 0.625000 1.875000 5.000006 +v -0.625000 1.875000 5.000006 +v -0.625000 1.875000 1.250005 +v 0.625000 3.125000 1.250006 +v 0.625000 3.125000 5.000006 +v -0.625000 3.125000 5.000005 +v -0.625000 3.125000 1.250006 +v -0.625000 -1.875000 1.250006 +v -0.625000 -1.875000 5.000005 +v 0.625000 -1.875000 5.000006 +v 0.625000 -1.875000 1.250006 +v -0.625000 -3.125000 1.250005 +v -0.625000 -3.125000 5.000006 +v 0.625000 -3.125000 5.000006 +v 0.625000 -3.125000 1.250006 +v 1.250000 -5.000000 -1.250000 +v 1.250000 -5.000000 1.250000 +v -1.250000 -5.000000 1.250000 +v -1.250000 -5.000000 -1.250000 +v 1.250000 5.000000 -1.250000 +v 1.250000 5.000000 1.250000 +v -1.250000 5.000000 1.250000 +v -1.250000 5.000000 -1.250000 +vt 0.375000 0.625000 +vt 0.375000 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 1.000000 0.750000 +vt 0.625000 0.750000 +vt 1.000000 0.625000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.625000 0.875000 +vt 0.625000 0.500000 +vt 1.000000 0.500000 +vt 0.625000 0.125000 +vt 1.000000 0.000000 +vt 1.000000 0.125000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.625000 0.250000 +vt 0.375000 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.625000 +vt 0.375000 0.875000 +vt -0.000000 1.000000 +vt 0.000000 0.875000 +vt -0.000000 0.500000 +vt 0.375000 0.500000 +vt -0.000000 0.125000 +vt 0.000000 -0.000000 +vt 0.375000 0.125000 +vt 0.375000 0.250000 +vt -0.000000 0.375000 +vt -0.000000 0.250000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn -0.000000 -0.000000 1.000000 +vn -1.000000 -0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +g Cube_Cube_post +usemtl post +s off +f 65/1/1 66/2/1 67/3/1 68/4/1 +f 69/2/2 72/3/2 71/4/2 70/1/2 +f 65/5/3 69/6/3 70/7/3 66/8/3 +f 66/5/4 70/6/4 71/7/4 67/8/4 +f 67/5/5 71/6/5 72/7/5 68/8/5 +f 69/7/6 65/8/6 68/5/6 72/6/6 +g Cube_Cube_rail_1 +usemtl rail_1 +f 1/9/1 2/10/1 3/4/1 4/11/1 +f 5/12/2 8/13/2 7/6/2 6/14/2 +f 1/9/3 5/12/3 6/14/3 2/10/3 +f 3/4/5 7/15/5 8/16/5 4/11/5 +f 14/17/5 10/5/5 9/18/5 13/19/5 +f 16/20/3 12/21/3 11/3/3 15/22/3 +f 12/21/2 9/16/2 10/15/2 11/3/2 +f 16/20/1 15/22/1 14/17/1 13/19/1 +g Cube_Cube_rail_2 +usemtl rail_2 +f 33/4/1 34/11/1 35/9/1 36/10/1 +f 37/6/2 40/14/2 39/12/2 38/13/2 +f 33/4/6 37/15/6 38/16/6 34/11/6 +f 35/9/4 39/12/4 40/14/4 36/10/4 +f 46/20/4 42/21/4 41/3/4 45/22/4 +f 48/18/6 44/19/6 43/17/6 47/5/6 +f 44/15/2 41/3/2 42/21/2 43/16/2 +f 48/17/1 47/19/1 46/20/1 45/22/1 +g Cube_Cube_rail_3 +usemtl rail_3 +f 49/23/1 50/24/1 51/25/1 52/1/1 +f 53/26/2 56/7/2 55/27/2 54/28/2 +f 49/23/3 53/26/3 54/28/3 50/24/3 +f 51/25/5 55/29/5 56/30/5 52/1/5 +f 62/31/5 58/32/5 57/8/5 61/33/5 +f 64/34/3 60/2/3 59/35/3 63/36/3 +f 60/2/2 57/30/2 58/29/2 59/35/2 +f 64/34/1 63/36/1 62/31/1 61/33/1 +g Cube_Cube_rail_4 +usemtl rail_4 +f 17/25/1 18/1/1 19/23/1 20/24/1 +f 21/27/2 24/28/2 23/26/2 22/7/2 +f 17/25/6 21/29/6 22/30/6 18/1/6 +f 19/23/4 23/26/4 24/28/4 20/24/4 +f 30/34/4 26/2/4 25/35/4 29/36/4 +f 32/31/6 28/32/6 27/8/6 31/33/6 +f 28/29/2 25/35/2 26/2/2 27/30/2 +f 32/31/1 31/33/1 30/34/1 29/36/1 diff --git a/models/meshnode_fence.x b/models/meshnode_fence.x deleted file mode 100644 index f1cf367..0000000 --- a/models/meshnode_fence.x +++ /dev/null @@ -1,633 +0,0 @@ -xof 0303txt 0032 - -Frame Root { - FrameTransformMatrix { - 1.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 1.000000, 0.000000, - 0.000000, 1.000000,-0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Frame Cube { - FrameTransformMatrix { - 1.250000, 0.000000, 0.000000, 0.000000, - 0.000000, 1.250000, 0.000000, 0.000000, - 0.000000, 0.000000, 5.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Mesh { //Cube_007 Mesh - 152; - -0.500000; 4.000000; 0.475000;, - -0.500000; 1.000000; 0.475000;, - 0.500000; 1.000000; 0.475000;, - 0.500000; 4.000000; 0.475000;, - 0.500000; 1.000000; 0.725000;, - -0.500000; 1.000000; 0.725000;, - -0.500000; 4.000000; 0.725000;, - 0.500000; 4.000000; 0.725000;, - 0.500000; 1.000000; 0.475000;, - 0.500000; 1.000000; 0.725000;, - 0.500000; 4.000000; 0.725000;, - 0.500000; 4.000000; 0.475000;, - -0.500000; 4.000000; 0.475000;, - -0.500000; 4.000000; 0.725000;, - -0.500000; 1.000000; 0.725000;, - -0.500000; 1.000000; 0.475000;, - -0.500000; 4.000000;-0.712500;, - -0.500000; 4.000000;-0.462500;, - -0.500000; 1.000000;-0.462500;, - -0.500000; 1.000000;-0.712500;, - 0.500000; 1.000000;-0.712500;, - 0.500000; 1.000000;-0.462500;, - 0.500000; 4.000000;-0.462500;, - 0.500000; 4.000000;-0.712500;, - 0.500000; 1.000000;-0.462500;, - -0.500000; 1.000000;-0.462500;, - -0.500000; 4.000000;-0.462500;, - 0.500000; 4.000000;-0.462500;, - -0.500000; 4.000000;-0.712500;, - -0.500000; 1.000000;-0.712500;, - 0.500000; 1.000000;-0.712500;, - 0.500000; 4.000000;-0.712500;, - -4.000000;-0.500001; 0.475000;, - -1.000000;-0.500000; 0.475000;, - -1.000000; 0.500000; 0.475000;, - -4.000000; 0.499998; 0.475000;, - -1.000000; 0.500000; 0.725000;, - -1.000000;-0.500000; 0.725000;, - -4.000000;-0.500001; 0.725000;, - -4.000000; 0.499999; 0.725000;, - -1.000000; 0.500000; 0.475000;, - -1.000000; 0.500000; 0.725000;, - -4.000000; 0.499999; 0.725000;, - -4.000000; 0.499998; 0.475000;, - -4.000000;-0.500001; 0.475000;, - -4.000000;-0.500001; 0.725000;, - -1.000000;-0.500000; 0.725000;, - -1.000000;-0.500000; 0.475000;, - -4.000000;-0.500001;-0.712500;, - -4.000000;-0.500001;-0.462500;, - -1.000000;-0.500000;-0.462500;, - -1.000000;-0.500000;-0.712500;, - -1.000000; 0.500000;-0.712500;, - -1.000000; 0.500000;-0.462500;, - -4.000000; 0.499999;-0.462500;, - -4.000000; 0.499998;-0.712500;, - -1.000000; 0.500000;-0.462500;, - -1.000000;-0.500000;-0.462500;, - -4.000000;-0.500001;-0.462500;, - -4.000000; 0.499999;-0.462500;, - -4.000000;-0.500001;-0.712500;, - -1.000000;-0.500000;-0.712500;, - -1.000000; 0.500000;-0.712500;, - -4.000000; 0.499998;-0.712500;, - 1.000004;-0.500001; 0.475000;, - 4.000004;-0.500000; 0.475000;, - 4.000003; 0.500000; 0.475000;, - 1.000003; 0.499998; 0.475000;, - 4.000004; 0.500000; 0.725000;, - 4.000004;-0.500000; 0.725000;, - 1.000004;-0.500001; 0.725000;, - 1.000004; 0.499999; 0.725000;, - 4.000003; 0.500000; 0.475000;, - 4.000004; 0.500000; 0.725000;, - 1.000004; 0.499999; 0.725000;, - 1.000003; 0.499998; 0.475000;, - 1.000004;-0.500001; 0.475000;, - 1.000004;-0.500001; 0.725000;, - 4.000004;-0.500000; 0.725000;, - 4.000004;-0.500000; 0.475000;, - 1.000004;-0.500001;-0.712500;, - 1.000004;-0.500001;-0.462500;, - 4.000004;-0.500000;-0.462500;, - 4.000004;-0.500000;-0.712500;, - 4.000003; 0.500000;-0.712500;, - 4.000004; 0.500000;-0.462500;, - 1.000004; 0.499999;-0.462500;, - 1.000003; 0.499998;-0.712500;, - 4.000004; 0.500000;-0.462500;, - 4.000004;-0.500000;-0.462500;, - 1.000004;-0.500001;-0.462500;, - 1.000004; 0.499999;-0.462500;, - 1.000004;-0.500001;-0.712500;, - 4.000004;-0.500000;-0.712500;, - 4.000003; 0.500000;-0.712500;, - 1.000003; 0.499998;-0.712500;, - -0.500000;-1.000004; 0.475000;, - -0.500000;-4.000005; 0.475000;, - 0.500000;-4.000005; 0.475000;, - 0.500000;-1.000005; 0.475000;, - 0.500000;-4.000005; 0.725000;, - -0.500000;-4.000004; 0.725000;, - -0.500000;-1.000005; 0.725000;, - 0.500000;-1.000005; 0.725000;, - 0.500000;-4.000005; 0.475000;, - 0.500000;-4.000005; 0.725000;, - 0.500000;-1.000005; 0.725000;, - 0.500000;-1.000005; 0.475000;, - -0.500000;-1.000004; 0.475000;, - -0.500000;-1.000005; 0.725000;, - -0.500000;-4.000004; 0.725000;, - -0.500000;-4.000005; 0.475000;, - -0.500000;-1.000004;-0.712500;, - -0.500000;-1.000005;-0.462500;, - -0.500000;-4.000004;-0.462500;, - -0.500000;-4.000005;-0.712500;, - 0.500000;-4.000005;-0.712500;, - 0.500000;-4.000005;-0.462500;, - 0.500000;-1.000005;-0.462500;, - 0.500000;-1.000005;-0.712500;, - 0.500000;-4.000005;-0.462500;, - -0.500000;-4.000004;-0.462500;, - -0.500000;-1.000005;-0.462500;, - 0.500000;-1.000005;-0.462500;, - -0.500000;-1.000004;-0.712500;, - -0.500000;-4.000005;-0.712500;, - 0.500000;-4.000005;-0.712500;, - 0.500000;-1.000005;-0.712500;, - -1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000;-1.000000; 1.000000;, - -1.000000;-1.000000; 1.000000;, - -1.000000; 1.000000; 1.000000;, - 1.000000; 1.000000; 1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000; 1.000000;, - 1.000000; 1.000000; 1.000000;, - 1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000;-1.000000; 1.000000;, - 1.000000;-1.000000; 1.000000;, - 1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000;-1.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000;-1.000000; 1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000; 1.000000;; - 38; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;, - 4;44;45;46;47;, - 4;48;49;50;51;, - 4;52;53;54;55;, - 4;56;57;58;59;, - 4;60;61;62;63;, - 4;64;65;66;67;, - 4;68;69;70;71;, - 4;72;73;74;75;, - 4;76;77;78;79;, - 4;80;81;82;83;, - 4;84;85;86;87;, - 4;88;89;90;91;, - 4;92;93;94;95;, - 4;96;97;98;99;, - 4;100;101;102;103;, - 4;104;105;106;107;, - 4;108;109;110;111;, - 4;112;113;114;115;, - 4;116;117;118;119;, - 4;120;121;122;123;, - 4;124;125;126;127;, - 4;128;129;130;131;, - 4;132;133;134;135;, - 4;136;137;138;139;, - 4;140;141;142;143;, - 4;144;145;146;147;, - 4;148;149;150;151;; - MeshNormals { //Cube_007 Normals - 152; - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - 0.000001;-1.000000;-0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - -0.000001; 1.000000; 0.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000; 1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - -1.000000; 0.000000;-0.000001;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;; - 38; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;, - 4;44;45;46;47;, - 4;48;49;50;51;, - 4;52;53;54;55;, - 4;56;57;58;59;, - 4;60;61;62;63;, - 4;64;65;66;67;, - 4;68;69;70;71;, - 4;72;73;74;75;, - 4;76;77;78;79;, - 4;80;81;82;83;, - 4;84;85;86;87;, - 4;88;89;90;91;, - 4;92;93;94;95;, - 4;96;97;98;99;, - 4;100;101;102;103;, - 4;104;105;106;107;, - 4;108;109;110;111;, - 4;112;113;114;115;, - 4;116;117;118;119;, - 4;120;121;122;123;, - 4;124;125;126;127;, - 4;128;129;130;131;, - 4;132;133;134;135;, - 4;136;137;138;139;, - 4;140;141;142;143;, - 4;144;145;146;147;, - 4;148;149;150;151;; - } //End of Cube_007 Normals - MeshMaterialList { //Cube_007 Material List - 5; - 38; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 4;; - Material rail_1 { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.500000; 0.500000; 0.500000;; - 0.000000; 0.000000; 0.000000;; - } - Material rail_4 { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.500000; 0.500000; 0.500000;; - 0.000000; 0.000000; 0.000000;; - } - Material rail_2 { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.500000; 0.500000; 0.500000;; - 0.000000; 0.000000; 0.000000;; - } - Material rail_3 { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.500000; 0.500000; 0.500000;; - 0.000000; 0.000000; 0.000000;; - } - Material post { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.073171; 0.073171; 0.073171;; - 0.000000; 0.000000; 0.000000;; - } - } //End of Cube_007 Material List - MeshTextureCoords { //Cube_007 UV Coordinates - 152; - 0.500000; 0.750000;, - 1.000000; 0.750000;, - 1.000000; 0.875000;, - 0.500000; 0.875000;, - 0.500000; 0.562500;, - 0.500000; 0.437500;, - 1.000000; 0.437500;, - 1.000000; 0.562500;, - 0.500000; 0.500000;, - 0.500000; 0.375000;, - 1.000000; 0.375000;, - 1.000000; 0.500000;, - 0.500000; 0.687500;, - 0.500000; 0.562500;, - 1.000000; 0.562500;, - 1.000000; 0.687500;, - 0.500000; 0.687500;, - 0.500000; 0.562500;, - 1.000000; 0.562500;, - 1.000000; 0.687500;, - 0.500000; 0.500000;, - 0.500000; 0.375000;, - 1.000000; 0.375000;, - 1.000000; 0.500000;, - 0.500000; 0.562500;, - 0.500000; 0.437500;, - 1.000000; 0.437500;, - 1.000000; 0.562500;, - 0.500000; 0.750000;, - 1.000000; 0.750000;, - 1.000000; 0.875000;, - 0.500000; 0.875000;, - 0.562500; 0.375000;, - 0.000000; 0.375000;, - 0.000000; 0.250000;, - 0.562500; 0.250000;, - 0.000000; 0.187500;, - 0.000000; 0.062500;, - 0.500000; 0.062500;, - 0.500000; 0.187500;, - 0.000000; 1.000000;, - 0.000000; 0.875000;, - 0.500000; 0.875000;, - 0.500000; 1.000000;, - 0.500000; 0.625000;, - 0.500000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 0.625000;, - 0.500000; 0.625000;, - 0.500000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 0.625000;, - 0.000000; 1.000000;, - 0.000000; 0.875000;, - 0.500000; 0.875000;, - 0.500000; 1.000000;, - 0.000000; 0.187500;, - 0.000000; 0.062500;, - 0.500000; 0.062500;, - 0.500000; 0.187500;, - 0.562500; 0.375000;, - 0.000000; 0.375000;, - 0.000000; 0.250000;, - 0.562500; 0.250000;, - 1.000000; 0.375000;, - 0.500000; 0.375000;, - 0.500000; 0.250000;, - 1.000000; 0.250000;, - 0.500000; 0.187500;, - 0.500000; 0.062500;, - 1.000000; 0.062500;, - 1.000000; 0.187500;, - 0.500000; 1.000000;, - 0.500000; 0.875000;, - 1.000000; 0.875000;, - 1.000000; 1.000000;, - 0.000000; 0.625000;, - 0.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.625000;, - 0.000000; 0.625000;, - 0.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.625000;, - 0.500000; 1.000000;, - 0.500000; 0.875000;, - 1.000000; 0.875000;, - 1.000000; 1.000000;, - 0.500000; 0.187500;, - 0.500000; 0.062500;, - 1.000000; 0.062500;, - 1.000000; 0.187500;, - 1.000000; 0.375000;, - 0.500000; 0.375000;, - 0.500000; 0.250000;, - 1.000000; 0.250000;, - 0.500000; 0.875000;, - 0.000000; 0.875000;, - 0.000000; 0.750000;, - 0.500000; 0.750000;, - 0.500000; 0.437500;, - 0.500000; 0.562500;, - 0.000000; 0.562500;, - 0.000000; 0.437500;, - 0.000000; 0.500000;, - 0.000000; 0.375000;, - 0.500000; 0.375000;, - 0.500000; 0.500000;, - 0.000000; 0.687500;, - 0.000000; 0.562500;, - 0.500000; 0.562500;, - 0.500000; 0.687500;, - 0.000000; 0.687500;, - 0.000000; 0.562500;, - 0.500000; 0.562500;, - 0.500000; 0.687500;, - 0.000000; 0.500000;, - 0.000000; 0.375000;, - 0.500000; 0.375000;, - 0.500000; 0.500000;, - 0.500000; 0.437500;, - 0.500000; 0.562500;, - 0.000000; 0.562500;, - 0.000000; 0.437500;, - 0.500000; 0.875000;, - 0.000000; 0.875000;, - 0.000000; 0.750000;, - 0.500000; 0.750000;, - 0.375000; 0.375000;, - 0.625000; 0.375000;, - 0.625000; 0.625000;, - 0.375000; 0.625000;, - 0.375000; 0.625000;, - 0.375000; 0.375000;, - 0.625000; 0.375000;, - 0.625000; 0.625000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.250000;, - 0.000000; 0.250000;, - 0.000000; 0.750000;, - 1.000000; 0.750000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.250000;, - 1.000000; 0.250000;, - 1.000000; 0.500000;, - 0.000000; 0.500000;, - 1.000000; 0.750000;, - 0.000000; 0.750000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;; - } //End of Cube_007 UV Coordinates - } //End of Cube_007 Mesh - } //End of Cube -} //End of Root Frame diff --git a/models/meshnode_pane.obj b/models/meshnode_pane.obj new file mode 100644 index 0000000..542a31b --- /dev/null +++ b/models/meshnode_pane.obj @@ -0,0 +1,86 @@ +# Blender v2.76 (sub 0) OBJ File: 'meshnode_pane.blend' +# www.blender.org +mtllib meshnode_pane.mtl +v -0.312500 -5.000000 -5.000000 +v -0.312500 5.000000 -5.000000 +v 0.312500 5.000000 -5.000000 +v 0.312500 -5.000000 -5.000000 +v -0.312500 5.000000 0.000000 +v -0.312500 -5.000000 0.000000 +v 0.312500 5.000000 0.000000 +v 0.312500 -5.000000 0.000000 +v 5.000000 -5.000000 -0.312500 +v 5.000000 5.000000 -0.312500 +v 5.000000 5.000000 0.312500 +v 5.000000 -5.000000 0.312500 +v 0.000000 5.000000 -0.312500 +v 0.000000 -5.000000 -0.312500 +v 0.000000 5.000000 0.312500 +v 0.000000 -5.000000 0.312500 +v -0.312500 -5.000000 5.000000 +v -0.312500 5.000000 5.000000 +v 0.312500 5.000000 5.000000 +v 0.312500 -5.000000 5.000000 +v -0.312500 5.000000 0.000000 +v -0.312500 -5.000000 0.000000 +v 0.312500 5.000000 0.000000 +v 0.312500 -5.000000 0.000000 +v -5.000000 -5.000000 -0.312500 +v -5.000000 5.000000 -0.312500 +v -5.000000 5.000000 0.312500 +v -5.000000 -5.000000 0.312500 +v 0.000000 5.000000 -0.312500 +v 0.000000 -5.000000 -0.312500 +v 0.000000 5.000000 0.312500 +v 0.000000 -5.000000 0.312500 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.500000 0.000000 +vt 0.500000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.062500 +vt 0.500000 0.062500 +vt 0.937500 1.000000 +vt 0.937500 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.062500 1.000000 +vt 0.062500 0.000000 +vt 0.000000 0.937500 +vt 0.000000 0.062500 +vn -1.000000 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +g Cube_Cube.001_Pane_1 +usemtl Pane_1 +s off +f 5/1/1 2/2/1 1/3/1 6/4/1 +f 7/5/2 3/6/2 2/2/2 5/1/2 +f 6/4/3 1/3/3 4/7/3 8/8/3 +f 2/9/4 3/2/4 4/3/4 1/10/4 +f 4/3/5 3/2/5 7/1/5 8/4/5 +g Cube_Cube.001_Pane_2 +usemtl Pane_2 +f 13/1/4 10/11/4 9/12/4 14/4/4 +f 10/11/5 11/13/5 12/14/5 9/12/5 +f 10/15/2 13/5/2 15/1/2 11/11/2 +f 12/12/3 16/4/3 14/8/3 9/16/3 +f 11/11/6 15/1/6 16/4/6 12/12/6 +g Cube_Cube.001_Pane_3 +usemtl Pane_3 +f 19/11/6 18/13/6 17/14/6 20/12/6 +f 17/12/3 22/4/3 24/8/3 20/16/3 +f 19/15/2 23/5/2 21/1/2 18/11/2 +f 18/11/1 21/1/1 22/4/1 17/12/1 +f 19/11/5 20/12/5 24/4/5 23/1/5 +g Cube_Cube.001_Pane_4 +usemtl Pane_4 +f 27/9/1 26/2/1 25/3/1 28/10/1 +f 32/4/3 28/3/3 25/7/3 30/8/3 +f 29/5/2 26/6/2 27/2/2 31/1/2 +f 28/3/6 32/4/6 31/1/6 27/2/6 +f 26/2/4 29/1/4 30/4/4 25/3/4 diff --git a/models/meshnode_plant.obj b/models/meshnode_plant.obj new file mode 100644 index 0000000..792cf78 --- /dev/null +++ b/models/meshnode_plant.obj @@ -0,0 +1,34 @@ +# Blender v2.76 (sub 0) OBJ File: 'meshnode_plant.blend' +# www.blender.org +mtllib meshnode_plant.mtl +o Cube +v -3.531999 5.000000 3.539069 +v 3.539071 5.000000 -3.531997 +v 3.531999 5.000000 -3.539069 +v -3.539071 5.000000 3.531997 +v -3.532001 -5.000000 3.539069 +v 3.539071 -5.000000 -3.531996 +v 3.531999 -5.000000 -3.539069 +v -3.539070 -5.000000 3.531997 +v -3.539068 -5.000000 -3.532000 +v -3.531997 -5.000000 -3.539071 +v 3.539068 -5.000000 3.532000 +v 3.531995 -5.000000 3.539071 +v -3.539069 5.000000 -3.531999 +v -3.531997 5.000000 -3.539071 +v 3.539069 5.000000 3.531999 +v 3.531997 5.000000 3.539071 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.000000 -0.000000 +vt 0.000000 1.000000 +vn 0.707100 -0.000000 0.707100 +vn -0.707100 -0.000000 -0.707100 +vn 0.707100 -0.000000 -0.707100 +vn -0.707100 0.000000 0.707100 +usemtl Material +s off +f 1/1/1 5/2/1 6/3/1 2/4/1 +f 8/2/2 4/1/2 3/4/2 7/3/2 +f 10/2/3 14/1/3 15/4/3 11/3/3 +f 13/1/4 9/2/4 12/3/4 16/4/4 diff --git a/models/meshnode_plant.x b/models/meshnode_plant.x deleted file mode 100644 index 657d128..0000000 --- a/models/meshnode_plant.x +++ /dev/null @@ -1,99 +0,0 @@ -xof 0303txt 0032 - -Frame Root { - FrameTransformMatrix { - 1.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 1.000000, 0.000000, - 0.000000, 1.000000,-0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Frame Cube { - FrameTransformMatrix { - 3.535533,-3.535535, 0.000000, 0.000000, - 3.535535, 3.535533, 0.000000, 0.000000, - 0.000000, 0.000000, 5.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Mesh { //Cube_003 Mesh - 16; - -0.001000;-1.000000; 1.000000;, - -0.001000;-1.000000;-1.000000;, - -0.001000; 1.000000;-1.000000;, - -0.001000; 1.000000; 1.000000;, - 0.001000;-1.000000;-1.000000;, - 0.001000;-1.000000; 1.000000;, - 0.001000; 1.000000; 1.000000;, - 0.001000; 1.000000;-1.000000;, - -1.000000;-0.001000;-1.000000;, - -1.000000;-0.001000; 1.000000;, - 1.000000;-0.001000; 1.000000;, - 1.000000;-0.001000;-1.000000;, - -1.000000; 0.001000; 1.000000;, - -1.000000; 0.001000;-1.000000;, - 1.000000; 0.001000;-1.000000;, - 1.000000; 0.001000; 1.000000;; - 4; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;; - MeshNormals { //Cube_003 Normals - 16; - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;; - 4; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;; - } //End of Cube_003 Normals - MeshMaterialList { //Cube_003 Material List - 1; - 4; - 0, - 0, - 0, - 0;; - Material Material { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.073171; 0.073171; 0.073171;; - 0.000000; 0.000000; 0.000000;; - } - } //End of Cube_003 Material List - MeshTextureCoords { //Cube_003 UV Coordinates - 16; - 0.000000; 0.000000;, - 0.000000; 1.000000;, - 1.000000; 1.000000;, - 1.000000; 0.000000;, - -0.000000; 1.000000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 1.000000;, - 0.000000; 0.000000;, - 0.000000; 1.000000;, - 1.000000; 1.000000;, - 1.000000; 0.000000;; - } //End of Cube_003 UV Coordinates - } //End of Cube_003 Mesh - } //End of Cube -} //End of Root Frame diff --git a/models/meshnode_slab.x b/models/meshnode_slab.x deleted file mode 100644 index 1b5ec68..0000000 --- a/models/meshnode_slab.x +++ /dev/null @@ -1,130 +0,0 @@ -xof 0303txt 0032 - -Frame Root { - FrameTransformMatrix { - 1.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 1.000000, 0.000000, - 0.000000, 1.000000,-0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Frame Cube { - FrameTransformMatrix { - 5.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 5.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 5.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Mesh { //Cube_001 Mesh - 24; - -1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000;-1.000000; 0.000000;, - -1.000000;-1.000000; 0.000000;, - -1.000000; 1.000000; 0.000000;, - 1.000000; 1.000000; 0.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000; 0.000000;, - 1.000000; 1.000000; 0.000000;, - 1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000;-1.000000; 0.000000;, - 1.000000;-1.000000; 0.000000;, - 1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000;-1.000000;, - -1.000000; 1.000000; 0.000000;, - -1.000000;-1.000000; 0.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000; 0.000000;, - -1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000; 0.000000;; - 6; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;; - MeshNormals { //Cube_001 Normals - 24; - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;; - 6; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;; - } //End of Cube_001 Normals - MeshMaterialList { //Cube_001 Material List - 1; - 6; - 0, - 0, - 0, - 0, - 0, - 0;; - Material Material { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.073171; 0.073171; 0.073171;; - 0.000000; 0.000000; 0.000000;; - TextureFilename {"wood.png";} - } - } //End of Cube_001 Material List - MeshTextureCoords { //Cube_001 UV Coordinates - 24; - 0.000000; 1.000000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 1.000000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;; - } //End of Cube_001 UV Coordinates - } //End of Cube_001 Mesh - } //End of Cube -} //End of Root Frame diff --git a/models/meshnode_stair.x b/models/meshnode_stair.x deleted file mode 100644 index b3d4a02..0000000 --- a/models/meshnode_stair.x +++ /dev/null @@ -1,204 +0,0 @@ -xof 0303txt 0032 - -Frame Root { - FrameTransformMatrix { - 1.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 1.000000, 0.000000, - 0.000000, 1.000000,-0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Frame Cube { - FrameTransformMatrix { - 5.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 5.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 5.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Mesh { //Cube_002 Mesh - 44; - 1.000000; 0.000000; 1.000000;, - -1.000000; 0.000000; 1.000000;, - -1.000000; 1.000000; 1.000000;, - 1.000000; 1.000000; 1.000000;, - 1.000000; 0.000000; 0.000000;, - 1.000000; 0.000000; 1.000000;, - 1.000000; 1.000000; 1.000000;, - 1.000000; 1.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 0.000000; 1.000000;, - 1.000000; 0.000000; 1.000000;, - 1.000000; 0.000000; 0.000000;, - -1.000000; 1.000000; 0.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000; 0.000000; 1.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000; 1.000000; 0.000000;, - 1.000000; 1.000000; 0.000000;, - 1.000000; 1.000000; 1.000000;, - -1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000; 0.000000;, - 1.000000; 1.000000; 0.000000;, - 1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000;-1.000000; 0.000000;, - 1.000000;-1.000000; 0.000000;, - 1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000;-1.000000;, - -1.000000; 1.000000; 0.000000;, - -1.000000;-1.000000; 0.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000; 0.000000;, - -1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000; 0.000000;, - 1.000000;-1.000000; 0.000000;, - -1.000000;-1.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - 1.000000; 0.000000; 0.000000;; - 11; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;; - MeshNormals { //Cube_002 Normals - 44; - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 0.000000;-1.000000; 0.000000;, - 0.000000;-1.000000; 0.000000;, - 0.000000;-1.000000; 0.000000;, - 0.000000;-1.000000; 0.000000;, - -1.000000;-0.000000; 0.000000;, - -1.000000;-0.000000; 0.000000;, - -1.000000;-0.000000; 0.000000;, - -1.000000;-0.000000; 0.000000;, - -0.000000; 1.000000; 0.000000;, - -0.000000; 1.000000; 0.000000;, - -0.000000; 1.000000; 0.000000;, - -0.000000; 1.000000; 0.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;; - 11; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;; - } //End of Cube_002 Normals - MeshMaterialList { //Cube_002 Material List - 1; - 11; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0;; - Material Material { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.073171; 0.073171; 0.073171;; - 0.000000; 0.000000; 0.000000;; - } - } //End of Cube_002 Material List - MeshTextureCoords { //Cube_002 UV Coordinates - 44; - 1.000000; 0.500000;, - 0.000000; 0.500000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.000000; 0.500000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.000000; 0.500000;, - 0.000000; 0.000000;, - 0.500000; 0.000000;, - 0.500000; 0.500000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.000000; 0.500000;, - -0.000000; 0.000000;, - -0.000000; 1.000000;, - 0.000000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 1.000000;, - -0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - -0.000000; 1.000000;, - 0.000000; 0.498216;, - 1.000000; 0.498216;, - 1.000000; 1.000000;, - 1.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 1.000000;, - 0.000000; 1.000000;, - 0.000000; 0.500000;, - 1.000000; 0.500000;; - } //End of Cube_002 UV Coordinates - } //End of Cube_002 Mesh - } //End of Cube -} //End of Root Frame diff --git a/models/meshnode_wall.obj b/models/meshnode_wall.obj new file mode 100644 index 0000000..246e448 --- /dev/null +++ b/models/meshnode_wall.obj @@ -0,0 +1,112 @@ +# Blender v2.76 (sub 0) OBJ File: 'meshnode_wall.blend' +# www.blender.org +mtllib meshnode_wall.mtl +v -2.500000 -5.000000 2.500000 +v -2.500000 5.000000 2.500000 +v -2.500000 -5.000000 -2.500000 +v -2.500000 5.000000 -2.500000 +v 2.500000 -5.000000 2.500000 +v 2.500000 5.000000 2.500000 +v 2.500000 -5.000000 -2.500000 +v 2.500000 5.000000 -2.500000 +v 2.500000 -5.000000 1.875000 +v 2.500000 3.750000 1.875000 +v 2.500000 -5.000000 -1.875000 +v 2.500000 3.750000 -1.875000 +v 5.000000 -5.000000 1.875000 +v 5.000000 3.750000 1.875000 +v 5.000000 -5.000000 -1.875000 +v 5.000000 3.750000 -1.875000 +v -2.500000 -5.000000 -1.875000 +v -2.500000 3.750000 -1.875000 +v -2.500000 -5.000000 1.875000 +v -2.500000 3.750000 1.875000 +v -5.000000 -5.000000 -1.875000 +v -5.000000 3.750000 -1.875000 +v -5.000000 -5.000000 1.875000 +v -5.000000 3.750000 1.875000 +v 1.875000 -5.000000 -2.500000 +v 1.875000 3.750000 -2.500000 +v -1.875000 -5.000000 -2.500000 +v -1.875000 3.750000 -2.500000 +v 1.875000 -5.000000 -5.000000 +v 1.875000 3.750000 -5.000000 +v -1.875000 -5.000000 -5.000000 +v -1.875000 3.750000 -5.000000 +v -1.875000 -5.000000 2.500000 +v -1.875000 3.750000 2.500000 +v 1.875000 -5.000000 2.500000 +v 1.875000 3.750000 2.500000 +v -1.875000 -5.000000 5.000000 +v -1.875000 3.750000 5.000000 +v 1.875000 -5.000000 5.000000 +v 1.875000 3.750000 5.000000 +vt 0.750000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.750000 0.250000 +vt 0.750000 0.750000 +vt 0.250000 0.750000 +vt 0.250000 0.250000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.000000 +vt 1.000000 0.875000 +vt 0.750000 0.875000 +vt 1.000000 -0.000000 +vt 0.312500 0.750000 +vt 0.687500 0.750000 +vt 0.687500 1.000000 +vt 0.312500 1.000000 +vt 0.312500 0.000000 +vt 0.687500 0.000000 +vt 0.687500 0.250000 +vt 0.312500 0.250000 +vt 0.250000 0.312500 +vt 0.250000 0.687500 +vt 0.000000 0.687500 +vt 0.000000 0.312500 +vt 0.750000 0.687500 +vt 0.750000 0.312500 +vt 1.000000 0.312500 +vt 1.000000 0.687500 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +g Cube_Cube.001_Pillar +usemtl Pillar +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/1/2 8/2/2 7/3/2 3/4/2 +f 8/1/3 6/2/3 5/3/3 7/4/3 +f 6/1/4 2/2/4 1/3/4 5/4/4 +f 1/5/5 3/6/5 7/7/5 5/8/5 +f 6/7/6 8/8/6 4/5/6 2/6/6 +g Cube_Cube.001_Wall_1 +usemtl Wall_1 +f 28/9/1 32/10/1 31/11/1 27/3/1 +f 30/12/3 26/13/3 25/4/3 29/14/3 +f 25/15/5 27/16/5 31/17/5 29/18/5 +f 30/19/6 32/20/6 28/21/6 26/22/6 +g Cube_Cube.001_Wall_2 +usemtl Wall_2 +f 12/9/2 16/10/2 15/11/2 11/3/2 +f 14/12/4 10/13/4 9/4/4 13/14/4 +f 9/23/5 11/24/5 15/25/5 13/26/5 +f 14/25/6 16/26/6 12/23/6 10/24/6 +g Cube_Cube.001_Wall_3 +usemtl Wall_3 +f 36/9/3 40/10/3 39/11/3 35/3/3 +f 38/12/1 34/13/1 33/4/1 37/14/1 +f 33/21/5 35/22/5 39/19/5 37/20/5 +f 38/17/6 40/18/6 36/15/6 34/16/6 +g Cube_Cube.001_Wall_4 +usemtl Wall_4 +f 20/9/4 24/10/4 23/11/4 19/3/4 +f 22/12/2 18/13/2 17/4/2 21/14/2 +f 17/27/5 19/28/5 23/29/5 21/30/5 +f 22/29/6 24/30/6 20/27/6 18/28/6 diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8a5e3a7f223524f8803b924b7e561452959eb7 GIT binary patch literal 18465 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 U&*v~vod5s;07*qoM6N<$g20yCiU0rr literal 0 HcmV?d00001 diff --git a/textures/meshnode_glue.png b/textures/meshnode_glue.png new file mode 100644 index 0000000000000000000000000000000000000000..154e2bcb69133b3e866f9298b7d06fe43e3b3170 GIT binary patch literal 422 zcmV;X0a^ZuP)_F0W(QN zK~y-)wUWU~0#Ou(zbm69ZpNf2N05@9puON`cJmCaTlE4hdxM@JTJ;942ZE@5ZA7%X zV?+v5Q`~Uiw5YKuhg75=&g!1?-~a#5f&aukh=BanlbeUI)oS5+-eL-7Ced0;0Ljt=9oK?)6AtT~_Mqw}(aX0V;fs1HLI3~& literal 0 HcmV?d00001 diff --git a/textures/meshnode_highlight.png b/textures/meshnode_highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa0aec42f0213cf6470f401c19bd52ea84831a5 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPNj}))DPS@crF+d?%PZ!4!i_^(}{{P=^%gox)+2~}D ibzlYKVm2NzW`?A>%rVS$%QgWOGI+ZBxvXPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*)3 z6AdR*PytH-00KKnL_t(I%T1F@ZWJ*PhQBJ?-93{R3ZMvO#eywILgFs$xd3P21Y86O zfmnhFAmzg#Bt~GPSMpOj%4h{-Ig-ud&GltN&NI_VuVFnIF6=D5RJ?XfP>d8-HlBn5Xz zMFOWu*$zq&*d!&Ykizj*6`~4LRGK-bqjD%lRKd-N8UpdyYz}8rzXuU^OZ$(CvsPn> zN>U*R#5AD8$=RcLW9;NNNxNkZyQOstn?HnF=sB0jWCxE+^@z`>`1Yvu$fb>uM=@6oAc$zfw}g$UW`ihuF0R( z_Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*)3 z6AdF&J;hQ000QnwL_t(I%WaciXj^p@$3ORX@6Ao_(xzz%V@sXBWQd@y2>LJt-}I#q z!n7|s-B_zao0_`KE^VsmAG58^`d>l!FjPc}46&dP_9V^+U+SC6mC3|`5XV-{dXxL_ z_%IhX=79rWzMSv*$2r=smuAI`$BEe~Jhy?;b#&8WpnsIR?bD4pQrR4V+aU0p1kGE- zJA2T6{(3?Nk5x$+8j<`LEkY}T&C46qoh^>MQXvu{n>28Ph#Sp_l%+U-aS^2q6E76j z&yUmFZSg>l#eqtjobYmc06SmpHYu z9Db}zu6|ejUmt$5N1R$&p5Nag&t&8B`}gO>FiZ=jX^6ng@kL4t1?I=zLqwR{xIo?6 zV&T*>UKmk4TcC1s2>}eH5&Aw#(+zYDY)dioeu-*vnbFximZ{n!xc+T%`K@!jvo?v+ zAf`YWChE|0uj7S+7f4&MT3X?acSqR1<`A=!lokq{d3y<6(*W2NQ?x?ir5B25Pw$P( z=H(3lwy!y)vbi?)b{b@IefRNqaR0#qkt?7l_$O0KA?}Kv185S;f$`cE*ml&cu9y z^{G`-*&N;vEnf%)hK^J)bq&q1(6+B!l;M1& diff --git a/textures/meshnode_trans.png b/textures/meshnode_trans.png index a82df66a8568319b5f1faa784304b0fb1e2faa39..5d0fc1be2fb96bc06b1b8b655435b9d024c81806 100644 GIT binary patch delta 89 zcmbQl*ubdR8Q|y6%O%Cdz`(%k>ERLtq!~e&gAGW^iyrBmsAr)6fJatXN_wXC-+Hhz h7sn8e>&Xc~0OYbVFvfk>vI4RgJYD@<);T3K0Ra6l69E7K delta 107 zcmZo*oW!Wt8Q|y6%O%Cdz`(%k>ERLtqy<2jgAGW^fBv5cq!^2X+?^QKos)SvQPIHU zE}N`?miB~go~waULY^*;Ar_~T6C_v{Cy4YgaWF8j2rw|V+OH}C$})Jm`njxgN@xNA D+@u)r