Mercurial > hg > Game > Cerium
changeset 142:dc68420f705f draft
add xml
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Sat, 29 Nov 2008 02:39:43 +0900 |
parents | 56db76a03294 |
children | 9588726193e1 |
files | TaskManager/Test/test_render/Makefile.def TaskManager/Test/test_render/SceneGraph.cpp TaskManager/Test/test_render/SceneGraph.h TaskManager/Test/test_render/cube_action.cpp TaskManager/Test/test_render/node.cpp TaskManager/Test/test_render/task/CreateSpan.cpp TaskManager/Test/test_render/viewer.cpp TaskManager/Test/test_render/xml_file/cube_split.h TaskManager/Test/test_render/xml_file/cube_split.xml |
diffstat | 9 files changed, 470 insertions(+), 116 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/Makefile.def Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/Makefile.def Sat Nov 29 02:39:43 2008 +0900 @@ -3,15 +3,15 @@ # include/library path # ex: macosx #CERIUM = /Users/gongo/Source/Concurrency/Game_project/Cerium -#CERIUM = /Users/gongo/Source/hg/Cerium +CERIUM = /Users/gongo/Source/hg/Cerium # ex: linux/ps3 -CERIUM = /home/gongo/Cerium +#CERIUM = /home/gongo/Cerium #CERIUM = ../../.. CC = g++ -CFLAGS = -O9 -g -Wall# -DDEBUG +CFLAGS = -O0 -g -Wall# -DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I. LIBS = -L$(CERIUM)/TaskManager
--- a/TaskManager/Test/test_render/SceneGraph.cpp Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/SceneGraph.cpp Sat Nov 29 02:39:43 2008 +0900 @@ -55,6 +55,8 @@ texture_id = -1; move = no_move; collision = no_collision; + + frame = 0; } /* construct polygon from xmlNode. */ @@ -133,10 +135,10 @@ { SceneGraph *tmp; - /* childrenのリストの最後に加える */ + /* childrenのリストの最後に加える (brother として)*/ if (this->lastChild != NULL) { tmp = this->lastChild; - tmp->children = child; + tmp->brother = child; } this->lastChild = child; @@ -392,6 +394,8 @@ t->move_execute(screen_w, screen_h); t->collision_check(screen_w, screen_h, top); + t->frame++; + if (t->parent != NULL) { get_matrix(t->matrix, t->angle, t->xyz, t->parent->matrix); } else { @@ -429,6 +433,14 @@ } void +SceneGraph::set_move_collision(move_func new_move, + collision_func new_collision) +{ + this->move = new_move; + this->collision = new_collision; +} + +void SceneGraph::add_next(SceneGraphPtr next) { /* next のリストの最後に加える */
--- a/TaskManager/Test/test_render/SceneGraph.h Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/SceneGraph.h Sat Nov 29 02:39:43 2008 +0900 @@ -55,6 +55,7 @@ SceneGraph* searchSceneGraph(char *name); void set_move_collision(SceneGraph *node, move_func new_move, collision_func new_collision); + void set_move_collision(move_func new_move, collision_func new_collision); static void createFromXMLfile(char *);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Test/test_render/cube_action.cpp Sat Nov 29 02:39:43 2008 +0900 @@ -0,0 +1,98 @@ +#include "SceneGraph.h" +#include "xml_file/cube_split.h" + +static void cube_move_left(SceneGraphPtr node, int screen_w, int screen_h); +static void cube_move_right(SceneGraphPtr node, int screen_w, int screen_h); +static void cube_move_idle(SceneGraphPtr node, int screen_w, int screen_h); +static void cube_collision(SceneGraphPtr node, int screen_w, int screen_h, + SceneGraphPtr tree); + +static void cube_split(SceneGraphPtr root); + +static void +cube_move_left(SceneGraphPtr node, int screen_w, int screen_h) +{ + node->xyz[0] -= node->stack_xyz[0]; + node->xyz[1] -= node->stack_xyz[0] * node->stack_xyz[1]; + node->xyz[2] -= node->stack_xyz[0] * node->stack_xyz[2]; + + node->angle[0] += 0.2; + node->angle[1] += 0.2 * node->stack_xyz[1]; + node->angle[2] += 0.2 * node->stack_xyz[2]; + + if (node->frame > 10 && scene_graph->controller->circle.push) { + cube_split(node); + } +} + +static void +cube_move_right(SceneGraphPtr node, int screen_w, int screen_h) +{ + node->xyz[0] += node->stack_xyz[0]; + node->xyz[1] -= node->stack_xyz[0] * node->stack_xyz[1]; + node->xyz[2] -= node->stack_xyz[0] * node->stack_xyz[2]; + + node->angle[0] += 0.2; + node->angle[1] += 0.2 * node->stack_xyz[1]; + node->angle[2] += 0.2 * node->stack_xyz[2]; + + if (node->frame > 10 && scene_graph->controller->circle.push) { + cube_split(node); + } +} + +static void +cube_split(SceneGraphPtr root) +{ + SceneGraphPtr p = root->clone(); + root->addBrother(p); + + root->set_move_collision(cube_move_left, cube_collision); + p->set_move_collision(cube_move_right, cube_collision); + + p->xyz[0] = root->xyz[0] + 2; + p->xyz[1] = root->xyz[1]; + p->xyz[2] = root->xyz[2]; + + p->stack_xyz[0] = 0.2; + p->stack_xyz[1] = random()%3-1; + p->stack_xyz[2] = random()%3-1; + + root->xyz[0] -= 2; + root->stack_xyz[0] = 0.2; + root->stack_xyz[1] = random()%3-1; + root->stack_xyz[2] = random()%3-1; +} + + +static void +cube_move_idle(SceneGraphPtr node, int screen_w, int screen_h) +{ + node->xyz[0] = screen_w/2; + node->xyz[1] = screen_h/2; + node->xyz[2] = -300.0f; + + if (scene_graph->controller->circle.push) { + cube_split(node); + } +} + +static void +cube_collision(SceneGraphPtr node, int screen_w, int screen_h, + SceneGraphPtr tree) +{ +} + +static void +plane_idle(SceneGraphPtr node, int w, int h) +{ + node->xyz[2] = 100.0f; +} + +void +create_cube_split(void) +{ + SceneGraph::createFromXMLfile("xml_file/cube_split.xml"); + Plane->set_move_collision(plane_idle, cube_collision); + CUBE->set_move_collision(cube_move_idle, cube_collision); +}
--- a/TaskManager/Test/test_render/node.cpp Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/node.cpp Sat Nov 29 02:39:43 2008 +0900 @@ -1,51 +1,7 @@ #include <stdlib.h> #include "SceneGraph.h" -#include "xml_file/universe.h" #include "xml_file/cube.h" -#include "xml_file/snake576x384.h" - -static void -earth_move(SceneGraphPtr node, int screen_w, int screen_h) -{ - static float dest_x = 0.3f; - static float dest_y = 0.5f; - - node->angle[1] += 1.0f; - if (node->angle[1] > 360.0f) { - node->angle[1] = 0.0f; - } - - node->xyz[0] += dest_x; - if ((int)node->xyz[0] > screen_w || (int)node->xyz[0] < 0) { - dest_x = -dest_x; - } - node->xyz[1] += dest_y; - if ((int)node->xyz[1] > screen_h || (int)node->xyz[1] < 0) { - dest_y = -dest_y; - } -} - -static void -moon_move(SceneGraphPtr node, int screen_w, int screen_h) -{ - node->angle[0] += 1.0f; - if (node->angle[1] > 360.0f) { - node->angle[1] = 0.0f; - } -} - -static void -earth_collision(SceneGraphPtr node, int screen_w, int screen_h, - SceneGraphPtr tree) -{ -} - -static void -moon_collision(SceneGraphPtr node, int screen_w, int screen_h, - SceneGraphPtr tree) -{ -} static void cube_collision(SceneGraphPtr node, int screen_w, int screen_h, @@ -94,7 +50,7 @@ SceneGraphPtr p = node->clone(); p->position_init(); node->addBrother(p); - scene_graph->set_move_collision(p, cube_move2, cube_collision); + p->set_move_collision(cube_move2, cube_collision); p->stack_xyz[0] = (float)(random() % 5); p->stack_xyz[1] = (float)(random() % 5); //p->xyz[0] = screen_w/2; @@ -108,10 +64,7 @@ void node_init(void) { -#if 0 - scene_graph->set_move_collision(Earth, earth_move, earth_collision); - scene_graph->set_move_collision(Moon, moon_move, moon_collision); -#else +#if 1 scene_graph->set_move_collision(Cube, cube_move, cube_collision); Cube->stack_xyz[0] = 2.0f; Cube->stack_xyz[1] = 2.0f;
--- a/TaskManager/Test/test_render/task/CreateSpan.cpp Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/task/CreateSpan.cpp Sat Nov 29 02:39:43 2008 +0900 @@ -68,9 +68,11 @@ make_vMid10(VertexPack *v, VertexPack *vMin, VertexPack *vMid, VertexPack *vMax) { - int d, d1; - - d = (int)(vMax->y - vMin->y); + //int d, d1; + float d; + int d1; + + d = vMax->y - vMin->y; d1 = (int)(vMid->y - vMin->y); v->tex_x = calc(vMax->tex_x - vMin->tex_x, d, d1, vMin->tex_x); @@ -88,52 +90,52 @@ void CreateSpan::setTile(SpanPtr span) { - TileInfoListPtr tilelist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); - TileInfoListPtr send_tilelist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList));; + TileInfoListPtr tilelist = + (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); + TileInfoListPtr send_tilelist = + (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); TileInfoListPtr tilelist_addr; - TileInfoListPtr tmp = NULL; + TileInfoListPtr send_tilelist_addr; + TileInfoPtr tile; - TileInfoPtr tile; - int remain = span->length_x; // 残りのドット(Tile)数 + int cur_x = 0; int len = 0; - //smanager->mainMem_wait(); + smanager->mainMem_wait(); tilelist_addr = (TileInfoListPtr)smanager->mainMem_get(TILE_ALLOCATE); span->tilelist = tilelist_addr; - smanager->dma_load(tilelist, (uint32)tilelist_addr, - sizeof(TileInfoList), TILE_LOAD); - uint32 hoge = (uint32)tilelist_addr; - - while (remain > 0) { - if (remain > MAX_TILE_LIST) { - smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList)); - len = MAX_TILE_LIST; - } else { - len = remain; - } + float tex1 = span->tex_x1; + float tex2 = span->tex_x2; + float tey1 = span->tex_y1; + float tey2 = span->tex_y2; + int tex_xpos; + int tex_ypos; + int end = span->length_x; - float tex1 = span->tex_x1; - float tex2 = span->tex_x2; - float tey1 = span->tex_y1; - float tey2 = span->tex_y2; - int tex_xpos; - int tex_ypos; + if (span->length_x == 1) { + tilelist->init(); + tile = &tilelist->tileinfo[tilelist->size++]; + + tex_xpos = (int)((span->tex_width-1) * tex1); + tex_ypos = (int)((span->tex_height-1) * tey1); - smanager->dma_wait(TILE_LOAD); + tile->tix = tex_xpos; + tile->tiy = tex_ypos; + } else { + while (cur_x < span->length_x) { + len = (cur_x + MAX_TILE_LIST < span->length_x) ? + MAX_TILE_LIST : span->length_x - cur_x; - if (len == 1) { - tile = &tilelist->tileinfo[tilelist->size++]; - tex_xpos = (int)((span->tex_width-1) * tex1); - tex_ypos = (int)((span->tex_height-1) * tey1); - } else { float tex_x, tex_y; - for (int i = 0; i < len; i++) { + tilelist->init(); + + for (int i = cur_x; i < end; i++) { tile = &tilelist->tileinfo[tilelist->size++]; - tex_x = tex1*(len-1-i)/(len-1) + tex2*i/(len-1); - tex_y = tey1*(len-1-i)/(len-1) + tey2*i/(len-1); + tex_x = tex1*(end-1-i)/(end-1) + tex2*i/(end-1); + tex_y = tey1*(end-1-i)/(end-1) + tey2*i/(end-1); if (tex_x > 1) tex_x = 1; if (tex_y > 1) tex_y = 1; tex_xpos = (int)((span->tex_height-1) * tex_x); @@ -142,38 +144,39 @@ tile->tix = tex_xpos; tile->tiy = tex_ypos; } - } - - if (remain > MAX_TILE_LIST) { - TileInfoListPtr send = tilelist_addr; - - tmp = tilelist; - tilelist = send_tilelist; - send_tilelist = tmp; + + if (cur_x + MAX_TILE_LIST < span->length_x) { + TileInfoListPtr tmp = tilelist; + tilelist = send_tilelist; + send_tilelist = tmp; + send_tilelist_addr = tilelist_addr; - smanager->mainMem_wait(); - tilelist_addr = - (TileInfoListPtr)smanager->mainMem_get(TILE_ALLOCATE); - - send_tilelist->next = tilelist_addr; - - smanager->dma_wait(TILE_STORE); - smanager->dma_store(send_tilelist, (uint32)send, - sizeof(TileInfoList),TILE_STORE); + smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList)); + smanager->mainMem_wait(); + tilelist_addr = + (TileInfoListPtr)smanager->mainMem_get(TILE_ALLOCATE); + + send_tilelist->next = tilelist_addr; + + smanager->dma_wait(TILE_STORE); + smanager->dma_store(send_tilelist, (uint32)send_tilelist_addr, + sizeof(TileInfoList), TILE_STORE); + } - smanager->dma_load(tilelist, (uint32)tilelist_addr, - sizeof(TileInfoList), TILE_LOAD); + cur_x += MAX_TILE_LIST; } - remain -= MAX_TILE_LIST; } smanager->dma_wait(TILE_STORE); + tilelist->next = 0; // ? smanager->dma_store(tilelist, (uint32)tilelist_addr, sizeof(TileInfoList), TILE_STORE); + + free(send_tilelist); + smanager->dma_wait(TILE_STORE); free(tilelist); - free(send_tilelist); } /** @@ -312,8 +315,10 @@ /** * メインメモリに、Tile 用の領域確保をここで指定しておく - */ - smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList)); + */ + // ちと仕様変更によりここでは使わない + // 予めやっておいて、その間に処理、だとちょっと動作が怪しいらしい + //smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList)); tmp_xpos = calc(vMid10->x - vMin->x ,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); @@ -375,8 +380,8 @@ // TilePtr の計算 // tix, tiy (Tile 内での x, y) // - smanager->mainMem_wait(); - setTile(span); + //smanager->mainMem_wait(); + //setTile(span); } }
--- a/TaskManager/Test/test_render/viewer.cpp Sat Nov 29 01:18:32 2008 +0900 +++ b/TaskManager/Test/test_render/viewer.cpp Sat Nov 29 02:39:43 2008 +0900 @@ -105,6 +105,8 @@ extern void node_init(void); +extern void create_cube_split(void); + void Viewer::run_init(char *xml) { @@ -121,12 +123,14 @@ * scene_graph にオリジナルの SceneGraph Object のリストが、 * scene_graph_viewer に描画用の SceneGraph が生成される */ - SceneGraph::createFromXMLfile(xml); + //SceneGraph::createFromXMLfile(xml); //polygon->viewer = this; + create_cube_split(); + //node_init(); + scene_graph->controller = create_controller(); - node_init(); sgpack = (SceneGraphPack*)manager->malloc(sizeof(SceneGraphPack)); sgpack->init();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Test/test_render/xml_file/cube_split.h Sat Nov 29 02:39:43 2008 +0900 @@ -0,0 +1,2 @@ +#define Plane scene_graph +#define CUBE scene_graph->next
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Test/test_render/xml_file/cube_split.xml Sat Nov 29 02:39:43 2008 +0900 @@ -0,0 +1,279 @@ +<?xml version="1.0"?> +<OBJECT-3D> + <surface name="Plane" size="6" prim="Triangle" parent="NULL"> + <coordinate> + 38.655231 38.973322 -1.031601 + -42.648190 38.973337 -1.031601 + -42.648209 -42.330103 -1.031601 + -42.648209 -42.330103 -1.031601 + 38.655231 -42.330107 -1.031601 + 38.655231 38.973322 -1.031601 + </coordinate> + <normal> + 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 + </normal> + <model> + -1.996483 -1.678389 -1.031601 + </model> + <texture> + 0.000000 0.000000 + 1.000000 0.000000 + 1.000000 1.000000 + 1.000000 1.000000 + 0.000000 1.000000 + 0.000000 0.000000 + </texture> + <image name="cubetex.png"> + iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK + TWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ + WaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec + 5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A + AgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0 + ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO + WJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHi + wmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryM + AgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0l + YqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHi + NLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYA + QH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6c + wR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBie + whi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1c + QPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqO + Y4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM + WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgoh + JZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSU + Eko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/p + dLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Y + b1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7O + UndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsb + di97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W + 7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83 + MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxr + PGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW + 2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1 + U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd + 8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H0 + 8PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+H + vqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsG + Lww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjg + R2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4 + qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWY + EpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1Ir + eZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/Pb + FWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYj + i1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVk + Ve9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0Ibw + Da0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vz + DoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+y + CW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawt + o22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtd + UV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3r + O9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0 + /rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv95 + 63Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+ + UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMA + APn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACtklEQVR42uzaQYrCMBiG4UR6JT2AK3tiV/YA + XiouCkUERaGi6fc862EWmf9tkmmH02VfINXOEiAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABQJ+G + j376fLxaMv7TOB1+uQO00vwNCDoCPUx8LdVqEhSAiccl2OGH+ABsBUQHAAIAAYAAQAAgABAARAfg + NRnRAXhNhiMQCAAEAAIAAYAAQAAgABAACAAEAAIAAYAAQAAgABAACAAEAAIAAYAAQAAgABAACAAE + AAIAAYAAQAAgAAQAAgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQA + AgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABIABLgABAACAA + EAAIAAQAAgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABgABA + ACAAEAAIAAQAAgABgABAACAAEAAIAAQAAgABgABAACAABAACAAGAAEAAIAAQAAgABAACAAGAAEAA + IAAQAAgABAACAAGAAEAAIAAQAAgABAACAAGAAEAAIAAQAAgABAACAAGAAKCPAFpp1pfcAGqp1hdH + IBAACAAEAAIAAYAAoMMAvOQiOgAvuXAEAgGAAEAAIAAQAAgABAACgI0EMH8B4TsIQgOYv4B48R2E + Nog+AvlGCHcASArAsYfoABx7SD8C2QRIDGCZe5sAWQHMo2/uSQyglWb0yQ1gmf5vHP1dJ+jmDnC/ + D6w1uPYWurkDvDm4HupsLYBa6sNYt9KeDbqHOn9rWOsXmXK2vwMsz3j/CCIxgNdD76zPxo9A43Sw + ZLgEgwBAACAAEAAIAAQAAgABgABAACAAEAAIAAQAAoBfugEAAP//AwDZrDl6Rv8wKQAAAABJRU5E + rkJggg== + </image> + </surface> + <surface name="CUBE" size="36" prim="Triangle" parent="Plane"> + <coordinate> + 1.789587 1.361652 11.458147 + 1.789587 -1.898860 11.458147 + -1.470925 -1.898860 11.458147 + -1.470925 -1.898860 11.458147 + -1.470925 1.361653 11.458147 + 1.789587 1.361652 11.458147 + 1.789588 1.361652 14.718660 + -1.470925 1.361652 14.718660 + -1.470926 -1.898860 14.718660 + -1.470926 -1.898860 14.718660 + 1.789587 -1.898861 14.718660 + 1.789588 1.361652 14.718660 + 1.789587 1.361652 11.458147 + 1.789588 1.361652 14.718660 + 1.789587 -1.898861 14.718660 + 1.789587 -1.898861 14.718660 + 1.789587 -1.898860 11.458147 + 1.789587 1.361652 11.458147 + 1.789587 -1.898860 11.458147 + 1.789587 -1.898861 14.718660 + -1.470926 -1.898860 14.718660 + -1.470926 -1.898860 14.718660 + -1.470925 -1.898860 11.458147 + 1.789587 -1.898860 11.458147 + -1.470925 -1.898860 11.458147 + -1.470926 -1.898860 14.718660 + -1.470925 1.361652 14.718660 + -1.470925 1.361652 14.718660 + -1.470925 1.361653 11.458147 + -1.470925 -1.898860 11.458147 + 1.789588 1.361652 14.718660 + 1.789587 1.361652 11.458147 + -1.470925 1.361653 11.458147 + -1.470925 1.361653 11.458147 + -1.470925 1.361652 14.718660 + 1.789588 1.361652 14.718660 + </coordinate> + <normal> + 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.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 + -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 + </normal> + <model> + 0.159331 -0.268604 13.088404 + </model> + <texture> + 0.000000 0.000000 + 1.000000 0.000000 + 1.000000 1.000000 + 1.000000 1.000000 + 0.000000 1.000000 + 0.000000 0.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 + 0.000000 0.000000 + 1.000000 0.000000 + 1.000000 1.000000 + 1.000000 1.000000 + 0.000000 1.000000 + 0.000000 0.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 + 0.000000 0.000000 + 1.000000 0.000000 + 1.000000 1.000000 + 1.000000 1.000000 + 0.000000 1.000000 + 0.000000 0.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 + </texture> + <image name="cubetex.png"> + iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK + TWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ + WaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec + 5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A + AgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0 + ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO + WJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHi + wmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryM + AgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0l + YqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHi + NLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYA + QH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6c + wR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBie + whi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1c + QPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqO + Y4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM + WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgoh + JZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSU + Eko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/p + dLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Y + b1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7O + UndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsb + di97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W + 7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83 + MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxr + PGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW + 2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1 + U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd + 8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H0 + 8PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+H + vqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsG + Lww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjg + 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 + rkJggg== + </image> + </surface> +</OBJECT-3D> \ No newline at end of file