|
|
|
@@ -45,52 +45,111 @@ |
|
|
|
|
|
|
|
static GLfloat Xrot = 0, Yrot = 0; |
|
|
|
static GLfloat EyeDist = 10; |
|
|
|
static GLboolean use_vertex_arrays = GL_FALSE; |
|
|
|
|
|
|
|
#define eps1 0.99 |
|
|
|
#define br 20.0 /* box radius */ |
|
|
|
|
|
|
|
static void draw_skybox( void ) |
|
|
|
{ |
|
|
|
const GLfloat eps1 = 0.99; |
|
|
|
const GLfloat br = 20.0; /* box radius */ |
|
|
|
static const GLfloat tex_coords[] = { |
|
|
|
/* +X side */ |
|
|
|
1.0, -eps1, -eps1, |
|
|
|
1.0, -eps1, eps1, |
|
|
|
1.0, eps1, eps1, |
|
|
|
1.0, eps1, -eps1, |
|
|
|
|
|
|
|
/* -X side */ |
|
|
|
-1.0, eps1, -eps1, |
|
|
|
-1.0, eps1, eps1, |
|
|
|
-1.0, -eps1, eps1, |
|
|
|
-1.0, -eps1, -eps1, |
|
|
|
|
|
|
|
/* +Y side */ |
|
|
|
-eps1, 1.0, -eps1, |
|
|
|
-eps1, 1.0, eps1, |
|
|
|
eps1, 1.0, eps1, |
|
|
|
eps1, 1.0, -eps1, |
|
|
|
|
|
|
|
/* -Y side */ |
|
|
|
-eps1, -1.0, -eps1, |
|
|
|
-eps1, -1.0, eps1, |
|
|
|
eps1, -1.0, eps1, |
|
|
|
eps1, -1.0, -eps1, |
|
|
|
|
|
|
|
glBegin(GL_QUADS); |
|
|
|
/* +Z side */ |
|
|
|
eps1, -eps1, 1.0, |
|
|
|
-eps1, -eps1, 1.0, |
|
|
|
-eps1, eps1, 1.0, |
|
|
|
eps1, eps1, 1.0, |
|
|
|
|
|
|
|
/* -Z side */ |
|
|
|
eps1, eps1, -1.0, |
|
|
|
-eps1, eps1, -1.0, |
|
|
|
-eps1, -eps1, -1.0, |
|
|
|
eps1, -eps1, -1.0, |
|
|
|
}; |
|
|
|
|
|
|
|
static const GLfloat vtx_coords[] = { |
|
|
|
/* +X side */ |
|
|
|
glTexCoord3f(1.0, -eps1, -eps1); glVertex3f(br, -br, -br); |
|
|
|
glTexCoord3f(1.0, -eps1, eps1); glVertex3f(br, -br, br); |
|
|
|
glTexCoord3f(1.0, eps1, eps1); glVertex3f(br, br, br); |
|
|
|
glTexCoord3f(1.0, eps1, -eps1); glVertex3f(br, br, -br); |
|
|
|
br, -br, -br, |
|
|
|
br, -br, br, |
|
|
|
br, br, br, |
|
|
|
br, br, -br, |
|
|
|
|
|
|
|
/* -X side */ |
|
|
|
glTexCoord3f(-1.0, eps1, -eps1); glVertex3f(-br, br, -br); |
|
|
|
glTexCoord3f(-1.0, eps1, eps1); glVertex3f(-br, br, br); |
|
|
|
glTexCoord3f(-1.0, -eps1, eps1); glVertex3f(-br, -br, br); |
|
|
|
glTexCoord3f(-1.0, -eps1, -eps1); glVertex3f(-br, -br, -br); |
|
|
|
-br, br, -br, |
|
|
|
-br, br, br, |
|
|
|
-br, -br, br, |
|
|
|
-br, -br, -br, |
|
|
|
|
|
|
|
/* +Y side */ |
|
|
|
glTexCoord3f(-eps1, 1.0, -eps1); glVertex3f(-br, br, -br); |
|
|
|
glTexCoord3f(-eps1, 1.0, eps1); glVertex3f(-br, br, br); |
|
|
|
glTexCoord3f( eps1, 1.0, eps1); glVertex3f( br, br, br); |
|
|
|
glTexCoord3f( eps1, 1.0, -eps1); glVertex3f( br, br, -br); |
|
|
|
-br, br, -br, |
|
|
|
-br, br, br, |
|
|
|
br, br, br, |
|
|
|
br, br, -br, |
|
|
|
|
|
|
|
/* -Y side */ |
|
|
|
glTexCoord3f(-eps1, -1.0, -eps1); glVertex3f(-br, -br, -br); |
|
|
|
glTexCoord3f(-eps1, -1.0, eps1); glVertex3f(-br, -br, br); |
|
|
|
glTexCoord3f( eps1, -1.0, eps1); glVertex3f( br, -br, br); |
|
|
|
glTexCoord3f( eps1, -1.0, -eps1); glVertex3f( br, -br, -br); |
|
|
|
-br, -br, -br, |
|
|
|
-br, -br, br, |
|
|
|
br, -br, br, |
|
|
|
br, -br, -br, |
|
|
|
|
|
|
|
/* +Z side */ |
|
|
|
glTexCoord3f( eps1, -eps1, 1.0); glVertex3f( br, -br, br); |
|
|
|
glTexCoord3f(-eps1, -eps1, 1.0); glVertex3f(-br, -br, br); |
|
|
|
glTexCoord3f(-eps1, eps1, 1.0); glVertex3f(-br, br, br); |
|
|
|
glTexCoord3f( eps1, eps1, 1.0); glVertex3f( br, br, br); |
|
|
|
br, -br, br, |
|
|
|
-br, -br, br, |
|
|
|
-br, br, br, |
|
|
|
br, br, br, |
|
|
|
|
|
|
|
/* -Z side */ |
|
|
|
glTexCoord3f( eps1, eps1, -1.0); glVertex3f( br, br, -br); |
|
|
|
glTexCoord3f(-eps1, eps1, -1.0); glVertex3f(-br, br, -br); |
|
|
|
glTexCoord3f(-eps1, -eps1, -1.0); glVertex3f(-br, -br, -br); |
|
|
|
glTexCoord3f( eps1, -eps1, -1.0); glVertex3f( br, -br, -br); |
|
|
|
br, br, -br, |
|
|
|
-br, br, -br, |
|
|
|
-br, -br, -br, |
|
|
|
br, -br, -br, |
|
|
|
}; |
|
|
|
|
|
|
|
glEnd(); |
|
|
|
static void draw_skybox( void ) |
|
|
|
{ |
|
|
|
if ( use_vertex_arrays ) { |
|
|
|
glTexCoordPointer( 3, GL_FLOAT, 0, tex_coords ); |
|
|
|
glVertexPointer( 3, GL_FLOAT, 0, vtx_coords ); |
|
|
|
|
|
|
|
glEnableClientState( GL_TEXTURE_COORD_ARRAY ); |
|
|
|
glEnableClientState( GL_VERTEX_ARRAY ); |
|
|
|
|
|
|
|
glDrawArrays( GL_QUADS, 0, 24 ); |
|
|
|
|
|
|
|
glDisableClientState( GL_TEXTURE_COORD_ARRAY ); |
|
|
|
glDisableClientState( GL_VERTEX_ARRAY ); |
|
|
|
} |
|
|
|
else { |
|
|
|
unsigned i; |
|
|
|
|
|
|
|
glBegin(GL_QUADS); |
|
|
|
for ( i = 0 ; i < 24 ; i++ ) { |
|
|
|
glTexCoord3fv( & tex_coords[ i * 3 ] ); |
|
|
|
glVertex3fv ( & vtx_coords[ i * 3 ] ); |
|
|
|
} |
|
|
|
glEnd(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@@ -176,6 +235,11 @@ static void key(unsigned char k, int x, int y) |
|
|
|
mode = !mode; |
|
|
|
set_mode(mode); |
|
|
|
break; |
|
|
|
case 'v': |
|
|
|
use_vertex_arrays = ! use_vertex_arrays; |
|
|
|
printf( "Vertex arrays are %sabled\n", |
|
|
|
(use_vertex_arrays) ? "en" : "dis" ); |
|
|
|
break; |
|
|
|
case 'z': |
|
|
|
EyeDist -= 0.5; |
|
|
|
if (EyeDist < 6.0) |