//------------------------------------------------------------------------------------ // timer callback function which will be invoked by TheFly3D System every 1/30 second // C.Wang 0308, 2004 //------------------------------------------------------------------------------------ void GameAI(int skip) { if (mmID != FAILED_ID) { FnMedia md; md.Object(mmID); if (md.GetState() == MEDIA_STOPPED) { // after playing, delete the media object FyDeleteMediaPlayer(mmID); mmID = FAILED_ID; } else { return; } } FnLight lgt; lgt.Object(lID); lgt.Rotate(Z_AXIS, 0.5f, GLOBAL); FnObject model; model.Object(nID); model.Rotate(Z_AXIS, 3.0f, GLOBAL); // render the scene FnViewport vp; vp.Object(vID); vp.Render3D(cID, TRUE, TRUE); // show frame rate static char string[128]; if (frame == 0) { FyTimerReset(0); } if (frame/10*10 == frame) { float curTime; curTime = FyTimerCheckTime(0); sprintf(string, "Fps: %6.2f", frame/curTime); } frame += skip; if (frame >= 1000) { frame = 0; } FySwapBuffers(); }
/*------------------ the main program C.Wang 0308, 2004 -------------------*/ void FyMain(int argc, char **argv) { // create a new world FyStartFlyWin32("Hello TheFly3D !", 0, 0, 800, 600, beFullScreen); FySetModelPath("Data\\Models"); FySetTexturePath("Data\\textures"); FySetShaderPath("Data\\Shaders"); FyBeginMedia("data\\media", 2); //mmID = FyCreateMediaPlayer("dawn.mpg", 0, 0, 800, 600); //mmID = FyCreateMediaPlayer("opening.avi", 0, 0, 800, 600); mmID = FyCreateMediaPlayer("MUSIC_fogforest.mp3", 0, 0, 800, 600); FnMedia mP; mP.Object(mmID); mP.Play(ONCE); //mP.SetVolume(0.1f); // create a viewport vID = FyCreateViewport(0, 0, 800, 600); FnViewport vp; vp.Object(vID); vp.SetBackgroundColor(0.3f, 0.4f, 0.5f); // create a 3D scene & the 3D entities sID = FyCreateScene(1); FnScene scene; scene.Object(sID); nID = scene.CreateObject(OBJECT); cID = scene.CreateObject(CAMERA); lID = scene.CreateObject(LIGHT); // load the teapot FnObject model; model.ID(nID); model.Load("teapot.cw3"); model.Translate(20.0f, 0.0f, 0.0f, GLOBAL); // translate the camera FnCamera camera; camera.ID(cID); camera.Rotate(X_AXIS, 90.0f, LOCAL); camera.SetAspectRatio(800.0f/600.0f); camera.Translate(0.0f, 10.0f, 200.0f, LOCAL); // translate the light FnLight light; light.ID(lID); light.Translate(-30.0f, -30.0f, 0.0f, GLOBAL); light.SetName("MainLight"); light.SetColor(0.9f, 0.9f, 0.7f); // set Hotkeys FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE); // define some mouse functions FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL); FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL); FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL); /* bind a timer, frame rate = 30 fps */ FyBindTimer(0, 30.0f, GameAI, TRUE); // invoke the system FyInvokeFly(TRUE); }