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

📄 cdraw.cc

📁 2007年机器人足球世界杯3D仿真组亚军
💻 CC
字号:
#include "gamemodel.hh"#include "gameobject.hh"#include <GL/gl.h>#include <cmath>#include <iostream>using namespace bats;using namespace std;void GameModel::cDraw(double gameTime, unsigned team, unsigned unum, rPredicate const &pred){  //cerr << "Draw command! " << info.team << " " << info.unum << " " << *pred << endl;  GameObject extraGfx;// = gameModel.getPlayerInfo(info.team, info.unum).extraGfx;  extraGfx.glList = 0;  extraGfx.scale = Vector3D(1, 1, 1);  extraGfx.gfx = new GFXObject();  Vector3D color(1.0, 1.0, 1.0);    for (Predicate::iterator iter = pred->begin(); iter != pred->end(); ++iter)  {    rPredicate child = *iter;    //cerr << "child: " << child->getStr() << endl;    if (child->getStr() == "colour")    {      color[0] = *(child->get(0));      color[1] = *(child->get(1));      color[2] = *(child->get(2));    }    else if (child->getStr() == "circle")    {      double x = *(child->get(0));      double y = *(child->get(1));      double r = *(child->get(2));      if (team == 1)      {        x = -x;        y = -y;      }      //cerr << "drawing circle (" << x << ", " << y << ", " << r << ")" << endl;      Face f;      f.begin(GL_LINE_LOOP);      f.color(color[0], color[1], color[2]);      double dalpha = M_PI / 8;          for (double alpha = 0; alpha < 2 * M_PI; alpha += dalpha)      {        double dx = r * cos(alpha);        double dy = r * sin(alpha);        f.vertex(Vector3D(x + dx, y + dy, 0.0));      }      extraGfx.gfx->addFace(f);    }    else if (child->getStr() == "line")    {      double x1 = *(child->get(0));      double y1 = *(child->get(1));      double x2 = *(child->get(2));      double y2 = *(child->get(3));      if (team == 1)      {        x1 = -x1;        y1 = -y1;        x2 = -x2;        y2 = -y2;      }      Face f;      f.begin(GL_LINES);      f.color(color[0], color[1], color[2]);      f.vertex(Vector3D(x1, y1, 0.0));      f.vertex(Vector3D(x2, y2, 0.0));      extraGfx.gfx->addFace(f);    }    else if (child->getStr() == "vector")    {      double x1 = *(child->get(0));      double y1 = *(child->get(1));      double x2 = *(child->get(2));      double y2 = *(child->get(3));      if (team == 1)      {        x1 = -x1;        y1 = -y1;        x2 = -x2;        y2 = -y2;      }      Face f1;      f1.begin(GL_LINES);      f1.color(color[0], color[1], color[2]);      f1.vertex(Vector3D(x1, y1, 0.0));      f1.vertex(Vector3D(x2, y2, 0.0));      extraGfx.gfx->addFace(f1);            // Draw arrowhead      double dx = x2 - x1;      double dy = y2 - y1;      double beta = -atan(dy/dx);      if (dx < 0)        beta += 3.14;      double lahx = -1 * cos(beta) + 1 * sin(beta);      double lahy = - (-1) * sin(beta) + 1 * cos(beta);            double rahx = -1 * cos(beta) + (-1) * sin(beta);      double rahy = - (-1) * sin(beta) + (-1) * cos(beta);      Face f2;      f2.begin(GL_TRIANGLES);      f2.color(color[0], color[1], color[2]);      f2.vertex(Vector3D(x2, y2, 0.0));      f2.vertex(Vector3D(x2 + lahx, y2 + lahy, 0.0));      f2.vertex(Vector3D(x2 + rahx, y2 + rahy, 0.0));      extraGfx.gfx->addFace(f2);    }  }  getPlayerInfo(team, unum).extraGfx = extraGfx;}

⌨️ 快捷键说明

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