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

📄 drawobject.cc

📁 2007年机器人足球世界杯3D仿真组亚军
💻 CC
字号:
#include "monitorframe.hh"//#include <GL/glu.h>#include <GL/glut.h>#include "math.hh"using namespace bats;void MonitorFrame::drawObject(GameObject &object, bool shadow, bool gllist){  // Draw shadow  if (shadow)  {    glPushMatrix();      Vector3D direction(-1.0, -1.0, -1.0);    double plane[] = {0.0, 0.0, 1.0, 0.0};      Vector3D shadowPos = Math::intersectVectorPlane(object.position, direction, plane);    GLfloat material_shadow[] = {0.0, 0.0, 0.0, 0.7};    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_shadow);      glTranslated(shadowPos[0], shadowPos[1], shadowPos[2]);    glBegin(GL_TRIANGLE_FAN);      double r = object.scale[0] * 1.5;      double dalpha = M_PI / 16;          glVertex3f(0, 0, 0);      material_shadow[3] = 0.0;      glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_shadow);        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);      }      glVertex3f(r, 0, 0.0);    glEnd();      glPopMatrix();  }    glPushMatrix();  glTranslated(object.position[0], object.position[1], object.position[2]);     // Draw text!  if (!object.text.empty()) {    glPushMatrix();    GLfloat material_text[] = {1.0, 1.0, 0.0, 1.0};    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_text);          // Billborad    GLfloat matrix[16];    glGetFloatv(GL_MODELVIEW_MATRIX , matrix);    for (unsigned i = 0; i < 3; ++i)       for (unsigned j = 0; j < 3; ++j)        if (i == j)          matrix[i * 4 + j] = 1.0;        else          matrix[i * 4 + j] = 0.0;    glLoadMatrixf(matrix);        glTranslated(0.0, 0.5, 0.0);            //glColor3f(1.0,1.0,0.0);    glScaled(0.01, 0.01, 0.01);        //glLineWidth(1.0);    for (std::string::iterator i = object.text.begin(); i != object.text.end(); ++i)      glutStrokeCharacter(GLUT_STROKE_ROMAN,*i);    //glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10,*i);    //glLineWidth(1.0);      glPopMatrix();  }  if (gllist)  {    if (object.glList == 0)    {      cerr << "Creating GL List!" << endl;      object.glList = glGenLists(1);      glNewList(object.glList, GL_COMPILE);        if (object.gfx) {        for (std::vector<Face>::iterator i = object.gfx->getFaces().begin();             i != object.gfx->getFaces().end(); ++i) {          glBegin(i->getGLMode());            for (unsigned j = 0; j < i->length(); ++j) {            GLfloat material[4];            material[0] = i->getColor(j).getX();            material[1] = i->getColor(j).getY();            material[2] = i->getColor(j).getZ();            material[3] = 1.0;                      glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material);            //glColor3dv(i->getColor(j).ptr());            glNormal3dv(i->getNormal(j).ptr());            glVertex3dv(i->getVertex(j).ptr());          }            glEnd();        }      }      glEndList();    }      glScaled(object.scale[0], object.scale[1], object.scale[2]);    glCallList(object.glList);  }  else  {    glScaled(object.scale[0], object.scale[1], object.scale[2]);    if (object.gfx) {      for (std::vector<Face>::iterator i = object.gfx->getFaces().begin();           i != object.gfx->getFaces().end(); ++i) {        glBegin(i->getGLMode());          for (unsigned j = 0; j < i->length(); ++j) {          GLfloat material[4];          material[0] = i->getColor(j).getX();          material[1] = i->getColor(j).getY();          material[2] = i->getColor(j).getZ();          material[3] = 1.0;                    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material);          //glColor3dv(i->getColor(j).ptr());          glNormal3dv(i->getNormal(j).ptr());          glVertex3dv(i->getVertex(j).ptr());        }          glEnd();      }    }  }    glPopMatrix();}

⌨️ 快捷键说明

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