示例#1
0
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);
}
示例#2
0
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();
		}
	};
};
示例#3
0
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.);
};
示例#4
0
文件: GLUtils.hpp 项目: 8803104/trunk
	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();
	}
示例#5
0
文件: player.c 项目: banthar/mine3d
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();
}