📄 paintgl.cc
字号:
#include "monitorframe.ih"void MonitorFrame::paintGL(wxCommandEvent &event){ d_glCanvas->SetCurrent(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //glEnable(GL_LINE_SMOOTH); //glEnable(GL_POLYGON_SMOOTH); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glHint(GL_POLYGON_SMOOTH, GL_NICEST); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glShadeModel(GL_SMOOTH); // Setup perspective and clear screen wxSize size = d_glCanvas->GetSize(); glViewport(0, 0, size.GetWidth(), size.GetHeight()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)size.GetWidth() / (GLfloat)size.GetHeight(), 0.1f, 200.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Setup lighting (the sun) GLfloat light_ambient[] = {0.7, 0.7, 0.7, 1.0}; GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); d_gameModel.lock(); if (d_centerOnBallCheck->IsChecked()) { d_camLookAt = d_gameModel.getVarVect(GameModel::Ball); resetCamUp(); } gluLookAt(d_camPos[0], d_camPos[1], d_camPos[2], // Move camera to right position d_camLookAt[0], d_camLookAt[1], d_camLookAt[2], // Aim it d_camUp[0], d_camUp[1], d_camUp[2]); // Set what is up glDisable(GL_DEPTH_TEST); // Draw Field drawField(); glEnable(GL_DEPTH_TEST); // Draw Flags d_gameObjects[FlagFirst].position = d_gameModel.getVarVect(GameModel::Flag1L); drawObject(d_gameObjects[FlagFirst]); d_gameObjects[FlagFirst+1].position = d_gameModel.getVarVect(GameModel::Flag1R); drawObject(d_gameObjects[FlagFirst+1]); d_gameObjects[FlagFirst+2].position = d_gameModel.getVarVect(GameModel::Flag2L); drawObject(d_gameObjects[FlagFirst+2]); d_gameObjects[FlagFirst+3].position = d_gameModel.getVarVect(GameModel::Flag2R); drawObject(d_gameObjects[FlagFirst+3]); // Draw goal posts d_gameObjects[GoalFirst].position = d_gameModel.getVarVect(GameModel::Goal1L); drawObject(d_gameObjects[GoalFirst]); d_gameObjects[GoalFirst+1].position = d_gameModel.getVarVect(GameModel::Goal1R); drawObject(d_gameObjects[GoalFirst+1]); d_gameObjects[GoalFirst+2].position = d_gameModel.getVarVect(GameModel::Goal2L); drawObject(d_gameObjects[GoalFirst+2]); d_gameObjects[GoalFirst+3].position = d_gameModel.getVarVect(GameModel::Goal2R); drawObject(d_gameObjects[GoalFirst+3]); // Draw ball d_gameObjects[Ball].position = d_gameModel.getVarVect(GameModel::Ball); d_gameObjects[Ball].scale[0] = d_gameObjects[Ball].scale[1] = d_gameObjects[Ball].scale[2] = d_gameModel.getVarDbl(GameModel::BallRadius); //d_gameObjects[Ball].position[2] = d_gameObjects[Ball].scale[0]; drawObject(d_gameObjects[Ball]); // Draw Players for (unsigned i = TeamOnePlayerFirst; i <= TeamTwoPlayerLast; ++i) { unsigned team = i < TeamTwoPlayerFirst ? 0 : 1; unsigned unum = (i - TeamOnePlayerFirst) % 11; GameModel::PlayerInfo &pi = d_gameModel.getPlayerInfo(team,unum); d_gameObjects[i].position = pi.pos; d_gameObjects[i].scale[0] = d_gameObjects[i].scale[1] = d_gameObjects[i].scale[2] = d_gameModel.getVarDbl(GameModel::AgentRadius); // cerr << "AgentRadius: " << d_gameModel.getVarDbl(GameModel::AgentRadius) << std::endl; drawObject(d_gameObjects[i]); if (d_playerCheckBoxes[team][unum]->IsChecked()) drawObject(pi.extraGfx, false, false); } d_gameModel.unlock(); glFlush(); // Swap the buffers. d_glCanvas->SwapBuffers(); // Refresh();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -