Mercurial > hg > Game > Cerium
diff Renderer/Test/light_test.cc @ 1276:e92f00ed2fc0 draft
apply view matrix to normal vector
author | Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Nov 2011 19:26:18 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Renderer/Test/light_test.cc Tue Nov 22 19:26:18 2011 +0900 @@ -0,0 +1,147 @@ +#include <stdlib.h> +#include "SceneGraphRoot.h" +#include "light_test.h" + + +// prototype +static void light_move_translation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); +static void light_move_rotation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); +static void light_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree); + +static void object_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); +static void object_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree); + +static void +object_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, + SceneGraphPtr tree) +{ +} + +static void +object_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) +{ +} + +static void +light_move_translation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) +{ + + SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; + Pad *pad = sgroot->getController(); + + if (pad->circle.isPush()) { + node->set_move_collision(light_move_rotation, light_collision); + } + + if (pad->left.isHold()) { + node->xyz[0] -= 10; + } else if (pad->right.isHold()) { + node->xyz[0] += 10; + } + if (pad->up.isHold()) { + node->xyz[1] -= 10; + } else if (pad->down.isHold()) { + node->xyz[1] += 10; + } + + +} + +static void +light_move_rotation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) +{ + SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; + Pad *pad = sgroot->getController(); + if (pad->circle.isPush()) { + node->set_move_collision(light_move_translation, light_collision); + } + + if (pad->up.isHold()) { + node->xyz[2] += 10; + } else if (pad->down.isHold()) { + node->xyz[2] -= 10; + } + + if (pad->up.isHold()) { + node->angle[0] += 10; + } else if (pad->down.isHold()) { + node->angle[0] -= 10; + } + + +} + + +static void +light_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, + SceneGraphPtr tree) +{ + +} + + +MainLoopPtr +light_test::init(Viewer *sgroot, int screen_w, int screen_h) +{ + + sgroot->createFromXMLfile( "xml_file/universe.xml"); + sgroot->createFromXMLfile( "xml_file/cube.xml"); + sgroot->OnLightSysSwitch(); + SceneGraphPtr light = sgroot->getLight(0); + //光源のスイッチON + sgroot->OnLightSwitch(1); + + // SceneGraph ID から SceneGraph を生成する + SceneGraphPtr light_object = sgroot->createSceneGraph("Cube"); + light_object->set_move_collision(light_move_translation, light_collision); + light_object->xyz[0] = screen_w / 2; + light_object->xyz[1] = screen_h / 2; + + + SceneGraphPtr moon = sgroot->createSceneGraph("Moon"); + moon->set_move_collision(object_move, object_collision); + moon->xyz[0] = screen_w / 2; + moon->xyz[1] = screen_h / 2; + + + // SceneGraph 同士の親子関係を設定 (今回は 親 earth、子 moon) + SceneGraphPtr root = sgroot->createSceneGraph(); + + root->addChild(light_object); + light_object->addChild(light); + root->addChild(moon); + + // SceneGraphRoot に、使用する SceneGraph を設定する + // このとき、ユーザーは SceneGraph の root を渡す。 + sgroot->setSceneData(root); + return sgroot; +} + +extern Application * +application() { + return new light_test(); +} + +const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n"; + +extern int init(TaskManager *manager, int argc, char *argv[]); +extern void task_initialize(); +static void TMend(TaskManager *manager); + +int +TMmain(TaskManager *manager, int argc, char *argv[]) +{ + task_initialize(); + manager->set_TMend(TMend); + return init(manager, argc, argv); + +} + +void +TMend(TaskManager *manager) +{ + printf("test_nogl end\n"); +} + +/* end */ +