void mouseWheelFunction(int wheel, int dir, int x, int y) { g_renderer->_Camera->move(NYVert3Df(0, 0, dir)); }
/** * POINT D'ENTREE PRINCIPAL **/ int main(int argc, char* argv[]) { LogConsole::createInstance(); int screen_width = 1280; int screen_height = 720; glutInit(&argc, argv); glutInitContextVersion(3, 0); glutSetOption( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS ); glutInitWindowSize(screen_width, screen_height); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE); glEnable(GL_MULTISAMPLE); Log::log(Log::ENGINE_INFO, (toString(argc) + " arguments en ligne de commande.").c_str()); bool gameMode = true; for (int i = 0; i < argc; i++) { if (argv[i][0] == 'w') { Log::log(Log::ENGINE_INFO, "Arg w mode fenetre.\n"); gameMode = false; } } if (gameMode) { int width = glutGet(GLUT_SCREEN_WIDTH); int height = glutGet(GLUT_SCREEN_HEIGHT); char gameModeStr[200]; sprintf(gameModeStr, "%dx%d:32@60", width, height); glutGameModeString(gameModeStr); g_main_window_id = glutEnterGameMode(); } else { g_main_window_id = glutCreateWindow("MyNecraft"); glutReshapeWindow(screen_width, screen_height); } if (g_main_window_id < 1) { Log::log(Log::ENGINE_ERROR, "Erreur creation de la fenetre."); exit(EXIT_FAILURE); } GLenum glewInitResult = glewInit(); if (glewInitResult != GLEW_OK) { Log::log(Log::ENGINE_ERROR, ("Erreur init glew " + std::string((char*)glewGetErrorString(glewInitResult))).c_str()); _cprintf("ERROR : %s", glewGetErrorString(glewInitResult)); exit(EXIT_FAILURE); } //Affichage des capacités du système Log::log(Log::ENGINE_INFO, ("OpenGL Version : " + std::string((char*)glGetString(GL_VERSION))).c_str()); glutDisplayFunc(update); glutReshapeFunc(resizeFunction); glutKeyboardFunc(keyboardDownFunction); glutKeyboardUpFunc(keyboardUpFunction); glutSpecialFunc(specialDownFunction); glutSpecialUpFunc(specialUpFunction); glutMouseFunc(mouseFunction); glutMotionFunc(mouseMoveActiveFunction); glutPassiveMotionFunc(mouseMovePassiveFunction); glutIgnoreKeyRepeat(1); //Initialisation du renderer g_renderer = NYRenderer::getInstance(); g_renderer->setRenderObjectFun(renderObjects); g_renderer->setRender2DFun(render2d); //g_renderer->setLightsFun(setLights); g_renderer->setLightsFun(setLightsBasedOnDayTime); //g_renderer->setBackgroundColor(NYColor(0, 181.f / 255.f, 221.f / 255.f, 1)); g_program = g_renderer->createProgram("shaders/psbase.glsl", "shaders/vsbase.glsl"); g_renderer->initialise(true); //On applique la config du renderer glViewport(0, 0, g_renderer->_ScreenWidth, g_renderer->_ScreenHeight); g_renderer->resize(g_renderer->_ScreenWidth, g_renderer->_ScreenHeight); //Ecran de jeu uint16 x = 10; uint16 y = 10; g_screen_jeu = new GUIScreen(); g_screen_manager = new GUIScreenManager(); //Bouton pour afficher les params BtnParams = new GUIBouton(); BtnParams->Titre = std::string("Params"); BtnParams->X = x; BtnParams->setOnClick(clickBtnParams); g_screen_jeu->addElement(BtnParams); y += BtnParams->Height + 1; LabelFps = new GUILabel(); LabelFps->Text = "FPS"; LabelFps->X = x; LabelFps->Y = y; LabelFps->Visible = true; g_screen_jeu->addElement(LabelFps); y += BtnParams->Height + 1; LabelCam = new GUILabel(); LabelCam->Text = "Position"; LabelCam->X = x; LabelCam->Y = y; LabelCam->Visible = true; g_screen_jeu->addElement(LabelCam); //Ecran de parametrage x = 10; y = 10; g_screen_params = new GUIScreen(); GUIBouton * btnClose = new GUIBouton(); btnClose->Titre = std::string("Close"); btnClose->X = x; btnClose->setOnClick(clickBtnCloseParam); g_screen_params->addElement(btnClose); y += btnClose->Height + 1; y += 10; x += 10; GUILabel * label = new GUILabel(); label->X = x; label->Y = y; label->Text = "Param :"; g_screen_params->addElement(label); y += label->Height + 1; g_slider = new GUISlider(); g_slider->setPos(x, y); g_slider->setMaxMin(1, 0); g_slider->Visible = true; g_screen_params->addElement(g_slider); y += g_slider->Height + 1; y += 10; //Ecran a rendre g_screen_manager->setActiveScreen(g_screen_jeu); //Init Camera g_renderer->_Camera->setPosition(NYVert3Df(-300, -300, 1300)); g_renderer->_Camera->setLookAt(NYVert3Df(1300, 1300, 500)); //Fin init moteur //Init application //Init Timer g_timer = new NYTimer(); //On start g_timer->start(); //Generation du monde g_world = new NYWorld(); g_world->_FacteurGeneration = 1; g_world->init_world(); avatar = new NYAvatar(g_renderer->_Camera, g_world, NYVert3Df(1, 1, 900)); glutMainLoop(); return 0; }
NYVert3Df lerp(const NYVert3Df& a, const NYVert3Df& b, float t) { t = clamp<float>(t, 0, 1); return (NYVert3Df(a) - b) * t + b; }