📄 drawobject.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 + -