computer graphic
Join the DZone community and get the full member experience.
Join For Free// Name : Hoang Xuan Nhat Huy
// ID : 51101332
#include
#include
#include
#include
#include
using namespace std;
class Point3
{
public:
float x, y, z;
void set(float dx, float dy, float dz)
{ x = dx; y = dy; z = dz;}
void set(Point3& p)
{ x = p.x; y = p.y; z = p.z;}
Point3() { x = y = z = 0;}
Point3(float dx, float dy, float dz)
{ x = dx; y = dy; z = dz;}
};
class Color3
{
public:
float r, g, b;
void set(float red, float green, float blue)
{ r = red; g = green; b = blue;}
void set(Color3& c)
{ r = c.r; g = c.g; b = c.b;}
Color3() { r = g = b = 0;}
Color3(float red, float green, float blue)
{ r = red; g = green; b = blue;}
};
class Point2
{
public:
Point2() { x = y = 0.0f; } // constructor 1
Point2(float xx, float yy) { x = xx; y = yy; } // constructor 2
void set(float xx, float yy) { x = xx; y = yy; }
float getX() { return x;}
float getY() { return y;}
void draw() { glBegin(GL_POINTS);
glVertex2f((GLfloat)x, (GLfloat)y);
glEnd();
}
private:
float x, y;
};
class IntRect
{
public:
IntRect() { l = 0; r = 100; b = 0; t = 100; } // constructor
IntRect( int left, int right, int bottom, int top)
{ l = left; r = right; b = bottom; t = top; }
void set( int left, int right, int bottom, int top)
{ l = left; r = right; b = bottom; t = top; }
void draw(){
glRecti(l, b, r, t);
glFlush();
} // draw this rectangle using OpenGL
int getWidth(){return (r-l);}
int getHeight() { return (t-b);}
private:
int l, r, b, t;
};
class RealRect
{
public:
RealRect() { l = 0; r = 100; b = 0; t = 100; } // constructor
RealRect( float left, float right, float bottom, float top)
{ l = left; r = right; b = bottom; t = top; }
void set( float left, float right, float bottom, float top)
{ l = left; r = right; b = bottom; t = top; }
float getWidth(){return (r-l);}
float getHeight() { return (t-b);}
void RealRect::draw(){
glRectf(l, b, r, t);
glFlush();
};// draw this rectangle using OpenGL
private:
float l, r, b, t;
};
class Vector3
{
public:
float x, y, z;
void set(float dx, float dy, float dz)
{ x = dx; y = dy; z = dz;}
void set(Vector3& v)
{ x = v.x; y = v.y; z = v.z;}
void flip()
{ x = -x; y = -y; z = -z;}
//void setDiff(Point3& a, Point3&
void normalize();
Vector3() { x = y = z = 0;}
Vector3(float dx, float dy, float dz)
{ x = dx; y = dy; z = dz;}
Vector3(Vector3& v)
{ x = v.x; y = v.y; z = v.z;}
Vector3 cross(Vector3 b);
float dot(Vector3 b);
};
class VertexID
{
public:
int vertIndex;
int colorIndex;
};
class Face
{
public:
int nVerts;
VertexID* vert;
Face()
{
nVerts = 0;
vert = NULL;
}
~Face()
{
if(vert !=NULL)
{
delete[] vert;
vert = NULL;
}
nVerts = 0;
}
};
class Mesh
{
public:
int numVerts;
Point3* pt;
int numFaces;
Face* face;
float slideX, slideY, slideZ;
float rotateX, rotateY, rotateZ;
public:
Mesh()
{
slideX = 0;
slideY = 0;
slideZ = 0;
rotateX = 0;
rotateY = 0;
rotateZ = 0;
numVerts = 0;
pt = NULL;
numFaces = 0;
face = NULL;
}
~Mesh()
{
if (pt != NULL)
{
delete[] pt;
}
if(face != NULL)
{
delete[] face;
}
numVerts = 0;
numFaces = 0;
}
void DrawWireframe();
void DrawColor();
void CreateTetrahedron();
void CreateCube(float fSize);
void CreateSphere(int nSlice, int nStack, float radius);
void CreateYPlane(int nXSegment, int nZSegment, float fXWidth, float fZWidth);
void CreateCuboid(float fSizeX, float fSizeY, float fSizeZ);
void CreateCylinder(int nSegment, float fHeight, float fRadius);
void CreateCylinderWithHole(int nSegment, float fHeight, float fORadius, float fIRadius);
void CreatehaftSphere(int nSlice, int nStack, float radius);
void SetColor(int colorIdx);
};
#define DEG2RAD(x) (x*PI)/180.0f
void myDisplay();
int screenWidth = 600;
int screenHeight= 600;
float fRoomSize = 15;
bool bWireFrame = false;
float YPlanePos = 0;
float ballRadius = 0.4;
float ball1SizeZ = 2;
float cuboidBaseSizeXZ = 0.8;
float cuboidBaseSizeY = 0.1;
float cylBase1Radius = cuboidBaseSizeXZ/2 - 0.1;
float cylBase1Height = 0.2;
float cylBase2Radius = cylBase1Radius - 0.1;
float cylBase2Height = 2.5;
///////////////////////////////////////////////////
float upperArm1ORadius = cylBase1Radius;
float upperArm1IRadius = cylBase2Radius;
float upperArm1Height = cylBase1Height*1.5;
float upperArm1Offset = 0.5;
float upperArm2SizeX = upperArm1IRadius;
float upperArm2SizeZ = 1.4/2;
float upperArm2SizeY = upperArm1Height/2;
float upperArm3Radius = upperArm2SizeX;
float upperArm3Height = upperArm2SizeY*2;
float upperArm4Radius = upperArm3Radius - 0.08;
float upperArm4Height = upperArm3Height*2;
float upperArmRotateY = 0;
///////////////////////////////////////////////
float foreArm1ORadius = 0.2;
float foreArm1IRadius = cylBase2Radius;
float foreArm1Height = 0.5;
float foreArm1Offset = 0.5;
//float foreArm2SizeX = upperArm1IRadius;
//float foreArm2SizeZ = 0.7;
//float foreArm2SizeY = upperArm1Height;
float foreArm2SizeX = 0.15;
float foreArm2SizeZ = 1.4;
float foreArm2SizeY = 0.5/2;
float foreArm3Radius = 0.12;
float foreArm3Height = 0.5;
float foreArm4Radius = 0.1;
float foreArm4Height = 1.6;
float foreArmRotateY = 0;
float handMove = 0;
float handMove1 = 0;
float move = 0;
bool hold1 = false;
bool hold2 = false;
bool hold3 = false;
bool hold4 = false;
float ball1upper = 0;
float ball1hand = 0;
float ball2upper = 0;
float ball2hand = 0;
float ball3upper = 0;
float ball3hand = 0;
float ball4upper = 0;
float ball4hand = 0;
//Mesh for the foor
Mesh planeY;
Mesh planeY2;
//Mesh for the ball
Mesh ball1;
Mesh ball2;
Mesh ball3;
Mesh ball4;
//Mesh for the body
Mesh cuboidBase;
Mesh cylBase1;
Mesh cylBase2;
//Mesh for upper arm
Mesh upperArm1;
Mesh upperArm2;
Mesh upperArm3;
Mesh upperArm4;
//Mesh for fore arm
Mesh foreArm1;
Mesh foreArm2;
Mesh foreArm3;
Mesh foreArm4;
Mesh Hand;
Mesh Hand1;
//Camera parameters
float camera_angle;
float camera_height;
float camera_dis;
float camera_X, camera_Y, camera_Z;
float lookAt_X, lookAt_Y, lookAt_Z;
float camera_lookAt;
bool b4View = false;
#define PI 3.1415926
#define COLORNUM 14
float ColorArr[COLORNUM][3] = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, { 0.0, 0.0, 1.0},
{1.0, 1.0, 0.0}, { 1.0, 0.0, 1.0},{ 0.0, 1.0, 1.0},
{0.3, 0.3, 0.3}, {0.5, 0.5, 0.5}, { 0.9, 0.9, 0.9},
{1.0, 0.5, 0.5}, { 0.5, 1.0, 0.5},{ 0.5, 0.5, 1.0},
{0.0, 0.0, 0.0}, {1.0, 1.0, 1.0}};
void Mesh::SetColor(int colorIdx){
for (int f = 0; f < numFaces; f++)
{
for (int v = 0; v < face[f].nVerts; v++)
{
face[f].vert[v].colorIndex = colorIdx;
}
}
}
void Mesh::CreateCylinderWithHole(int nSegment, float fHeight, float fORadius, float fIRadius)
{
numVerts = nSegment * 4;
pt = new Point3[numVerts];
int count = 0;
for (int i = 0; i < 4; i++)
{
if (i == 2)
fHeight *= -1;
float r = (i == 0 || i == 3) ? fIRadius : fORadius;
for (int j = 0; j < nSegment; j++)
{
float x = r * cos(2 * PI*j / nSegment);
float z = r * sin(2 * PI*j / nSegment);
pt[count].set(x, fHeight, z);
count++;
}
}
// ve face
numFaces = nSegment * 4;
face = new Face[numFaces];
count = 0;
for (int i = 1; i < 5; i++)
{
for (int j = 0; j < nSegment; j++)
{
face[count].nVerts = 4;
face[count].vert = new VertexID[face[count].nVerts];
face[count].vert[0].vertIndex = nSegment * (i%4) + j;
face[count].vert[1].vertIndex = nSegment * (i%4) + ((j + 1) % nSegment);
face[count].vert[2].vertIndex = nSegment * (i - 1) + ((j + 1) % nSegment);
face[count].vert[3].vertIndex = nSegment * (i - 1) + j;
count++;
}
}
}
void Mesh::CreateCylinder(int nSegment, float fHeight, float fRadius)
{
numVerts = 2*nSegment + 4;
pt = new Point3[numVerts];
pt[0].set(0,fHeight/2,0);
pt[1].set(0,-fHeight/2,0);
float y=fHeight/2;
for (int i = 0; i <= nSegment; i++)
{
float deg = 360*i/nSegment * PI / 180;
float x=fRadius*sin(deg);
float z=fRadius*cos(deg);
pt[2+i].set(x,y,z);
pt[2+i+nSegment+1].set(x,-y,z);
}
numFaces = 3*nSegment;
face = new Face[numFaces];
for (int i = 0; i < nSegment; i++)
{
face[i].nVerts = 3;
face[i].vert = new VertexID[face[i].nVerts];
face[i].vert[0].vertIndex = 0;
face[i].vert[1].vertIndex = 2+i;
face[i].vert[2].vertIndex = 2+i+1;
for(int j = 0; j= 2.35)
{
if(2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) <= -2.35 && 2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) >= -3.65)
{
//4
if(move >= -0.11 && move <= -0.09)
{
if(hold1 == false && hold3 == false && hold4 == false)
{
hold2 = true;
return 2;
}
}
}
}
if(2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) <= -2.35 && 2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) >= -3.65)
{
if(2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) <= -2.35 && 2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) >= -3.65)
{
//3
if(move >= -0.11 && move <= -0.09)
{
if(hold1 == false && hold2 == false && hold4 == false)
{
hold3 = true;
return 3;
}
}
}
}
if(2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) <= -2.35 && 2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) >= -3.65)
{
if(2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) <= 3.65 && 2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) >= 2.35)
{
//2
if(move >= -0.11 && move <= -0.09)
{
if(hold1 == false && hold3 == false && hold2 == false)
{
hold4 = true;
return 4;
}
}
}
}
if(2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) <= 3.65 && 2.9*(cos(handMove1*PI/180)) + 1.6*(cos(upperArmRotateY*PI/180)) >= 2.35)
{
if(2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) <= 3.65 && 2.9*(sin(handMove1*PI/180)) + 1.6*(sin(upperArmRotateY*PI/180)) >= 2.35)
{
//1
if(move >= -0.11 && move <= -0.09)
{
if(hold2 == false && hold3 == false && hold4 == false)
{
hold1 = true;
return 1;
}
}
}
}
/*
if(sin(upperArmRotateY*PI/180) >= -0.809017 && sin(upperArmRotateY*PI/180) <= 0.207912)
{
if(sin(handMove1*PI/180) >= -0.927184 && sin(handMove1*PI/180) <= -0.809017 && move >= -0.11 && move <= -0.09) cout<<"blabla"< -0.08)
//move -= 0.05;
}
else if(move > -0.875)
move -= 0.05;
break;
case 'v':
case 'V':
b4View = !b4View;
changeCameraPos();
break;
case '+':
camera_dis += 0.1;
changeCameraPos();
break;
case '-':
camera_dis -= 0.1;
changeCameraPos();
break;
//Code here
////////////////////////////////////////////
}
glutPostRedisplay();
}
void drawFloor()
{
int SPACE = -2;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
glPushMatrix();
glTranslated(planeY.slideX + i*SPACE, planeY.slideY, planeY.slideZ + j*SPACE);
if(bWireFrame){
planeY.DrawWireframe();
}
else{
planeY.DrawColor();
}
glPopMatrix();
glPushMatrix();
glTranslated(planeY2.slideX + i*SPACE, planeY2.slideY, planeY2.slideZ + j*SPACE);
if(bWireFrame){
planeY2.DrawWireframe();
}
else{
planeY2.DrawColor();
}
glPopMatrix();
}
}
}
void drawBall1()
{
glPushMatrix();
glRotated(ball1upper, 0, 1, 0);
glTranslated(ball1.slideX, ball1.slideY, ball1.slideZ);
glTranslated(-cos(45*PI/180)*2.9, 0, -cos(45*PI/180)*2.9);
glRotated(ball1hand, 0, 1, 0);
glTranslated(cos(45*PI/180)*2.9, 0, cos(45*PI/180)*2.9);
//glTranslated(0, move, 0);
//glTranslated(-ball1.slideX, -ball1.slideY, -ball1.slideZ);
//glRotated(ball1hand, 0, 1, 0);
//glTranslated(ball1.slideX, ball1.slideY, ball1.slideZ);
if(bWireFrame)
ball1.DrawWireframe();
else
ball1.DrawColor();
glPopMatrix();
}
void drawBall2()
{
glPushMatrix();
glRotated(ball2upper, 0, 1, 0);
glTranslated(ball2.slideX, ball2.slideY, ball2.slideZ);
glTranslated(cos(45*PI/180)*2.9, 0, -cos(45*PI/180)*2.9);
glRotated(ball2hand, 0, 1, 0);
glTranslated(-cos(45*PI/180)*2.9, 0, cos(45*PI/180)*2.9);
if(bWireFrame)
ball2.DrawWireframe();
else
ball2.DrawColor();
glPopMatrix();
}
void drawBall3()
{
glPushMatrix();
glRotated(ball3upper, 0, 1, 0);
glTranslated(ball3.slideX, ball3.slideY, ball3.slideZ);
glTranslated(cos(45*PI/180)*2.9, 0, cos(45*PI/180)*2.9);
glRotated(ball3hand, 0, 1, 0);
glTranslated(-cos(-45*PI/180)*2.9, 0, -cos(45*PI/180)*2.9);
if(bWireFrame)
ball3.DrawWireframe();
else
ball3.DrawColor();
glPopMatrix();
}
void drawBall4()
{
glPushMatrix();
glRotated(ball4upper, 0, 1, 0);
glTranslated(ball4.slideX, ball4.slideY, ball4.slideZ);
glTranslated(-cos(45*PI/180)*2.9, 0, cos(45*PI/180)*2.9);
glRotated(ball4hand, 0, 1, 0);
glTranslated(cos(45*PI/180)*2.9, 0, -cos(45*PI/180)*2.9);
if(bWireFrame)
ball4.DrawWireframe();
else
ball4.DrawColor();
glPopMatrix();
}
void drawCuboidBase()
{
glPushMatrix();
//////////////////////////////////
glTranslated(0, cuboidBase.slideY, 0);
if(bWireFrame)
cuboidBase.DrawWireframe();
else
cuboidBase.DrawColor();
glPopMatrix();
}
void drawCylBase1()
{
glPushMatrix();
//////////////////////////////////
glTranslated(0, cylBase1.slideY, 0);
if(bWireFrame)
cylBase1.DrawWireframe();
else
cylBase1.DrawColor();
glPopMatrix();
}
void drawCylBase2()
{
glPushMatrix();
//////////////////////////////////
glTranslated(0, cylBase2.slideY, 0);
if(bWireFrame)
cylBase2.DrawWireframe();
else
cylBase2.DrawColor();
glPopMatrix();
}
///////////////////////////////////////////////////////////////////////
void drawUpperArm1()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, upperArm1.slideY, 0);
if(bWireFrame)
upperArm1.DrawWireframe();
else
upperArm1.DrawColor();
glPopMatrix();
}
void drawUpperArm2()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, upperArm2.slideY, upperArm2.slideZ);
if(bWireFrame)
upperArm2.DrawWireframe();
else
upperArm2.DrawColor();
glPopMatrix();
}
void drawUpperArm3()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, upperArm3.slideY, upperArm3.slideZ);
if(bWireFrame)
upperArm3.DrawWireframe();
else
upperArm3.DrawColor();
glPopMatrix();
}
void drawUpperArm4()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, upperArm4.slideY, upperArm4.slideZ);
if(bWireFrame)
upperArm4.DrawWireframe();
else
upperArm4.DrawColor();
glPopMatrix();
}
///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////
/////////////// THE FORE ARM ///////////////////
////////////////////////////////////////////////
void drawforeArm1()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, foreArm1.slideY, foreArm1.slideZ);
if(bWireFrame)
foreArm1.DrawWireframe();
else
foreArm1.DrawColor();
glPopMatrix();
}
void drawforeArm2()
{
glPushMatrix();
//glTranslated(foreArm2.slideX, foreArm2.slideY - 2.5, foreArm2.slideZ);
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, foreArm2.slideY, foreArm2.slideZ);
glTranslated(0, -foreArm2.slideY, -(foreArm2.slideZ - 1.6));
glRotated(foreArmRotateY, 0, 1, 0);
glTranslated(0, foreArm2.slideY, (foreArm2.slideZ - 1.6));
if(bWireFrame)
foreArm2.DrawWireframe();
else
foreArm2.DrawColor();
glPopMatrix();
}
void drawforeArm3()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, foreArm3.slideY, foreArm3.slideZ);
glTranslated(0, -foreArm3.slideY, -(foreArm3.slideZ - 1.6));
glRotated(foreArmRotateY, 0, 1, 0);
glTranslated(0, foreArm3.slideY, (foreArm3.slideZ - 1.6));
if(bWireFrame)
foreArm3.DrawWireframe();
else
foreArm3.DrawColor();
glPopMatrix();
}
void drawforeArm4()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, foreArm4.slideY, foreArm4.slideZ);
glTranslated(0, -foreArm4.slideY, -(foreArm4.slideZ - 1.6));
glRotated(foreArmRotateY, 0, 1, 0);
glTranslated(0, foreArm4.slideY, (foreArm4.slideZ - 1.6));
if(bWireFrame)
foreArm4.DrawWireframe();
else
foreArm4.DrawColor();
glPopMatrix();
}
void drawHand()
{
glPushMatrix();
glRotated(upperArmRotateY, 0, 1, 0);
//////////////////////////////////
glTranslated(0, Hand.slideY, Hand.slideZ);
glTranslated(0, -Hand.slideY, -(Hand.slideZ - 1.6));
glRotated(foreArmRotateY, 0, 1, 0);
glTranslated(0, Hand.slideY, (Hand.slideZ - 1.6));
glTranslated(0, move, 0);
if(bWireFrame)
Hand.DrawWireframe();
else
Hand.DrawColor();
glPopMatrix();
}
void drawHand1()
{
glPushMatrix();
if(move >= -0.11 && move <= -0.09)
{
//cout< : to rotate camera counterclockwise." << endl;
glutInit(&argc, argv); //initialize the tool kit
glutInitDisplayMode(GLUT_DOUBLE |GLUT_RGB);//set the display mode
glutInitWindowSize(screenWidth, screenHeight); //set window size
glutInitWindowPosition(100, 100); // set window position on screen
glutCreateWindow("Lab4"); // open the screen window
///////////////////////////////////////////////////////////////
// The Floor
planeY.CreateYPlane(10, 10, 1, 1);
planeY.slideX = 4.5;
planeY.slideY = YPlanePos;
planeY.slideZ = 4.5;
planeY.SetColor(15);
planeY2.CreateYPlane(10, 10, 1, 1);
planeY2.slideX = 3.5;
planeY2.slideY = YPlanePos;
planeY2.slideZ = 3.5;
planeY2.SetColor(15);
///////////////////////////////////////////////////////////////
// 4 balls
ball1.CreateSphere(50, 20, ballRadius);
ball1.slideX = 3;
ball1.slideY = YPlanePos + ballRadius;
ball1.slideZ = 3;
ball1.SetColor(1);
ball2.CreateSphere(50, 20, ballRadius);
ball2.slideX = -3;
ball2.slideY = YPlanePos + ballRadius;
ball2.slideZ = 3;
ball2.SetColor(2);
ball3.CreateSphere(50, 20, ballRadius);
ball3.slideX = -3;
ball3.slideY = YPlanePos + ballRadius;
ball3.slideZ = -3;
ball3.SetColor(3);
ball4.CreateSphere(50, 20, ballRadius);
ball4.slideX = 3;
ball4.slideY = YPlanePos + ballRadius;
ball4.slideZ = -3;
ball4.SetColor(4);
///////////////////////////////////////////////////////////////
// The Body
cuboidBase.CreateCuboid(cuboidBaseSizeXZ/2.0, cuboidBaseSizeY/2.0, cuboidBaseSizeXZ/2.0);
cuboidBase.slideY = YPlanePos + cuboidBaseSizeY/2.0;
cuboidBase.SetColor(0);
cylBase1.CreateCylinder(20, cylBase1Height, cylBase1Radius);
cylBase1.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2;
cylBase1.SetColor(1);
cylBase2.CreateCylinder(20, cylBase2Height, cylBase2Radius);
cylBase2.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2 + cylBase2Height/2 ;
cylBase2.SetColor(2);
///////////////////////////////////////////////////
// The Upper Arm
upperArm1.CreateCylinder(20, upperArm1Height, upperArm1ORadius);
upperArm1.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2 + cylBase2Height - upperArm1Offset;
upperArm1.SetColor(5);
upperArm2.CreateCuboid(upperArm2SizeX, upperArm2SizeY, upperArm2SizeZ);
upperArm2.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2 + cylBase2Height - upperArm1Offset;
upperArm2.slideZ = upperArm2SizeZ + upperArm1IRadius;
upperArm2.SetColor(6);
upperArm3.CreateCylinder(20, upperArm3Height, upperArm3Radius);
upperArm3.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2 + cylBase2Height - upperArm1Offset;
upperArm3.slideZ = upperArm2.slideZ + upperArm2SizeZ ;
upperArm3.SetColor(5);
upperArm4.CreateCylinder(20, upperArm4Height, upperArm4Radius);
upperArm4.slideY = YPlanePos + cuboidBaseSizeY/2.0 + cylBase1Height/2 + cylBase2Height - upperArm1Offset +
upperArm4Height/2 + upperArm3Height/2;
upperArm4.slideZ = upperArm3.slideZ;
upperArm4.SetColor(2);
///////////////////////////////////////////////////
// The Fore Arm
foreArm1.CreateCylinder(20, foreArm1Height, foreArm1ORadius);
foreArm1.slideY = upperArm3.slideY + upperArm4Height/2 + upperArm1Height/4;
foreArm1.slideZ = upperArm4.slideZ;
foreArm1.SetColor(3);
foreArm2.CreateCuboid(foreArm2SizeX, foreArm2SizeY, foreArm2SizeZ);
foreArm2.slideY = foreArm1.slideY;
foreArm2.slideZ = foreArm1.slideZ + foreArm1IRadius/2 + foreArm2SizeZ;
foreArm2.SetColor(4);
foreArm3.CreateCylinder(20, foreArm3Height, foreArm3Radius);
foreArm3.slideY = foreArm2.slideY;
foreArm3.slideZ = foreArm2.slideZ + foreArm2SizeZ;
foreArm3.SetColor(5);
foreArm4.CreateCylinder(20, foreArm4Height, foreArm4Radius);
foreArm4.slideY = foreArm3.slideY + 0.2;
foreArm4.slideZ = foreArm3.slideZ;
foreArm4.SetColor(0);
///////////////////////////////////////////////////
// The Hand
Hand.CreateCylinder(20, 3.5, 0.08);
Hand.slideY = foreArm4.slideY;
Hand.slideZ = foreArm4.slideZ;
Hand.SetColor(1);
Hand1.CreateCylinder(20, 0.2, 0.4);
Hand1.slideY = foreArm4.slideY - 3.5/2;
Hand1.slideZ = foreArm4.slideZ;
Hand1.SetColor(7);
/////////////////////////////////////////////////////////
myInit();
glutKeyboardFunc(myKeyboard);
glutDisplayFunc(myDisplay);
glutSpecialFunc(mySpecialKeyboard);
glutMainLoop();
return 0;
}
Computer
Opinions expressed by DZone contributors are their own.
Comments