diff --git a/ag.cc b/ag.cc index 53230ef..2e812f8 100644 --- a/ag.cc +++ b/ag.cc @@ -27,6 +27,7 @@ namespace ag { "videoStop", videoStop }, { "sleep", sleep }, { "endFrame", endFrame }, + { "setCamera", setCamera }, { NULL, NULL } }; luaL_register(L, "ag", functions); @@ -171,10 +172,19 @@ namespace ag return 0; } + int startFrame(lua_State * L) + { + return g_engine->startFrame(L); + } + int endFrame(lua_State * L) { - SDL_GL_SwapBuffers(); - return 0; + return g_engine->endFrame(L); + } + + int setCamera(lua_State * L) + { + return g_engine->setCamera(L); } namespace object diff --git a/ag.h b/ag.h index b1af69c..4776e76 100644 --- a/ag.h +++ b/ag.h @@ -13,7 +13,9 @@ namespace ag int videoStart(lua_State * L); int videoStop(lua_State * L); int sleep(lua_State * L); + int startFrame(lua_State * L); int endFrame(lua_State * L); + int setCamera(lua_State * L); namespace object { diff --git a/anaglym.cc b/anaglym.cc index 0fb19ff..93fd280 100644 --- a/anaglym.cc +++ b/anaglym.cc @@ -9,6 +9,8 @@ #include #include #include +#include +#include using namespace std; static void usage(); @@ -61,6 +63,15 @@ Engine::Engine() { m_video = new Video(); m_next_object_index = 1; + m_eye[0] = 0; + m_eye[1] = -1; + m_eye[2] = 0; + m_center[0] = 0; + m_center[1] = 0; + m_center[2] = 0; + m_up[0] = 0; + m_up[1] = 0; + m_up[2] = 1; } Engine::~Engine() @@ -167,6 +178,28 @@ Engine::Object * Engine::getObject(int id) return m_objects.find(id) != m_objects.end() ? m_objects[id] : NULL; } +int Engine::startFrame(lua_State * L) +{ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(m_eye[0], m_eye[1], m_eye[2], + m_center[0], m_center[1], m_center[2], + m_up[0], m_up[1], m_up[2]); + return 0; +} + +int Engine::endFrame(lua_State * L) +{ + SDL_GL_SwapBuffers(); + return 0; +} + +int Engine::setCamera(lua_State * L) +{ + int argc = lua_gettop(L); + return 0; +} + void Engine::run() { } diff --git a/anaglym.h b/anaglym.h index 3d5a372..16427e2 100644 --- a/anaglym.h +++ b/anaglym.h @@ -38,6 +38,11 @@ class Engine int addObject(WFObj * obj); Object * getObject(int id); + /* lua services */ + int startFrame(lua_State * L); + int endFrame(lua_State * L); + int setCamera(lua_State * L); + protected: void registerLibraries(); bool fileExists(const std::string & path); @@ -48,6 +53,9 @@ class Engine OdeWorld m_world; std::map m_objects; int m_next_object_index; + GLdouble m_eye[3]; + GLdouble m_center[3]; + GLdouble m_up[3]; }; extern Engine * g_engine;