⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onmouse.cc

📁 2007年机器人足球世界杯3D仿真组亚军
💻 CC
字号:
#include "monitorglcanvas.hh"#include "vector3.hh"#include "monitorframe.hh"using namespace bats;void MonitorGLCanvas::OnMouse(wxMouseEvent& event){  Vector3D oldPos = ((MonitorFrame*)GetParent())->getCamPos();  Vector3D lookAt = ((MonitorFrame*)GetParent())->getCamLookAt();  Vector3D up = ((MonitorFrame*)GetParent())->getCamUp();  if (event.GetWheelRotation() != 0)  {    // Move cam in the direction we are looking at    double delta = (oldPos[2]) / 100.0 * 5.0 * (event.GetWheelRotation() >= 0 ? 1 : -1);    Vector3D newPos = oldPos + (lookAt - oldPos).normalize() * delta;    if (newPos[2] > 0.5 && newPos[2] < 200.0)      ((MonitorFrame*)GetParent())->moveCamPosTo(newPos);      }    if (event.ButtonDown())  {    cerr << "Clicky! " << event.GetX() << " " << event.GetY() << endl;        d_lastX = event.GetX();    d_lastY = event.GetY();  }    if (event.Dragging() && event.LeftIsDown())  {    int newX = event.GetX();    int newY = event.GetY();    // Strafe left/right    Vector3D tmp = lookAt - oldPos;    double meterPerPixel = 2 * tmp.length() / GetSize().GetWidth();    Vector3D strafe = tmp.crossProduct(up).normalize() * (newX - d_lastX) * meterPerPixel;    Vector3D newPos = oldPos - strafe;    Vector3D newLookAt = lookAt - strafe;    if (newPos[2] > 0.5 && newPos[2] < 200.0)    {      ((MonitorFrame*)GetParent())->moveCamPosTo(newPos);      ((MonitorFrame*)GetParent())->moveCamLookAtTo(newLookAt);    }    // Strafe up/down    strafe = up.normalize() * (newY - d_lastY) * meterPerPixel;    newPos = newPos + strafe;    newLookAt = newLookAt + strafe;    if (newPos[2] > 0.5 && newPos[2] < 200.0)    {      ((MonitorFrame*)GetParent())->moveCamPosTo(newPos);      ((MonitorFrame*)GetParent())->moveCamLookAtTo(newLookAt);    }        d_lastX = newX;    d_lastY = newY;      }  if (event.Dragging() && event.RightIsDown())  {    int newX = event.GetX();    int newY = event.GetY();    // Strafe left/right    Vector3D tmp = lookAt - oldPos;    double meterPerPixel = 2 * tmp.length() / GetSize().GetWidth();    Vector3D strafe = tmp.crossProduct(up).normalize() * (newX - d_lastX) * meterPerPixel;    Vector3D newPos = oldPos - strafe;    if (newPos[2] > 0.5 && newPos[2] < 200.0)    {      ((MonitorFrame*)GetParent())->moveCamPosTo(newPos);    }    // Strafe up/down    strafe = up.normalize() * (newY - d_lastY) * meterPerPixel;    newPos = newPos + strafe;    if (newPos[2] > 0.5 && newPos[2] < 200.0)    {      ((MonitorFrame*)GetParent())->moveCamPosTo(newPos);    }        d_lastX = newX;    d_lastY = newY;      }  ((MonitorFrame*)GetParent())->resetCamUp();  wxCommandEvent refreshEvent(wxDO_REFRESH_EVT, -1);  wxPostEvent(GetParent(), refreshEvent);//  wxCommandEvent e;//  paintGL(e);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -