コード例 #1
0
void ofxIndustrialRobotVisualizer::drawGeneric(){
	
	//Base
	ofSetColor(0, 255, 255);	
	glTranslated(0, -25, 0);
	//ofxBox(ofxVec3f(0,25,0), ofxVec3f(200, 50, 200));	
	
	//model.draw();
	ofSetColor(255, 0, 0);
	glPushMatrix();
	glScaled(1.0, -1.0, 1.0);
	ofSetColor(255, 255, 255);

//	model.draw();
	glPopMatrix();
	//	ofxSphere(ofxVec3f(0,0,0), ofxVec3f(200, 200, 200));
	
	glRotated(180, 0.0, 0.0, -1.0); 
	glPushMatrix();
		glScaled(1.0, 1.0, -1.0);
	//	glScaled(0.1, 0.1, 0.1);
	drawArm0();
	drawArm1();
	drawArm2();
	drawArm3();
	drawArm4();
	//Draw tool
	ofSetColor(255, 0, 0);
	float l = helper->getTool()->l; //The length of the tool
	ofxVec3f rotation = helper->getTool()->getRotation();
	glRotated(rotation.z, 0.0, 0.0, 1.0);
	ofxBox(ofxVec3f(helper->getTool()->h/2.0,l/2,0), ofxVec3f(helper->getTool()->h, l, helper->getTool()->w), ofxVec3f(0.0, 0.0, 0.0));
	//	ofxVec3f axis = helper->getAxis(i); //The axis the arm rotates around
	//	ofxVec3f offset = helper->getOffset(i);
	//	glRotated(helper->getRotationAngle(i), axis.x, axis.y, axis.z); // Rotate it around the axis
	//	glTranslated(0, l, 0);
	//	ofxBox(ofxVec3f(0,-l/2.0,0), ofxVec3f(60, l, 60), ofxVec3f(0.0, 0.0, 0.0));
	//	glTranslated(-offset.y, offset.x, offset.z);	
	
	glPopMatrix();
	glScaled(1.0, 1.0, -1.0);

	//Target
	glRotated(180, 0.0, 1.0, 0.0); 
	ofSetColor(255, 0, 0);
	ofxSphere(controller->targetPosition, ofxVec3f(20, 20, 20));
	glBegin(GL_LINE_STRIP);
	glVertex3d(controller->targetPosition.x, controller->targetPosition.y, controller->targetPosition.z);
	ofxVec3f temp = controller->targetPosition+ controller->targetDir*500.0;
	glVertex3d(temp.x,temp.y, temp.z);
	glEnd();
	
	glPushMatrix();
	ofSetColor(0, 255, 0);
	for(int i=0;i<timeline->numberPositionCues(); i++){
		ofxVec3f vec = timeline->getPositionCue(i)->position;
		ofxSphere(vec, ofxVec3f(10, 10, 10));	
	}
	timeline->spline.drawRaw(10, 5);
	ofSetColor(255, 255, 0, 100);
	timeline->spline.drawSmooth(50, 0, 10);
	glLineWidth(1);
	ofSetColor(255, 255, 255, 255);
	ofFill();
	//	glDisable(GL_DEPTH_TEST);
	
/*	glBegin(GL_POLYGON);
	for(int i=0;i<3;i++){
		glVertex3f(plotter->spaceDefinition[i].x,plotter->spaceDefinition[i].y,plotter->spaceDefinition[i].z);
	}
	glVertex3f(plotter->fourthCorner().x,plotter->fourthCorner().y,plotter->fourthCorner().z);
	glEnd();
*/
	for(int i=0;i<plotter->lines.size();i++){
		glBegin(GL_LINE_STRIP);
		ofxVec3f x = (plotter->spaceDefinition[1]-plotter->spaceDefinition[0]).normalized();
		ofxVec3f y = (plotter->spaceDefinition[2]-plotter->spaceDefinition[1]).normalized();
		for(int u=0;u<plotter->lines[i].size();u++){
			ofxVec3f point = x * plotter->lines[i][u].x + y * plotter->lines[i][u].y + plotter->spaceDefinition[0];
			glVertex3f(point.x,point.y,point.z);
		}

		glEnd();
	}
	
	glPopMatrix();
	
	
}
コード例 #2
0
void drawGuy1(void)
{
	mvstack.push(model_view);
	if (TIME >= 3 && TIME < 4)
	{
		model_view *= RotateY(-135 + TIME*45);
		drawHead1();
	}
	else if(TIME >=4 && TIME < 5)
	{
		model_view *= RotateY(45);
		model_view *= RotateY(180 - TIME*45);
		drawHead1();
	}
	else
		drawHead1();
	model_view = mvstack.pop();

	mvstack.push(model_view);
		drawTorso1();
	model_view = mvstack.pop();
	
	// banana arm
	mvstack.push(model_view);
		if (TIME < 3)
		{
			model_view *= RotateX(-(17*3)+TIME*17);
		}
		else if (TIME >= 3 && TIME < 4)
		{
			model_view *= RotateX(17);
			model_view *= RotateX(36 - TIME*12);
		}
		else if( TIME >= 4 && TIME < 10)
		{
			model_view *= RotateX(20*sin(3*TIME));
		}
		else if (TIME >= 10 && TIME < 10.5)
		{
			model_view *= RotateX(959 - TIME*102);
		}
		else if (TIME >= 10.5 && TIME < 16)
		{
			model_view *= RotateY(30*sin(5*TIME));
			model_view *= RotateX(-45);
		}
		else if (TIME >= 17 && TIME < 17.5)
		{
			model_view *= RotateX(80*sin(20*TIME));
		}
			drawArm1();
	model_view = mvstack.pop();

	//static arm
	mvstack.push(model_view);
	if( TIME >= 4 && TIME < 10)
		{
			model_view *= RotateX(-20*sin(3*TIME));
		}
		drawTopArm1Right();
	model_view = mvstack.pop();

	//legs

	//LEG1
	mvstack.push(model_view);
	if (TIME > 5 && TIME < 9)
	{
		model_view *= RotateX(5*sin(5*TIME));
	}
	else if (TIME >= 16.5 && TIME < 17)
	{
		model_view *= RotateX(5*sin(5*TIME));
	}
		mvstack.push(model_view);
			set_colour(.8, .8, .8);
			model_view *= Translate(-.25, -2.5, 0);
			model_view *= RotateX(180);
			//model_view *= RotateX(5+sin(2*TIME));
			drawLegPart1();
			model_view *= Translate(0, .9, 0);
			model_view *= Scale (.2, .2, .2);
			drawSphere();
		model_view = mvstack.pop();

		//LOWERLEG 1
		mvstack.push(model_view);
			set_colour(.8, .8, .8);
			model_view *= Translate(-.25, -4.32, 0);
			if (TIME > 5 && TIME < 9)
				model_view *= RotateX(5*sin(5*TIME));
			else if (TIME >= 16.5 && TIME < 17)
			{
				model_view *= RotateX(5*sin(5*TIME));
			}
			drawLegPart2();
		model_view = mvstack.pop();
	model_view = mvstack.pop();

	//LEG2	
	mvstack.push(model_view);
	if (TIME > 5 && TIME < 9)
	{
		model_view *= RotateX(-5*sin(5*TIME));
	}
	else if (TIME >= 16.5 && TIME < 17)
	{
		model_view *= RotateX(-5*sin(5*TIME));
	}
		mvstack.push(model_view);
			set_colour(.8, .8, .8);
			model_view *= Translate(.25, -2.5, 0);
			model_view *= RotateX(180);
			drawLegPart1();
			model_view *= Translate(0, .9, 0);
			model_view *= Scale (.2, .2, .2);
			drawSphere();
		model_view = mvstack.pop();
		//LOWER LEG  2
		mvstack.push(model_view);
				set_colour(.8, .8, .8);
				model_view *= Translate(.25, -4.32, 0);
				if (TIME > 5 && TIME < 9)
					model_view *= RotateX(-5*sin(5*TIME));
				else if (TIME >= 16.5 && TIME < 17)
				{
					model_view *= RotateX(-5*sin(5*TIME));
				}
				drawLegPart2();
		model_view = mvstack.pop();

	model_view = mvstack.pop();
}