void Gl1_Aabb::go(const shared_ptr<Bound>& bv, Scene* scene){ Aabb* aabb = static_cast<Aabb*>(bv.get()); glColor3v(bv->color); if(!scene->isPeriodic){ glTranslatev(Vector3r(.5*(aabb->min+aabb->max))); glScalev(Vector3r(aabb->max-aabb->min)); } else { glTranslatev(Vector3r(scene->cell->shearPt(scene->cell->wrapPt(.5*(aabb->min+aabb->max))))); glMultMatrixd(scene->cell->getGlShearTrsfMatrix()); glScalev(Vector3r(aabb->max-aabb->min)); } glutWireCube(1); }
void ScalarGlRep::render(const shared_ptr<Node>& node, const GLViewInfo* viewInfo){ Vector3r color=(range?range->color(val):CompUtils::scalarOnColorScale(val,0,1)); if(isnan(color.maxCoeff())) return; Vector3r pos=node->pos+(node->hasData<GlData>()?node->getData<GlData>().dGlPos:Vector3r::Zero()); switch(how){ case 0: { GLUtils::GLDrawText((boost::format("%03g")%val).str(),pos,color); // ,/*center*/true,/*font*/NULL,/*bgColor*/Vector3r::Zero()); break; } case 1: { glColor3v(color); glPointSize((int)(100*relSz)); glBegin(GL_POINTS); glVertex3v(pos); glEnd(); break; } case 2: { glColor3v(color); glPushMatrix(); glTranslatev(pos); glutSolidSphere(relSz*viewInfo->sceneRadius,6,12); glPopMatrix(); } }; };
void Gl1_L3Geom::draw(const shared_ptr<IGeom>& ig, bool isL6Geom, const Real& phiScale){ const L3Geom& g(ig->cast<L3Geom>()); glTranslatev(g.contactPoint); #ifdef L3_TRSF_QUATERNION //glMultMatrixd(Eigen::Affine3d(Matrix3r(g.trsf).transpose()).data()); glMultMatrix(Eigen::Transform<Real,3,Eigen::Affine>(Matrix3r(g.trsf).transpose()).data()); #else //glMultMatrixd(Eigen::Affine3d(g.trsf.transpose()).data()); glMultMatrix(Eigen::Transform<Real,3,Eigen::Affine>(g.trsf.transpose()).data()); #endif Real rMin=g.refR1<=0?g.refR2:(g.refR2<=0?g.refR1:min(g.refR1,g.refR2)); if(axesWd>0){ glLineWidth(axesWd); for(int i=0; i<3; i++){ Vector3r pt=Vector3r::Zero(); pt[i]=.5*rMin*axesScale; Vector3r color=.3*Vector3r::Ones(); color[i]=1; GLUtils::GLDrawLine(Vector3r::Zero(),pt,color); if(axesLabels) GLUtils::GLDrawText(string(i==0?"x":(i==1?"y":"z")),pt,color); } } if(uPhiWd>0){ glLineWidth(uPhiWd); if(uScale!=0) GLUtils::GLDrawLine(Vector3r::Zero(),uScale*g.relU(),Vector3r(0,1,.5)); if(isL6Geom && phiScale>0) GLUtils::GLDrawLine(Vector3r::Zero(),ig->cast<L6Geom>().relPhi()/Mathr::PI*rMin*phiScale,Vector3r(.8,0,1)); } glLineWidth(1.); };
static void GLDrawText(const std::string& txt, const Vector3r& pos, const Vector3r& color=Vector3r(1,1,1)){ glPushMatrix(); glTranslatev(pos); glColor3(color[0],color[1],color[2]); glRasterPos2i(0,0); for(unsigned int i=0;i<txt.length();i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, txt[i]); glPopMatrix(); }
void humanDraw(Actor* actor) { if(!actor->draw) return; static GLuint texture=0; if(texture==0) texture=loadTexture("data/mob/char.png"); glBindTexture(GL_TEXTURE_2D,texture); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslatev(actor->pos); glRotatef(actor->rot[0],0,0,1); glScalef(1.0/16.0,1.0/16.0,1.0/16.0); drawBox(&playerModel,NULL); glPopMatrix(); }