示例#1
0
/*	void drawSide(const GLfloatx[],const GLfloaty[],const GLfloatz[], int size, const std::string side,  const GLfloatw=0) {
	This function takes the coordinates that was declared at
	the beginning of the program and puts the points on the canvas
	This only draws the sides of the object (left and right)
*/
void Model::drawSide(const GLfloat x[],const GLfloat y[],const GLfloat z[],int start, int size, const std::string side,  const GLfloat w) {
	if (side == "nRight")
		for (int i=size-1; i>start;i--)	{
			glPushMatrix();
				glBegin(GL_QUADS);
				createNormal(x[start -1]			,y[start -1]	,w,
							x[i]			,y[i]	,w,
							x[i-1]			,y[i-1]	,w);
				glVertex3f(x[start -1]			,y[start -1]	,w);
				glVertex3f(x[i]			,y[i]	,w);
				glVertex3f(x[i-1]			,y[i-1]	,w);
				glVertex3f(x[i-2]			,y[i-2]	,w);

				glEnd();
			glPopMatrix();
		}
	else if (side == "nLeft")	
		for (int i=start; i<size;++i){
			glPushMatrix();
				createNormal(x[start -1]			,y[start -1]	,w,
							 x[i]			,y[i]	,w,
							 x[(i+1)%size]			,y[(i+1)%size]	,w);
				glEnd();
				glBegin(GL_QUADS);
				glVertex3f(x[start -1]			,y[start -1]	,w);
				glVertex3f(x[i]			,y[i]	,w);
				glVertex3f(x[(i+1)%size]			,y[(i+1)%size]	,w);
				glVertex3f(x[(i+2)%size]			,y[(i+2)%size]	,w);
			glPopMatrix();
			}
}
示例#2
0
/* now with normals! */
void drawHead( void )
{
	int theta;
	GLfloat r = 6.0;	/* we use 6 as the default radius, and multiply it for smaller/larger */

	/* the very top portion is like a cone...	*/
	glBegin( GL_TRIANGLE_FAN );
		glVertex3f( 0.0, 48.0, 0.0 );	/* top of the head */

		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( 0.0, 48.0, 0.0,
				r*cos(toRadian(theta)), 45.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta + DELTA_THETA)), 45.0, r*sin(toRadian(theta + DELTA_THETA)) );
			
				glVertex3f( r*cos(toRadian(theta)), 45.0, r*sin(toRadian(theta)) );
		}
	glEnd( );

	/* the next portion is like a cylindar going down from that... */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta)), 45.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta))*1.3, 38.0, r*sin(toRadian(theta))*1.3,
				r*cos(toRadian(theta + DELTA_THETA)), 45.0, r*sin(toRadian(theta + DELTA_THETA)) );
                                

			glVertex3f( r*cos(toRadian(theta)), 45.0, r*sin(toRadian(theta)) );
			glVertex3f( r*cos(toRadian(theta))*1.3, 38.0, r*sin(toRadian(theta))*1.3 );
		}
	glEnd( );

	/* the next portion is like another cylindar, but with different slope... */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*1.3, 38.0, r*sin(toRadian(theta))*1.3,
				 r*cos(toRadian(theta))*1.3, 33.0, r*sin(toRadian(theta))*1.3,
				 r*cos(toRadian(theta + DELTA_THETA))*1.3, 38.0, r*sin(toRadian(theta + DELTA_THETA))*1.3 );

			glVertex3f( r*cos(toRadian(theta))*1.3, 38.0, r*sin(toRadian(theta))*1.3 );
			glVertex3f( r*cos(toRadian(theta))*1.3, 33.0, r*sin(toRadian(theta))*1.3 );
		}
	glEnd( );

	/* yet another cylinder like thing */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*1.3, 33.0, r*sin(toRadian(theta))*1.3,
				r*cos(toRadian(theta)), 26.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta + DELTA_THETA))*1.3, 33.0, r*sin(toRadian(theta + DELTA_THETA))*1.3 );

			glVertex3f( r*cos(toRadian(theta))*1.3, 33.0, r*sin(toRadian(theta))*1.3 );
			glVertex3f( r*cos(toRadian(theta)), 26.0, r*sin(toRadian(theta)) );
		}
	glEnd( );
}
示例#3
0
void Model::drawCenterEngine(GLfloat w) {
	glPushMatrix();
		createNormal(engine[0][2]		,engine[1][2]	,engine[2][2] + w,
			engine[0][2]		,engine[1][2]	,-engine[2][2],
			engine[0][3]		,engine[1][3]	,engine[2][3]);
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(engine[0][2]		,engine[1][2]	,engine[2][2] + w);
		glTexCoord2f(0, 1);
			glVertex3d(engine[0][2]		,engine[1][2]	,-engine[2][2]);
		glTexCoord2f(1, 1);
			glVertex3d(engine[0][3]		,engine[1][3]	,engine[2][3]);
		glTexCoord2f(1, 0);
			glVertex3d(engine[0][3]		,engine[1][3]	,engine[2][3] + w);
		glEnd();
	glPopMatrix();

	glPushMatrix();
		createNormal(engine[0][1]		,engine[1][1]	,engine[2][1] + w,
			engine[0][1]		,engine[1][1]	,-engine[2][1],
			engine[0][2]		,engine[1][2]	,-engine[2][2]);
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(engine[0][1]		,engine[1][1]	,engine[2][1] + w);
		glTexCoord2f(0, 1);
			glVertex3d(engine[0][1]		,engine[1][1]	,-engine[2][1]);
		glTexCoord2f(1, 1);
			glVertex3d(engine[0][2]		,engine[1][2]	,-engine[2][2]);
		glTexCoord2f(1, 0);
			glVertex3d(engine[0][2]		,engine[1][2]	,engine[2][2] + w);
		glEnd();
	glPopMatrix();

	glPushMatrix();
		createNormal(engine[0][0]		,engine[1][0]	,-engine[2][0],
			engine[0][0]		,engine[1][0]	,engine[2][0] + w,
			engine[0][3]		,engine[1][3]	,engine[2][3] + w);
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(engine[0][0]		,engine[1][0]	,-engine[2][0]);
		glTexCoord2f(0, 1);
			glVertex3d(engine[0][0]		,engine[1][0]	,engine[2][0] + w);
		glTexCoord2f(1, 1);
			glVertex3d(engine[0][3]		,engine[1][3]	,engine[2][3] + w);
		glTexCoord2f(1, 0);
			glVertex3d(engine[0][3]		,engine[1][3]	,-engine[2][3]);
		glEnd();
	glPopMatrix();
}
示例#4
0
cppbugs::MCMCObject* createMCMC(SEXP x_, vpArmaMapT& armaMap) {
    SEXP distributed_sexp;
    distributed_sexp = Rf_getAttrib(x_,Rf_install("distributed"));
    SEXP class_sexp = Rf_getAttrib(x_,R_ClassSymbol);
    if(class_sexp == R_NilValue || TYPEOF(class_sexp) != STRSXP || CHAR(STRING_ELT(class_sexp,0))==NULL || strcmp(CHAR(STRING_ELT(class_sexp,0)),"mcmc.object"))  {
        throw std::logic_error("ERROR: class attribute not defined or not equal to 'mcmc.object'.");
    }

    if(distributed_sexp == R_NilValue) {
        throw std::logic_error("ERROR: 'distributed' attribute not defined. Is this an mcmc.object?");
    }

    if(armaMap.count(rawAddress(x_))==0) {
        throw std::logic_error("ArmaContext not found (object should be mapped before call to createMCMC).");
    }

    distT distributed = matchDistibution(std::string(CHAR(STRING_ELT(distributed_sexp,0))));
    cppbugs::MCMCObject* ans;

    switch(distributed) {
    // deterministic types
    case deterministicT:
        ans = createDeterministic(x_,armaMap);
        break;
    case linearDeterministicT:
        ans = createLinearDeterministic(x_,armaMap);
        break;
    case linearGroupedDeterministicT:
        ans = createLinearGroupedDeterministic(x_,armaMap);
        break;
    case logisticDeterministicT:
        ans = createLogisticDeterministic(x_,armaMap);
        break;
    // continuous types
    case normalDistT:
        ans = createNormal(x_,armaMap);
        break;
    case uniformDistT:
        ans = createUniform(x_,armaMap);
        break;
    case gammaDistT:
        ans = createGamma(x_,armaMap);
        break;
    case betaDistT:
        ans = createBeta(x_,armaMap);
        break;
    // discrete types
    case bernoulliDistT:
        ans = createBernoulli(x_,armaMap);
        break;
    case binomialDistT:
        ans = createBinomial(x_,armaMap);
        break;
    default:
        // not implemented
        ans = NULL;
        throw std::logic_error("ERROR: distribution not supported yet.");
    }
    return ans;
}
示例#5
0
TGLFunWidget::TGLFunWidget(TMesh* m,TResultList* r, unsigned i,unsigned j,QString exp,QWidget *parent) : TGLWidget(parent)
{
    mesh = m;
    results = r;
    funIndex = i;
    deltaIndex = j;
    expression = exp;

    isIdle =
    isRotate = true;
    isScale =
    isTranslate = false;

    minX = *min_element(mesh->getX().begin(),mesh->getX().end());
    maxX = *max_element(mesh->getX().begin(),mesh->getX().end());
    minY = (mesh->getY().size()) ? *min_element(mesh->getY().begin(),mesh->getY().end()) : 0;
    maxY = (mesh->getY().size()) ? *max_element(mesh->getY().begin(),mesh->getY().end()) : 0;
    minZ = (mesh->getZ().size()) ? *min_element(mesh->getZ().begin(),mesh->getZ().end()) : 0;
    maxZ = (mesh->getZ().size()) ? *max_element(mesh->getZ().begin(),mesh->getZ().end()) : 0;
    radius = sqrt((maxX - minX)*(maxX - minX) + (maxY - minY)*(maxY - minY)  + (maxZ - minZ)*(maxZ - minZ));

//    initColorTable();
    if (mesh->getZ().size())
        createNormal();

    setContextMenuPolicy(Qt::CustomContextMenu);
    action1 = new QAction(tr("&Condition on nodes selection..."), this);
    action2 = new QAction(tr("&Save image..."), this);
    menu.addAction(action1);
    menu.addAction(action2);
    connect(this, SIGNAL(customContextMenuRequested(QPoint)),this, SLOT(showContextMenu(QPoint)));
}
示例#6
0
void Model::drawCenterfold(GLfloat w) {
			glPushMatrix();
			createNormal(mainBody[0][8]		,mainBody[1][8]	,w,
				mainBody[0][8]		,mainBody[1][8]	,0,
				mainBody[0][9]		,mainBody[1][9]	,w);
			glBegin(GL_QUADS);
				glTexCoord2f(0, 0);
					glVertex3d(mainBody[0][8]		,mainBody[1][8]	,w);
				glTexCoord2f(0, 1);
					glVertex3d(mainBody[0][9]		,mainBody[1][9]	,w);
				glTexCoord2f(1, 1);
					glVertex3d(mainBody[0][9]		,mainBody[1][9]	,0);
				glTexCoord2f(1, 0);
					glVertex3d(mainBody[0][8]		,mainBody[1][8]	,0);
				glEnd();
			glPopMatrix();
			glPushMatrix();
			createNormal(mainBody[0][9]		,mainBody[1][9]	,w,
				mainBody[0][9]		,mainBody[1][9]	,0,
				mainBody[0][10]		,mainBody[1][10]	,w);
			glBegin(GL_QUADS);
				glTexCoord2f(0, 0);
					glVertex3d(mainBody[0][9]		,mainBody[1][9]	,w);
				glTexCoord2f(0, 1);
					glVertex3d(mainBody[0][10]		,mainBody[1][10]	,w);
				glTexCoord2f(1, 1);
					glVertex3d(mainBody[0][10]		,mainBody[1][10]	,0);
				glTexCoord2f(1, 0);
					glVertex3d(mainBody[0][9]		,mainBody[1][9]	,0);
				glEnd();
			glPopMatrix();
			glPushMatrix();
			createNormal(mainBody[0][10]		,mainBody[1][10]	,w,
				mainBody[0][10]		,mainBody[1][10]	,0,
				mainBody[0][0]		,mainBody[1][0]	,w);
			glBegin(GL_QUADS);
				glTexCoord2f(0, 0);
					glVertex3d(mainBody[0][10]		,mainBody[1][10]	,w);
				glTexCoord2f(0, 1);
					glVertex3d(mainBody[0][0]		,mainBody[1][0]	,w);
				glTexCoord2f(1, 1);
					glVertex3d(mainBody[0][0]		,mainBody[1][0]	,0);
				glTexCoord2f(1, 0);
					glVertex3d(mainBody[0][10]		,mainBody[1][10]	,0);
				glEnd();
			glPopMatrix();
}
示例#7
0
void Model::drawCenterFoldTailConnect(GLfloat w) {
	glPushMatrix();
	createNormal(tailConnect[0][3]		,tailConnect[1][3]	,tailConnect[2][3] + w,
		tailConnect[0][3]		,tailConnect[1][3]	,tailConnect[2][3] + w-w/10,
		tailConnect[0][4]		,tailConnect[1][4]	,tailConnect[2][4]);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(tailConnect[0][3]		,tailConnect[1][3]	,tailConnect[2][3] + w);
		glTexCoord2f(0, 1);
			glVertex3d(tailConnect[0][3]		,tailConnect[1][3]	,tailConnect[2][3] + w-w/10);
		glTexCoord2f(1, 1);
			glVertex3d(tailConnect[0][4]		,tailConnect[1][4]	,tailConnect[2][4]);
		glTexCoord2f(1, 0);
			glVertex3d(tailConnect[0][4]		,tailConnect[1][4]	,tailConnect[2][4] + w);
		glEnd();
	glPopMatrix();
	glPushMatrix();
		createNormal(tailConnect[0][0]		,tailConnect[1][0]	,tailConnect[2][0] + w,
			tailConnect[0][0]		,tailConnect[1][0]	,tailConnect[2][0],
			tailConnect[0][1]		,tailConnect[1][1]	,tailConnect[2][1]+w-w/10);
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(tailConnect[0][0]		,tailConnect[1][0]	,tailConnect[2][0] + w);
		glTexCoord2f(0, 1);
			glVertex3d(tailConnect[0][0]		,tailConnect[1][0]	,tailConnect[2][0]);
		glTexCoord2f(1, 1);
			glVertex3d(tailConnect[0][1]		,tailConnect[1][1]	,tailConnect[2][1]+w-w/10);
		glTexCoord2f(1, 0);
			glVertex3d(tailConnect[0][1]		,tailConnect[1][1]	,tailConnect[2][1] + w);
		glEnd();
	glPopMatrix();
	glPushMatrix();
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(tailConnect[0][1]		,tailConnect[1][1]	,tailConnect[2][1]+w-w/10);
		glTexCoord2f(0, 1);
			glVertex3d(tailConnect[0][1]		,tailConnect[1][1]	,tailConnect[2][1] + w);
		glTexCoord2f(1, 1);
			glVertex3d(tailConnect[0][2]		,tailConnect[1][2]	,tailConnect[2][2] + w);
		glTexCoord2f(1, 0);
			glVertex3d(tailConnect[0][2]		,tailConnect[1][2]	,tailConnect[2][2]+w-w/10);
		glEnd();
	glPopMatrix();

}
示例#8
0
void Model::drawTriangle(const GLfloat x[],const GLfloat y[],const GLfloat z[], int a, int b, int c, GLfloat w){
	glPushMatrix();
	setType();
		createNormal(x[a]		,y[a]	,z[a] + w,
					 x[b]		,y[b]	,z[b] + w,
					 x[c]		,y[c]	,z[c] + w);
		glVertex3d(x[a]		,y[a]	,z[a] + w);
		glVertex3d(x[b]		,y[b]	,z[b] + w);
		glVertex3d(x[c]		,y[c]	,z[c] + w);
	glEnd();
	glPopMatrix();
}
示例#9
0
void Model::drawTriangle(const GLfloat x[],const GLfloat y[], int a, int b, int c, int d, GLfloat w){
	glPushMatrix();
		createNormal(x[a]		,y[a]	,w,
					 x[b]		,y[b]	,w,
					 x[c]		,y[c]	,w);
		glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
			glVertex3d(x[a]		,y[a]	,w);
		glTexCoord2f(0, 1);
			glVertex3d(x[b]		,y[b]	,w);
		glTexCoord2f(1, 1);
			glVertex3d(x[c]		,y[c]	,w);
		glTexCoord2f(1, 0);
			glVertex3d(x[d]		,y[d]	,w);
		glEnd();
	glPopMatrix();
}
示例#10
0
/*	void drawCenterfold(const GLfloat x[],const GLfloat y[], const int size, const GLfloat w)
	This function creates the horizontal lines showing the front and back
	of the object.
	Only used when the lines of the object are parallel of each other
*/
void Model::drawCenterfold(const GLfloat x[],const GLfloat y[], const int size, const GLfloat w) {

	
	for (int i=0;i<size;++i) {
			glPushMatrix();
			createNormal(x[i]		,y[i]	,w,
				x[i]		,y[i]	,0,
				x[i+1]		,y[i+1]	,w);
			glBegin(GL_QUADS);
				glTexCoord2f(0, 0);
					glVertex3d(x[i]			,y[i]	,w);
				glTexCoord2f(0, 1);
					glVertex3d(x[i+1]		,y[i+1]	,w);
				glTexCoord2f(1, 1);
					glVertex3d(x[i+1]		,y[i+1]	,0);
				glTexCoord2f(1, 0);
					glVertex3d(x[i]			,y[i]	,0);
				glEnd();
			glPopMatrix();
		}
}
示例#11
0
void GLWidget::setTRPObject(TFEObject* ptr)
{
    pObj = ptr;
    if (pObj == 0)
    {
        initializeGL();
        return;
    }
    xRot =
    yRot =
    zRot = 0;
    minX =
    maxX =
    minY =
    maxY =
    minZ =
    maxZ =
    radius = 0;
    if (pObj->GetX().Size())
    {
        minX = pObj->GetX().Min();
        maxX = pObj->GetX().Max();
    }
    if (pObj->GetY().Size())
    {
       minY = pObj->GetY().Min();
       maxY = pObj->GetY().Max();
    }
    if (pObj->GetZ().Size())
    {
        minZ = pObj->GetZ().Min();
        maxZ = pObj->GetZ().Max();
    }
    radius = sqrt((maxX - minX) * (maxX - minX) + (maxY - minY) * (maxY - minY)  + (maxZ - minZ) * (maxZ - minZ));
    setupCameraGL();
    if (pObj->GetZ().Size()) createNormal();
    isBuild = false;
    repaint();
}
示例#12
0
void drawRightBuildings(int i) {
	i = i%NUM_BUILDINGS;
	float l1 = wb1[i] / (d/2) - (d/2);
	// Building
	glBindTexture(GL_TEXTURE_2D, _btextureId[randText1[i]]);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glColor4f(1.0f, 1.0f, 1.0f,0.6);

	glPushMatrix();
	glTranslatef(25,-50,0);
		glBegin(GL_TRIANGLES);
		for (int j=0; j < l1; ++++++j)
			for (int k=0; k <hb1[i]; ++++++k) {
					createNormal(	0,k,j,
									0,k,j+3,
									0,k+1,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k,j,
									0,k+1,j+3,
									0,k+1,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
			}
			for (int j=l1; j < l1 + d; ++++++j)
				for (int k=5; k <hb1[i]; ++++++k) {
					createNormal(	0,k,j,
									0,k,j+3,
									0,k+3,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k,j,
									0,k+3,j+3,
									0,k+3,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
				}
			for (int j=l1 + d; j < wb1[i]; ++++++j)
				for (int k=0; k <hb1[i]; ++++++k) {
					createNormal(	0,k,j,
									0,k,j+3,
									0,k+3,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k,j,
									0,k+3,j+3,
									0,k+3,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
				}
			glEnd();
//		glPopMatrix();
		glBegin(GL_QUADS);
			glTexCoord2f(0, 0);
//			glVertex3f(0,0,l1);
				glTexCoord2f(0, 1);
//			glVertex3f(0,0,l1 + d);
				glTexCoord2f(1, 1);
//			glVertex3f(0,05,l1 + d);
				glTexCoord2f(1, 0);
//			glVertex3f(0,05,l1);
		glEnd();
	glPopMatrix();
}
示例#13
0
/* now with normals! */
void drawBody( void )
{
	int theta;
	GLfloat r = 6.0;

	/* this quad strip connects the head with the body some... */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta)), 26.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta))*2, 24.0, r*sin(toRadian(theta))*2,
				r*cos(toRadian(theta + DELTA_THETA)), 26.0, r*sin(toRadian(theta + DELTA_THETA)) );

			glVertex3f( r*cos(toRadian(theta)), 26.0, r*sin(toRadian(theta))  );
			glVertex3f( r*cos(toRadian(theta))*2, 24.0, r*sin(toRadian(theta))*2 );
		}
	glEnd( );

	/* this quad strip extends the body out some more... */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*2, 24.0, r*sin(toRadian(theta))*2,
				r*cos(toRadian(theta))*2.5, 20.0, r*sin(toRadian(theta))*2.5,
				r*cos(toRadian(theta + DELTA_THETA))*2, 24.0, r*sin(toRadian(theta + DELTA_THETA))*2 );

			glVertex3f( r*cos(toRadian(theta))*2, 24.0, r*sin(toRadian(theta))*2  );
			glVertex3f( r*cos(toRadian(theta))*2.5, 20.0, r*sin(toRadian(theta))*2.5 );
		}
	glEnd( );

	/* this quad strip extends is much longer, making up much of the torso */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*2.5, 20.0, r*sin(toRadian(theta))*2.5,
				r*cos(toRadian(theta))*2.8, 5.0, r*sin(toRadian(theta))*2.8,
				r*cos(toRadian(theta + DELTA_THETA))*2.5, 20.0, r*sin(toRadian(theta + DELTA_THETA))*2.5 );

			glVertex3f( r*cos(toRadian(theta))*2.5, 20.0, r*sin(toRadian(theta))*2.5 );
			glVertex3f( r*cos(toRadian(theta))*2.8, 5.0, r*sin(toRadian(theta))*2.8 );
		}
	glEnd( );

	/* this quad strip begins the taper back in */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*2.8, 5.0, r*sin(toRadian(theta))*2.8,
				r*cos(toRadian(theta))*2.5, -10.0, r*sin(toRadian(theta))*2.5,
				r*cos(toRadian(theta + DELTA_THETA))*2.8, 5.0, r*sin(toRadian(theta + DELTA_THETA))*2.8 );

			glVertex3f( r*cos(toRadian(theta))*2.8, 5.0, r*sin(toRadian(theta))*2.8 );
			glVertex3f( r*cos(toRadian(theta))*2.5, -10.0, r*sin(toRadian(theta))*2.5 );
		}
	glEnd( );

	/* this quad strip slopes the body in even further */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*2.5, -10.0, r*sin(toRadian(theta))*2.5,
				r*cos(toRadian(theta))*1.9, -18.0, r*sin(toRadian(theta))*1.9,
				r*cos(toRadian(theta + DELTA_THETA))*2.5, -10.0, r*sin(toRadian(theta + DELTA_THETA))*2.5 );

			glVertex3f( r*cos(toRadian(theta))*2.5, -10.0, r*sin(toRadian(theta))*2.5 );
			glVertex3f( r*cos(toRadian(theta))*1.9, -18.0, r*sin(toRadian(theta))*1.9 );
		}
	glEnd( );

	/* this quad strip almost closes the body */
	glBegin( GL_QUAD_STRIP );
		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( r*cos(toRadian(theta))*1.9, -18.0, r*sin(toRadian(theta))*1.9,
				r*cos(toRadian(theta)), -20.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta + DELTA_THETA))*1.9, -18.0, r*sin(toRadian(theta + DELTA_THETA))*1.9 );

			glVertex3f( r*cos(toRadian(theta))*1.9, -18.0, r*sin(toRadian(theta))*1.9 );
			glVertex3f( r*cos(toRadian(theta)), -20.0, r*sin(toRadian(theta)) );
		}
	glEnd( );

	/* this triangle fan closes the penguin at the bottom (it is a circle) */
	glBegin( GL_TRIANGLE_FAN );
		glVertex3f( 0.0, -20.0, 0.0 );	/* bottom of the penguin */

		for( theta=0; theta<=360; theta+=DELTA_THETA )
		{
			createNormal( 0.0, -20.0, 0.0,
				r*cos(toRadian(theta)), -20.0, r*sin(toRadian(theta)),
				r*cos(toRadian(theta + DELTA_THETA)), -20.0, r*sin(toRadian(theta + DELTA_THETA)) );

			glVertex3f( r*cos(toRadian(theta)), -20.0, r*sin(toRadian(theta)) );
		}
	glEnd( );
}
示例#14
0
/* now with normals! */
void drawBeak( void )
{
    /* we must calculate where the beak is based on
       what the value of DELTA_THETA is so that
       the penguin remains a properly connected entity
       the downside is that his beak size changes based on this */

	GLfloat theta1 = toRadian( 270 - DELTA_THETA );
	GLfloat theta2 = toRadian( 270 + DELTA_THETA );
	GLfloat r = 6.0;

	/* now we calculate the four corners based on these angles */
	GLfloat up_left_x = r*cos( theta1 )*1.3;
	GLfloat up_left_y = 38.0;
	GLfloat up_left_z = r*sin( theta1 )*1.3;

	GLfloat down_left_x = r*cos( theta1 )*1.3;
	GLfloat down_left_y = 33.0;
	GLfloat down_left_z = r*sin( theta1 )*1.3;


	GLfloat up_right_x = r*cos( theta2 )*1.3;
	GLfloat up_right_y = 38.0;
	GLfloat up_right_z = r*sin( theta2)*1.3;

	GLfloat down_right_x = r*cos( theta2 )*1.3;
	GLfloat down_right_y = 33.0;
	GLfloat down_right_z = r*sin( theta2 )*1.3;
	
	
	/* We draw the beak as a pyramid with a triangle fan... */
	glBegin( GL_TRIANGLE_FAN );
		/* the point of the beak... */
		glVertex3f( 0.0, 35.5, -30.0 );
		
		/* other points... */

		createNormal( 0.0, 35.5, -30.0,
			up_right_x, up_right_y, up_right_z,
			up_left_x, up_left_y, up_left_z );
		glVertex3f( up_right_x, up_right_y, up_right_z );
		glVertex3f( up_left_x, up_left_y, up_left_z );
		
		createNormal( 0.0, 35.5, -30.0,
			up_left_x, up_left_y, up_left_z,
			down_left_x, down_left_y, down_left_z );
		glVertex3f( down_left_x, down_left_y, down_left_z );
		

		createNormal( 0.0, 35.5, -30.0,
			down_left_x, down_left_y, down_left_z,
			down_right_x, down_right_y, down_right_z );
		glVertex3f( down_right_x, down_right_y, down_right_z );
		

		createNormal( 0.0, 35.5, -30.0,
			down_right_x, down_right_y, down_right_z,
			up_right_x, up_right_y, up_right_z );
		glVertex3f( up_right_x, up_right_y, up_right_z );
	glEnd( );
}
示例#15
0
/* now with normals! */
void drawLeftWing( void )
{
	/* first we must find the points to connect the wing to 
	(just like we did for the beak ) */

	GLfloat theta1 = toRadian( 180 - DELTA_THETA );
	GLfloat theta2 = toRadian( 180 + DELTA_THETA );
	GLfloat r = 6.0;

	/* now we calculate the four corners where the wing should connect to */
	GLfloat up_left_x = r*cos( theta1 )*2.5;
	GLfloat up_left_y = 20.0;
	GLfloat up_left_z = -r*sin( theta1 )*2.5;

	GLfloat down_left_x = r*cos( theta1 )*2.8;
	GLfloat down_left_y = 5.0;
	GLfloat down_left_z = -r*sin( theta1 )*2.8;


	GLfloat up_right_x = r*cos( theta2 )*2.5;
	GLfloat up_right_y = 20.0;
	GLfloat up_right_z = -r*sin( theta2)*2.5;

	GLfloat down_right_x = r*cos( theta2 )*2.8;
	GLfloat down_right_y = 5.0;
	GLfloat down_right_z = -r*sin( theta2 )*2.8;


	/* We must perform the rotation here */
	/* We must first translate the wing so that it goes about the joint correctly */
	glPushMatrix( );
	glTranslatef( up_left_x, (up_left_y + down_left_y) / 2.0, (up_left_z + up_right_z) / 2.0 );
	glRotatef( wing_flap_amount, 0.0, 0.0, 1.0 );
	glTranslatef( -up_left_x, (up_left_y + down_left_y) / -2.0, (up_left_z + up_right_z) / -2.0 );

	/* we render the wing as a few parallelograms (quad strip)
	   followed by a pyramid (triangle fan) */

	glBegin( GL_QUAD_STRIP );
		/* first quad */
		createNormal( up_left_x - 15.0, up_left_y - 25.0, up_left_z,
			down_left_x, down_left_y, down_left_z,
						up_left_x, up_left_y, up_left_z );

		glVertex3f( up_left_x, up_left_y, up_left_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25.0, up_left_z );
		glVertex3f( down_left_x, down_left_y, down_left_z );		
		glVertex3f( up_left_x - 15.0, down_left_y - 20.0, down_left_z );

		/* second */
		createNormal( up_left_x - 15.0, down_left_y - 20.0, down_left_z,
			up_left_x - 15.0, down_left_y - 20.0, down_right_z,
			down_right_x, down_right_y, down_right_z );		

		glVertex3f( down_right_x, down_right_y, down_right_z );
		glVertex3f( up_left_x - 15.0, down_left_y - 20.0, down_right_z );

		/* third */
		createNormal(  up_left_x - 15.0, down_left_y - 20.0, down_right_z,
			up_left_x - 15.0, up_left_y - 25, up_right_z,
			up_right_x, up_right_y, up_right_z );

		glVertex3f( up_right_x, up_right_y, up_right_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25, up_right_z );

		/* connect it back to the first */
		createNormal( up_left_x - 15.0, up_left_y - 25, up_right_z,
			up_left_x - 15.0, up_left_y - 25.0, up_left_z,
			up_left_x, up_left_y, up_left_z );

		glVertex3f( up_left_x, up_left_y, up_left_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25.0, up_left_z );
	glEnd( );

	glBegin( GL_TRIANGLE_FAN );
		/* the point of the wing */
		glVertex3f( down_left_x - 20.0, down_left_y - 25.0, 0.0 );

		/* the other points (same as ones above...) */
		createNormal( down_left_x - 20.0, down_left_y - 25.0, 0.0,
			up_left_x - 15.0, down_left_y - 20.0, down_left_z,
			up_left_x - 15.0, up_left_y - 25.0, up_left_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25.0, up_left_z );
		glVertex3f( up_left_x - 15.0, down_left_y - 20.0, down_left_z );

		createNormal( down_left_x - 20.0, down_left_y - 25.0, 0.0,
			up_left_x - 15.0, down_left_y - 20.0, down_left_z,
			up_left_x - 15.0, down_left_y - 20.0, down_right_z );
		glVertex3f( up_left_x - 15.0, down_left_y - 20.0, down_right_z );

		createNormal( down_left_x - 20.0, down_left_y - 25.0, 0.0,
			up_left_x - 15.0, up_left_y - 25, up_right_z,
			up_left_x - 15.0, down_left_y - 20.0, down_right_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25, up_right_z );

		createNormal( down_left_x - 20.0, down_left_y - 25.0, 0.0,
			up_left_x - 15.0, up_left_y - 25.0, up_left_z,
			up_left_x - 15.0, up_left_y - 25, up_right_z );
		glVertex3f( up_left_x - 15.0, up_left_y - 25.0, up_left_z );
	glEnd( );

	glPopMatrix( );
}
示例#16
0
/* now with normals */
void drawLeftFoot( void )
{
	/* Again, we must calculate the points to connect to the body */
	GLfloat theta1 = toRadian( 270 - 2*DELTA_THETA );
	GLfloat theta2 = toRadian( 270 - DELTA_THETA );
	GLfloat r = 6.0;

	GLfloat front_left_x = r*cos( theta1 )*1.9;
	GLfloat front_left_y = -18.0;
	GLfloat front_left_z = r*sin( theta1 )*1.9;

	GLfloat back_left_x = r*cos( theta1 );
	GLfloat back_left_y = -20.0;
	GLfloat back_left_z = r*sin( theta1 );

	
	GLfloat front_right_x = r*cos( theta2 )*1.9;
	GLfloat front_right_y = -18.0;
	GLfloat front_right_z = r*sin( theta2 )*1.9;

	GLfloat back_right_x = r*cos( theta2 );
	GLfloat back_right_y = -20.0;
	GLfloat back_right_z = r*sin( theta2 );


	/* We rotate the foot to give the illusion of walking */
	glPushMatrix( );

	/* We must translate to the joint and back so his foot pivots properly */
	glTranslatef( (front_left_x + front_right_x) /2.0, front_left_y, (front_left_z + front_right_z) / 2.0  );
	glRotatef( foot_move_amount, 1.0, 0.0, 0.0 );
	glTranslatef( (front_left_x + front_right_x) /-2.0, -front_left_y, (front_left_z + front_right_z) / -2.0  );


	/* We render a guad strip for the 'leg' part... */
	glBegin( GL_QUAD_STRIP );
		createNormal( back_left_x, back_left_y, back_left_z,
			back_left_x, back_left_y - 10.0, back_left_z,
			front_left_x, front_left_y, front_left_z );
		glVertex3f( back_left_x, back_left_y, back_left_z );
		glVertex3f( back_left_x, back_left_y - 10.0, back_left_z );
		glVertex3f( front_left_x, front_left_y, front_left_z );
		glVertex3f( front_left_x, front_left_y - 7.0, front_left_z );

		createNormal( front_right_x, front_right_y, front_right_z,
			front_left_x, front_left_y - 7.0, front_left_z,
			front_right_x, front_right_y - 7.0, front_right_z );
		glVertex3f( front_right_x, front_right_y, front_right_z );
		glVertex3f( front_right_x, front_right_y - 7.0, front_right_z );

		createNormal( back_right_x, back_right_y, back_right_z,
			front_right_x, front_right_y - 7.0, front_right_z,
			back_right_x, back_right_y - 10.0, back_right_z );
		glVertex3f( back_right_x, back_right_y, back_right_z );
		glVertex3f( back_right_x, back_right_y - 10.0, back_right_z );

		createNormal( back_left_x, back_left_y, back_left_z,
			back_right_x, back_right_y - 10.0, back_right_z,
			back_left_x, back_left_y - 10.0, back_left_z );
		glVertex3f( back_left_x, back_left_y, back_left_z );
		glVertex3f( back_left_x, back_left_y - 10.0, back_left_z );
	glEnd( );

	/* now we draw 2 triangles for the sides of his foot */
	glBegin( GL_TRIANGLES );
		/* left side */
		createNormal( front_left_x, back_left_y - 10.0, back_left_z - 20.0,
			front_left_x, front_left_y - 7.0, front_left_z,
			back_left_x, back_left_y - 10.0, back_left_z );
		glVertex3f( front_left_x, back_left_y - 10.0, back_left_z - 20.0 );
		glVertex3f( back_left_x, back_left_y - 10.0, back_left_z );
		glVertex3f( front_left_x, front_left_y - 7.0, front_left_z );

		/* right side */
		createNormal( front_right_x, back_right_y - 10.0, back_right_z - 20.0,
			back_right_x, back_right_y - 10.0, back_right_z,
			front_right_x, front_right_y - 7.0, front_right_z );
		glVertex3f( front_right_x, back_right_y - 10.0, back_right_z - 20.0 );
		glVertex3f( front_right_x, front_right_y - 7.0, front_right_z );
		glVertex3f( back_right_x, back_right_y - 10.0, back_right_z );
	glEnd( );

	/* now we draw 2 quads to fill in the gaps */
	glBegin( GL_QUADS );
		/* top of foot */
		createNormal( front_left_x, back_left_y - 10.0, back_left_z - 20.0,
			front_right_x, back_right_y - 10.0, back_right_z - 20.0,
			front_left_x, front_left_y - 7.0, front_left_z );
		glVertex3f( front_left_x, front_left_y - 7.0, front_left_z );
		glVertex3f( front_left_x, back_left_y - 10.0, back_left_z - 20.0 );
		glVertex3f( front_right_x, back_right_y - 10.0, back_right_z - 20.0 );
		glVertex3f( front_right_x, front_right_y - 7.0, front_right_z );

		/* bottom of foot */
		createNormal( back_right_x, back_right_y - 10.0, back_right_z,
			front_right_x, back_right_y - 10.0, back_right_z - 20.0,
			back_left_x, back_left_y - 10.0, back_left_z );			
		glVertex3f( back_left_x, back_left_y - 10.0, back_left_z );
		glVertex3f( back_right_x, back_right_y - 10.0, back_right_z );
		glVertex3f( front_right_x, back_right_y - 10.0, back_right_z - 20.0 );
		glVertex3f( front_left_x, back_left_y - 10.0, back_left_z - 20.0 );
	glEnd( );

	glPopMatrix( );
}
示例#17
0
void drawBridges() {

	for(int j= curBridge;j < curBridge + 3; j++) {
		int i = j % NUM_BRIDGES;
		float minX = bridges[i].m_minVertex.getX();
		float minY = bridges[i].m_minVertex.getY();
		float minZ = bridges[i].m_minVertex.getZ();

		float maxX = bridges[i].m_maxVertex.getX();
		float maxY = bridges[i].m_maxVertex.getY();
		float maxZ = bridges[i].m_maxVertex.getZ();

			glPushMatrix();
				glEnable(GL_BLEND);
				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);	
				glBegin(GL_TRIANGLES);
				for (int k = minY; k < maxY; ++k) {
					for (int i = minX; i <maxX ; ++i) {
						createNormal(	i,k,maxZ,
										i+1,k,maxZ,
										i,k+1,maxZ);
						glVertex3f(i,k,maxZ);
						glVertex3f(i+1,k,maxZ);
						glVertex3f(i,k+1,maxZ);
						createNormal(	i+1,k,maxZ,
										i+1,k+1,maxZ,
										i,k+1,maxZ);

						glVertex3f(i+1,k,maxZ);
						glVertex3f(i+1,k+1,maxZ);
						glVertex3f(i,k+1,maxZ);
					}
				}
			for (int j = minZ; j<maxZ; ++j) {
				for (int i = minX; i <maxX ; ++i) {
						glVertex3f(i,maxY,j);
						glVertex3f(i+1,maxY,j);
						glVertex3f(i,maxY,j-1);

						glVertex3f(i+1,maxY,j);
						glVertex3f(i+1,maxY,j-1);
						glVertex3f(i,maxY,j-1);
				}
			}
			for (int j = minZ; j<maxZ; ++j) {
				for (int i = minX; i <maxX ; ++i) {
						glVertex3f(i,minY,j);
						glVertex3f(i+1,minY,j);
						glVertex3f(i,minY,j-1);

						glVertex3f(i+1,minY,j);
						glVertex3f(i+1,minY,j-1);
						glVertex3f(i,minY,j-1);
				}
			}
				glDisable(GL_BLEND);
//			glTranslatef((maxX+minX)/2,(maxY+minY)/2,(maxZ+minZ)/2);
//			glScalef(maxX-minX,maxY-minY,maxZ-minZ);
//			glutSolidCube(1); 
			glEnd();
			glPopMatrix();
	}

}
示例#18
0
void Model::drawCube() {
	glTranslatef(-.5,-.5,-.5);
	createNormal(
		1,0,0,0,0,0,
		1,1,0);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0);
		glVertex3f(0,0,0);
		glTexCoord2f(1, 0);
		glVertex3f(1,0,0);
		glTexCoord2f(1, 1);
		glVertex3f(1,1,0);
		glTexCoord2f(0, 1);
		glVertex3f(0,1,0);
	glEnd();
	glBegin(GL_QUADS);
	createNormal(0,0,0, // This one check last
		1,0,1,
		1,1,1);
		glTexCoord2f(0, 0);
		glVertex3f(1,0,0);
		glTexCoord2f(1, 0);
		glVertex3f(1,0,1);
		glTexCoord2f(1, 1);
		glVertex3f(1,1,1);
		glTexCoord2f(0, 1);
		glVertex3f(0,1,0);
	glEnd();
	glBegin(GL_QUADS);
	createNormal(
		0,0,0,0,0,1,
		0,1,0);
		glTexCoord2f(0, 0);
		glVertex3f(0,0,1);
		glTexCoord2f(1, 0);
		glVertex3f(0,0,0);
		glTexCoord2f(1, 1);
		glVertex3f(0,1,0);
		glTexCoord2f(0, 1);
		glVertex3f(0,1,1);
	glEnd();
	glBegin(GL_QUADS);
	createNormal(
		0,0,1,1,0,1,
		0,1,1);
		glTexCoord2f(0, 0);
		glVertex3f(1,0,1);
		glTexCoord2f(1, 0);
		glVertex3f(0,0,1);
		glTexCoord2f(1, 1);
		glVertex3f(0,1,1);
		glTexCoord2f(0, 1);
		glVertex3f(1,1,1);
	glEnd();
	glBegin(GL_QUADS);
	createNormal(
		1,1,0,0,1,0,
		1,1,1);
		glTexCoord2f(0, 0);
		glVertex3f(0,1,0);
		glTexCoord2f(1, 0);
		glVertex3f(1,1,0);
		glTexCoord2f(1, 1);
		glVertex3f(1,1,1);
		glTexCoord2f(0, 1);
		glVertex3f(0,1,1);
	glEnd();
	glBegin(GL_QUADS);
	createNormal(
		1,0,1,0,0,1,
		1,0,0);
		glTexCoord2f(0, 0);
		glVertex3f(0,0,1);
		glTexCoord2f(1, 0);
		glVertex3f(1,0,1);
		glTexCoord2f(1, 1);
		glVertex3f(1,0,0);
		glTexCoord2f(0, 1);
		glVertex3f(0,0,0);
	glEnd();
}
示例#19
0
void drawLeftBuildings(int i) {

	float d = 4;
	float l2 = wb2[i] / (d/2) - (d/2);
	
	// Building
	glBindTexture(GL_TEXTURE_2D, _btextureId[randText2[i]]);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glColor4f(1.0f, 1.0f, 1.0f,0.6);

	glPushMatrix();
		glTranslatef(-25,-50,0);
		glBegin(GL_TRIANGLES);
		for (int j=0; j < l2; ++++++j)
			for (int k=0; k <=hb2[i]; ++++++k) {
					createNormal(	0,k,j+3,
									0,k,j,
									0,k+1,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k+1,j+3,
									0,k,j,
									0,k+1,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
			}
			for (int j=l2; j < l2 + d; ++++++j)
				for (int k=5; k <hb2[i]; ++++++k) {
					createNormal(	0,k,j+3,
									0,k,j,
									0,k+3,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k+3,j+3,
									0,k,j,
									0,k+3,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
				}
			for (int j=l2 + d; j < wb2[i]; ++++++j)
				for (int k=0; k <=hb2[i]; ++++++k) {
					createNormal(	0,k,j+3,
									0,k,j,
									0,k+3,j+3);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 0);
					glVertex3f(0,k,j+3);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);

					createNormal(	0,k+3,j+3,
									0,k,j,
									0,k+3,j);
				glTexCoord2f(0, 0);
					glVertex3f(0,k,j);
				glTexCoord2f(1, 1);
					glVertex3f(0,k+3,j+3);
				glTexCoord2f(0, 1);
					glVertex3f(0,k+3,j);
				}
		glEnd();
		glVertex3f(0,0,l2);
		glVertex3f(0,0,l2 + d);
		glVertex3f(0,05,l2 + d);
		glVertex3f(0,05,l2);
	glPopMatrix();
}