Exemplo n.º 1
0
void __stdcall glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t)
{
 if (!ARB_multitexture) return;
 glMultiTexCoord2dARB(target, s, t);
}
Exemplo n.º 2
0
//opengl scene, params: input texture (not the output filter->texture)
static void
gst_gl_bumper_callback (gint width, gint height, guint texture, gpointer stuff)
{
  static GLfloat xrot = 0;
  static GLfloat yrot = 0;
  static GLfloat zrot = 0;

  GstGLBumper *bumper = GST_GL_BUMPER (stuff);
  GLint locTangent = 0;

  //choose the lights
  GLfloat light_direction0[] = { 1.0, 0.0, -1.0, 0.0 }; // light goes along -x
  GLfloat light_direction1[] = { -1.0, 0.0, -1.0, 0.0 };        // light goes along x
  GLfloat light_diffuse0[] = { 1.0, 1.0, 1.0, 1.0 };
  GLfloat light_diffuse1[] = { 1.0, 1.0, 1.0, 1.0 };
  GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };

  //eye point
  glMatrixMode (GL_PROJECTION);
  gluLookAt (0.0, 0.0, -6.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  glMatrixMode (GL_MODELVIEW);

  //scene conf
  glEnable (GL_DEPTH_TEST);
  glDepthFunc (GL_LEQUAL);
  glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  glShadeModel (GL_SMOOTH);

  //set the lights
  glLightfv (GL_LIGHT0, GL_POSITION, light_direction0);
  glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse0);
  glLightfv (GL_LIGHT1, GL_POSITION, light_direction1);
  glLightfv (GL_LIGHT1, GL_DIFFUSE, light_diffuse1);
  glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse);
  glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE);
  glEnable (GL_COLOR_MATERIAL);
  glEnable (GL_LIGHTING);
  glEnable (GL_LIGHT0);
  glEnable (GL_LIGHT1);

  //configure shader
  gst_gl_shader_use (bumper->shader);
  locTangent =
      gst_gl_shader_get_attribute_location (bumper->shader, "aTangent");

  //set the normal map
  glActiveTextureARB (GL_TEXTURE1_ARB);
  gst_gl_shader_set_uniform_1i (bumper->shader, "texture1", 1);
  glBindTexture (GL_TEXTURE_RECTANGLE_ARB, bumper->bumpmap);

  //set the video texture
  glActiveTextureARB (GL_TEXTURE0_ARB);
  gst_gl_shader_set_uniform_1i (bumper->shader, "texture0", 0);
  glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture);

  //glTranslatef(2.0f, 2.0f, 5.0f);

  glRotatef (xrot, 1.0f, 0.0f, 0.0f);
  glRotatef (yrot, 0.0f, 1.0f, 0.0f);
  glRotatef (zrot, 0.0f, 0.0f, 1.0f);

  //Cube
  glBegin (GL_QUADS);

  // front face
  glNormal3d (0.0, 0.0, -1.0);
  glVertexAttrib3dARB (locTangent, 0.0, 1.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (1.0, 1.0, -1.0);  // B
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (1.0, -1.0, -1.0); // A
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (-1.0, -1.0, -1.0);        // D
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (-1.0, 1.0, -1.0); // C

  // right face
  glNormal3d (-1.0, 0.0, 0.0);
  glVertexAttrib3dARB (locTangent, 0.0, 1.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (-1.0, 1.0, -1.0); // C
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (-1.0, -1.0, -1.0);        // D
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (-1.0, -1.0, 1.0); // H
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (-1.0, 1.0, 1.0);  // G

  // back face
  glNormal3d (0.0, 0.0, 1.0);
  glVertexAttrib3dARB (locTangent, 0.0, 1.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (-1.0, 1.0, 1.0);  // G
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (-1.0, -1.0, 1.0); // H
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (1.0, -1.0, 1.0);  // E
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (1.0, 1.0, 1.0);   // F

  // left face
  glNormal3d (1.0, 0.0, 0.0);
  glVertexAttrib3dARB (locTangent, 0.0, 1.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (1.0, 1.0, 1.0);   // F
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (1.0, -1.0, 1.0);  // E
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (1.0, -1.0, -1.0); // A
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (1.0, 1.0, -1.0);  // B

  // top face
  glNormal3d (0.0, 1.0, 0.0);
  glVertexAttrib3dARB (locTangent, 0.0, 0.0, 1.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (1.0, 1.0, 1.0);   // F
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (1.0, 1.0, -1.0);  // B
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (-1.0, 1.0, -1.0); // C
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (-1.0, 1.0, 1.0);  // G

  // bottom face
  glNormal3d (0.0, -1.0, 0.0);
  glVertexAttrib3dARB (locTangent, 0.0, 0.0, -1.0);
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, 0.0);
  glVertex3d (1.0, -1.0, -1.0); // A
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, 0.0, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, 0.0, bumper->bumpmap_height);
  glVertex3d (1.0, -1.0, 1.0);  // E
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, height);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width,
      bumper->bumpmap_height);
  glVertex3d (-1.0, -1.0, 1.0); // H
  glMultiTexCoord2dARB (GL_TEXTURE0_ARB, width, 0.0);
  glMultiTexCoord2dARB (GL_TEXTURE1_ARB, bumper->bumpmap_width, 0.0);
  glVertex3d (-1.0, -1.0, -1.0);        // D
  glEnd ();

  glUseProgram (0);
  glDisable (GL_LIGHT0);
  glDisable (GL_LIGHT1);
  glDisable (GL_LIGHTING);
  glDisable (GL_COLOR_MATERIAL);

  xrot += 1.0f;
  yrot += 0.9f;
  zrot += 1.1f;
}
Exemplo n.º 3
0
void bBoard::draw()
{
    double vvx = cos(aa), vvy = sin(aa);
    
    if( idle() && camera_type == CT_FPS ) {
        GetCamera.set_eye( bVector3( ball[0]->pos.x - 2*view_r*vvx, 2.0, ball[0]->pos.y - 2*view_r*vvy ) );
        GetCamera.set_dst( bVector3( ball[0]->pos.x + 3*view_r*vvx, 0.2, ball[0]->pos.y + 3*view_r*vvy ) );
    } else {
        GetCamera.set_top_view();   
    }
    
    glDisable( GL_TEXTURE_2D );
    glColor3f( 0.0, 0.0, 0.0 );
    glBegin( GL_TRIANGLE_STRIP );
    for( int i=0; i<BOTTOM_SEGMENTS; ++i ) {
        glVertex3d( bottom_data[i].x, -0.01, bottom_data[i].y );
    }
    glEnd();
    
    if( idle() ) {
        glLineWidth( 2.0 );
        glEnable( GL_LINE_SMOOTH );
        glBegin( GL_LINES );
            glColor4d( 1.0, 0.3, 0.3, 1.0 );
            for(double k=0.0; k<4.0; k+=0.2) {
                glVertex3d( ball[0]->pos.x+vvx*k, ball[0]->radius, ball[0]->pos.y+vvy*k );
            }
        glEnd();
        glDisable( GL_BLEND );
    }
    
    glColor3f( 1.0, 1.0, 1.0 );
    
    board_shader.enable( bShader::B_FRAGMENT );
    board_shader.bind( bShader::B_FRAGMENT );
    
    glActiveTextureARB( GL_TEXTURE0_ARB );
    glEnable(GL_TEXTURE_2D);
    ball_num.bind();
    
    glMultiTexCoord3fARB( GL_TEXTURE1_ARB, 0.0f, 1.0f, 0.0f );
    glMultiTexCoord3fARB( GL_TEXTURE2_ARB, 0.0f, 0.1f, 0.0f );
    
    float lx = 0, ly = 0.3f, lz = 0;
    
    glEnable( GL_TEXTURE_2D );
    desk.bind();
    glBegin( GL_TRIANGLE_STRIP );
        glNormal3f( 0.0f, 1.0f, 0.0f );
        for( int i=0; i<DESK_SEGMENTS; ++i ) {
            glMultiTexCoord2dARB( GL_TEXTURE0_ARB, desk_data[i].tx, desk_data[i].ty ); 
            glMultiTexCoord3dARB( GL_TEXTURE3_ARB, desk_data[i].x-lx, 0.0-ly, desk_data[i].y-lz ); 
            glVertex3d( desk_data[i].x, 0.0, desk_data[i].y );
        }
    glEnd();
    
    Profiler.begin("ball_mgr::draw_bands");
    
    glActiveTextureARB( GL_TEXTURE0_ARB );
    glEnable(GL_TEXTURE_2D);
    band_tex.bind();
    
    glDisable( GL_CULL_FACE );
    for( int i=0; i<band_size; ++i ) {
        band[i]->draw();
    }
    
    glMultiTexCoord3dARB( GL_TEXTURE1_ARB, 0.0, 1.0, 0.0 ); 
        
    glBegin( GL_TRIANGLE_STRIP );
    for( int i=0; i<BOARD_SEGMENTS; ++i ) {
        glNormal3d( 0.0, 1.0, 0.0 );
        //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, band_data[i].x, 0.4-ly, band_data[i].y );
        glMultiTexCoord2dARB( GL_TEXTURE0_ARB, ((i%2)==0)?0.0:1.0, 0.0 ); 
        glVertex3d( band_data[i].x,  0.4, band_data[i].y );
        //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, board_data[i].x, 0.4-ly, board_data[i].y );
        glMultiTexCoord2dARB( GL_TEXTURE0_ARB, ((i%2)==0)?0.0:1.0, 1.0 ); 
        glVertex3d( board_data[i].x, 0.4, board_data[i].y );
    }
    //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, band_data[0].x, 0.4-ly, band_data[0].y );
    glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1, 0 ); 
    glVertex3d( band_data[0].x,  0.4, band_data[0].y );
    //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, board_data[0].x, 0.4-ly, board_data[0].y );
    glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1, 1 ); 
    glVertex3d( board_data[0].x, 0.4, board_data[0].y );
    glEnd();
    
    glColor3f(0.0f,0.0f,0.2f);
    glBegin( GL_TRIANGLE_STRIP );
    for( int i=0; i<BOARD_SEGMENTS; ++i ) {
        glVertex3d( band_data[i].x,  0.0, band_data[i].y );
        glVertex3d( band_data[i].x,  0.4, band_data[i].y );
    }
    glVertex3d( band_data[0].x,  0.0, band_data[0].y );
    glVertex3d( band_data[0].x,  0.4, band_data[0].y );
    glEnd();
    
    board_shader.disable( bShader::B_FRAGMENT );
    
    Profiler.begin("ball_mgr::draw_balls");
    draw_balls();
    Profiler.end("ball_mgr::draw_balls");
    
    if( power > 0.0 ) {
        bSystem::video_sys.set_matrix_2d();
        glDisable( GL_TEXTURE_2D );
        glDisable( GL_DEPTH_TEST );
        glColor3f( 0.0f, 0.0f, 0.0f );
        glBegin( GL_TRIANGLE_STRIP );
            glVertex2i( 100, 500 );        
            glVertex2i( 100, 560 );
            glVertex2i( 700, 500 );
            glVertex2i( 700, 560 );
        glEnd();
        
        glBegin( GL_TRIANGLE_STRIP );
            glColor3f( 0.0f, 1.0f, 0.0f );
            glVertex2i( 102, 502 );
            glVertex2i( 102, 558 );
            glColor3d( power/18.2, 1.0-power/18.2, 0.0f );
            glVertex2d( 100.0 + (598.0*power)/18.2, 502 );
            glVertex2d( 100.0 + (598.0*power)/18.2, 558 );
        glEnd();
    }
    
    Profiler.end("ball_mgr::draw_bands");
}
Exemplo n.º 4
0
void draw3DBox(float centerx, float centery, float centerz, 
			   float depth, float width, float height, DWORD colour,
			   float tcoords[6][2], float tshift[6][3], unsigned int basetid,
				 unsigned int tid[6], float density)
{
	float hdist = height / 2;
	float wdist = width / 2;
	float ddist = depth / 2;
	float minx = centerx - wdist;
	float maxx = centerx + wdist;
	float miny = centery - hdist;
	float maxy = centery + hdist;
	float minz = centerz - ddist;
	float maxz = centerz + ddist;
	LINEVERTEX3D Vertices[6][4] =	{
		// x, y, z, colour
		// Near Face - Facing z 1
	{	{	minx,	miny,	maxz,	colour },		// BL
		{	maxx,	miny,	maxz,	colour },		// BR
		{	maxx,	maxy,	maxz,	colour },		// TR
		{	minx,	maxy,	maxz,	colour }},		// TL

		// Far face - Facing z +1
	{	{	minx,	miny,	minz,	colour },		// BL
		{	maxx,	miny,	minz,	colour },		// BR
		{	maxx,	maxy,	minz,	colour },		// TR
		{	minx,	maxy,	minz,	colour }},	// TL

		// Left	face -x
	{ {	minx,	miny,	minz,	colour },		// BL
		{	minx,	miny,	maxz,	colour },		// BR
		{	minx,	maxy,	maxz,	colour },		// TR
		{	minx,	maxy,	minz,	colour }},	// TL

		// Right Face +x
	{	{	maxx,	miny,	minz,	colour },		// BL
		{	maxx,	miny,	maxz,	colour },		// BR
		{	maxx,	maxy,	maxz,	colour },		// TR
		{	maxx,	maxy,	minz,	colour }},	// TL

		// Top Face +y
	{	{	minx,	maxy,	minz,	colour },		// BL
		{	maxx,	maxy,	minz,	colour },		// BR
		{	maxx,	maxy,	maxz,	colour },		// TR
		{	minx,	maxy,	maxz,	colour }},	// TL

		// Bottom Face -y
	{	{	minx,	miny,	minz,	colour },		// BL
		{	maxx,	miny,	minz,	colour },		// BR
		{	maxx,	miny,	maxz,	colour },		// TR
		{	minx,	miny,	maxz,	colour }},	// TL
	};
	float norms[][3] = {
		{ 0, 0, 1 },	// Near
		{ 0, 0, -1 }, // Far
		{ -1, 0, 0 }, // Left
		{ 1, 0, 0 }, // Right
		{ 0, 1, 0 }, // Top
		{ 0, -1, 0}, // Bottom
	};
	unsigned int size = 4;
	//for (int i = 0; i < 6*4; )

	float divisions = density;
	DWORD &c = colour;//Vertices[j].color;
	float c1[4] ={
		((float)RED(c)) / 255.0f,
	  ((float)GREEN(c)) / 255.0f,
	  ((float)BLUE(c)) / 255.0f,
	  ((float)ALPHA(c)) / 255.0f
	};
//	glColor4fv(c1);  

	int dirs[6] = { 0, 0, 1, 1, 2, 2 };
	bool flip[6] = { 1, 0, 0, 1, 0, 1 };
	/*
		0 - x, y 
		1 - x, y
		2 - y, z
		3 - y, z
		4 - x, z
		5 - x, z
	*/
// tcoords[6][2]
	float stepX = width / divisions;
	float stepY = height / divisions;
	float stepZ = depth / divisions;
	float x, y, z;
	int e = 0;
	//int oldtid = -1;
	
	for (unsigned int i = 0; i < 6; i++)
	{
		//if (oldtid != tid[i])
		//{
		//	glBindTexture(GL_TEXTURE_2D, tid[i]);
		//	oldtid = tid[i];
		//}
		glActiveTextureARB(GL_TEXTURE1_ARB);
		glEnable(GL_TEXTURE_2D);
		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
//		glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2);
		glBindTexture(GL_TEXTURE_2D, tid[i]);



		glActiveTextureARB(GL_TEXTURE0_ARB);
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, basetid);
		
		
		float sx = 0, sy = 0, sz = 0;
		
		glMatrixMode(GL_TEXTURE);
		glPushMatrix();
		glLoadIdentity();
		glScalef(tcoords[i][0], tcoords[i][1], 1);
		glTranslatef(tshift[i][0], tshift[i][1], tshift[i][2]);
		glMatrixMode(GL_MODELVIEW);

		glBegin(GL_QUADS);
		glNormal3fv(norms[i]);

//glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, &t0[0]);
//glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, &t1[0]);	

		if (dirs[i] == 0)
		{
			// Subdivide on X, Y plane
			z = Vertices[i][0].z;
			for (x = Vertices[i][0].x; x < Vertices[i][1].x; x += stepX, sx += stepX, sy = 0)
			{
				for (y = Vertices[i][0].y; y < Vertices[i][2].y; y+= stepY, sy += stepY)
				{
					double u[] = { 1.0 / (width / sx), 1.0 / (width / (sx+stepX)) };
					double v[] = { 1.0 / (height / sy), 1.0 / (height / (sy+stepY)) };
					
					if (flip[i])
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x+stepX, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x+stepX, y+stepY, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y+stepY, z);
/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x+stepX, y, z);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x+stepX, y+stepY, z);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y+stepY, z);
*/					}
					else
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y+stepY, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x+stepX, y+stepY, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x+stepX, y, z);
/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y+stepY, z);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x+stepX, y+stepY, z);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x+stepX, y, z);
*/
}
				}
			}
		}
		else if (dirs[i] == 1)
		{
			// Subdivide on Y, Z plane
			x = Vertices[i][0].x;
			
			for (z = Vertices[i][0].z; z < Vertices[i][1].z; z += stepZ, sz+= stepZ, sy = 0)
			{
				for (y = Vertices[i][0].y; y < Vertices[i][2].y; y+= stepY, sy+=stepY)
				{
					double u[] = { 1.0 / (depth / sz), 1.0 / (depth / (sz + stepZ)) };
					double v[] = { 1.0 / (height / sy), 1.0 / (height / (sy + stepY)) };
					if (flip[i])
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y+stepY, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x, y+stepY, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x, y, z+stepZ);
/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y+stepY, z);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x, y+stepY, z+stepZ);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x, y, z+stepZ);
						*/
					}
					else
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x, y, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x, y+stepY, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y+stepY, z);
						/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x, y, z+stepZ);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x, y+stepY, z+stepZ);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y+stepY, z);
						*/
					}
				}
			}
		}
		else if (dirs[i] == 2)
		{
			// Subdivide on X, Z plane
//			DebugText(EMSG, "Drawing X,Z (2) plane!");
			y = Vertices[i][0].y;
			for (x = Vertices[i][0].x; x < Vertices[i][1].x; x += stepX, sx+=stepX, sz = 0)
			{
				for (z = Vertices[i][0].z; z < Vertices[i][2].z; z+= stepZ, sz+=stepZ)
				{
					double u[] = { 1.0 / (width / sx), 1.0 / (width / (sx+stepX)) };
					double v[] = { 1.0 / (depth / sz), 1.0 / (depth / (sz+stepZ)) };
					if (flip[i])
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x+stepX, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x+stepX, y, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y, z+stepZ);
						/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x+stepX, y, z);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x+stepX, y, z+stepZ);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y, z+stepZ);
						*/
					}
					else
					{
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[0]);
						glVertex3f(x, y, z);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[0], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[0], v[1]);
						glVertex3f(x, y, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[1]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[1]);
						glVertex3f(x+stepX, y, z+stepZ);
						glMultiTexCoord2dARB(GL_TEXTURE0_ARB, u[1], v[0]); glMultiTexCoord2dARB(GL_TEXTURE1_ARB, u[1], v[0]);
						glVertex3f(x+stepX, y, z);
						/*
						glTexCoord2d(u[0],v[0]);	glVertex3f(x, y, z);
						glTexCoord2d(u[0],v[1]);	glVertex3f(x, y, z+stepZ);
						glTexCoord2d(u[1],v[1]);	glVertex3f(x+stepX, y, z+stepZ);
						glTexCoord2d(u[1],v[0]);	glVertex3f(x+stepX, y, z);
						*/
					}

				}
			}	
		}

	glEnd();
	glMatrixMode(GL_TEXTURE);
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);

	}

}