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

📄 drawfield.cc

📁 2007年机器人足球世界杯3D仿真组亚军
💻 CC
字号:
#include "monitorframe.ih"void MonitorFrame::drawField(){  static GLuint fieldList = 0;    if (fieldList == 0)  {    fieldList = glGenLists(1);    glNewList(fieldList, GL_COMPILE);    // Draw field    glTexImage2D(GL_TEXTURE_2D, 0, 3, 512,           512, 0, GL_RGB, GL_UNSIGNED_BYTE,           d_grassTex);    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);      double fl = d_gameModel.getVarDbl(GameModel::FieldLength) / 2;    double fw = d_gameModel.getVarDbl(GameModel::FieldWidth) / 2;    double flb = fl + d_gameModel.getVarDbl(GameModel::BorderSize);    double fwb = fw + d_gameModel.getVarDbl(GameModel::BorderSize);        GLfloat material_border_aandd[] = {0.0, 0.75, 0.0, 1.0};    GLfloat material_field_aandd[] = {0.0, 0.5, 0.0, 1.0};    GLfloat material_lines_aandd[] = {1.0, 1.0, 1.0, 1.0};        glNormal3f(0.0, 0.0, 1.0);        glBegin(GL_QUADS);      //glColor3f(0, 0.75, 0.0);      glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_border_aandd);      glVertex3f(-flb, -fwb, 0.0);      glVertex3f(-flb, fwb, 0.0);      glVertex3f(flb, fwb, 0.0);      glVertex3f(flb, -fwb, 0.0);    glEnd();        glEnable(GL_TEXTURE_2D);    glBegin(GL_QUADS);      //glColor3f(0, 0.5, 0.0);      glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_field_aandd);      glTexCoord2f(0.0, 0.0); glVertex3f(-fl, -fw, 0.0);      glTexCoord2f(0.0, 2.0); glVertex3f(-fl, fw, 0.0);      glTexCoord2f(3.0, 2.0); glVertex3f(fl, fw, 0.0);      glTexCoord2f(3.0, 0.0); glVertex3f(fl, -fw, 0.0);    glEnd();    glDisable(GL_TEXTURE_2D);      //  glBegin(GL_TRIANGLES);    //  drawObject(*d_gfxField);    //  glEnd();      //glColor3f(1.0, 1.0, 1.0);    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_lines_aandd);        glBegin(GL_LINE_LOOP);      // Draw side lines      glVertex3f(-fl, -fw, 0.0);      glVertex3f(fl, -fw, 0.0);      glVertex3f(fl, fw, 0.0);      glVertex3f(-fl, fw, 0.0);    glEnd();      glBegin(GL_LINES);      // Draw middle line      glVertex3f(0.0, -fw, 0.0);      glVertex3f(0.0, fw, 0.0);    glEnd();      glBegin(GL_LINE_LOOP);      // Draw middle circle      double r = 9.15;      double dalpha = M_PI / 16;            for (double alpha = 0; alpha < 2 * M_PI; alpha += dalpha)      {        double x = r * cos(alpha);        double y = r * sin(alpha);        glVertex3f(x, y, 0.0);      }    glEnd();        double goalDepth = d_gameModel.getVarDbl(GameModel::GoalDepth);    double goalWidth = d_gameModel.getVarDbl(GameModel::GoalWidth);      glBegin(GL_LINE_STRIP);      // Draw left goal      glVertex3f(-fl, 0.5 * goalWidth, 0.0);      glVertex3f(-fl - goalDepth, 0.5 * goalWidth, 0.0);      glVertex3f(-fl - goalDepth, -0.5 * goalWidth, 0.0);      glVertex3f(-fl, -0.5 * goalWidth, 0.0);    glEnd();          glBegin(GL_LINE_STRIP);      // Draw right goal      glVertex3f(fl, 0.5 * goalWidth, 0.0);      glVertex3f(fl + goalDepth, 0.5 * goalWidth, 0.0);      glVertex3f(fl + goalDepth, -0.5 * goalWidth, 0.0);      glVertex3f(fl, -0.5 * goalWidth, 0.0);    glEnd();      glBegin(GL_LINE_STRIP);      // Draw left goal area      glVertex3f(-fl, 0.5 * goalWidth + 5.5, 0.0);      glVertex3f(-fl + 5.5, 0.5 * goalWidth + 5.5, 0.0);      glVertex3f(-fl + 5.5, -0.5 * goalWidth - 5.5, 0.0);      glVertex3f(-fl, -0.5 * goalWidth - 5.5, 0.0);    glEnd();      glBegin(GL_LINE_STRIP);      // Draw right goal area      glVertex3f(fl, 0.5 * goalWidth + 5.5, 0.0);      glVertex3f(fl - 5.5, 0.5 * goalWidth + 5.5, 0.0);      glVertex3f(fl - 5.5, -0.5 * goalWidth - 5.5, 0.0);      glVertex3f(fl, -0.5 * goalWidth - 5.5, 0.0);    glEnd();      glBegin(GL_LINE_STRIP);      // Draw left penalty area      glVertex3f(-fl, 0.5 * goalWidth + 16.5, 0.0);      glVertex3f(-fl + 16.5, 0.5 * goalWidth + 16.5, 0.0);      glVertex3f(-fl + 16.5, -0.5 * goalWidth - 16.5, 0.0);      glVertex3f(-fl, -0.5 * goalWidth - 16.5, 0.0);    glEnd();      glBegin(GL_LINE_STRIP);      // Draw right penalty area      glVertex3f(fl, 0.5 * goalWidth + 16.5, 0.0);      glVertex3f(fl - 16.5, 0.5 * goalWidth + 16.5, 0.0);      glVertex3f(fl - 16.5, -0.5 * goalWidth - 16.5, 0.0);      glVertex3f(fl, -0.5 * goalWidth - 16.5, 0.0);    glEnd();        glEndList();  }  glCallList(fieldList);}

⌨️ 快捷键说明

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