#include <stdlib.h>
#include <GL/glut.h>
/* 立方体の頂点の3D座標 */
GLdouble vertex[][3] = {
{ -1.0, -1.0, -1.0 },
{ 1.0, -1.0, -1.0 },
{ 1.0, 1.0, -1.0 },
{ -1.0, 1.0, -1.0 },
{ -1.0, -1.0, 1.0 },
{ 1.0, -1.0, 1.0 },
{ 1.0, 1.0, 1.0 },
{ -1.0, 1.0, 1.0 }
};
/* 立方体の面を構成する頂点番号 */
int face[][4] = {
{ 0, 1, 2, 3 },
{ 1, 5, 6, 2 },
{ 5, 4, 7, 6 },
{ 4, 0, 3, 7 },
{ 4, 5, 1, 0 },
{ 3, 2, 6, 7 }
};
/* 立方体の面の色 */
GLdouble color[][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 }
};
void resize( int w, int h )
{
/* ビューポート変換 */
glViewport( 0, 0, w, h );
/* 変換行列の設定モード → 投影変換 */
glMatrixMode( GL_PROJECTION );
/* 投影変換行列の初期化(単位行列にする) */
glLoadIdentity();
/* 投影変換(透視投影)の設定 */
gluPerspective( 30.0, ( (double)w / (double)h ), 1.0, 100.0 );
/* 変換行列の設定モード → モデルビュー変換
モデルビュー変換:モデリング変換,視野変換(ビューイング変換) */
glMatrixMode( GL_MODELVIEW );
}
void display( void )
{
int i, j;
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
/* モデルビュー変換行列の初期化(単位行列にする)
モデルビュー変換:モデリング変換,視野変換(ビューイング変換) */
glLoadIdentity();
/* 視野変換(ビューイング変換)の設定 */
gluLookAt( 0.0, 6.0, 10.0, /* 視点位置 */
0.0, 0.0, 0.0, /* 注目位置 */
0.0, 1.0, 0.0 ); /* 上向きベクトル */
/* モデリング変換の設定 */
/* モデルの平行移動 */
glTranslated( 0.0, 0.0, 0.0 );
/* モデルの回転 */
glRotated( 30.0, 0.0, 1.0, 0.0 );
/* モデルの拡大・縮小 */
glScaled( 1.0, 1.5, 2.0 );
/* モデルの描画 */
glBegin( GL_QUADS );
for( j = 0; j < 6; j++ ) {
glColor3dv( color[j] );
for( i = 0; i < 4; i++ ) {
glVertex3dv( vertex[face[j][i]] );
}
}
glEnd();
glFlush();
}
void init( void )
{
glClearColor( 1.0, 1.0, 1.0, 1.0 );
glEnable( GL_DEPTH_TEST );
}
int main( int argc, char *argv[] )
{
glutInitWindowPosition( 100, 100 );
glutInitWindowSize( 400, 400 );
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH );
glutCreateWindow( argv[0] );
glutReshapeFunc( resize );
glutDisplayFunc( display );
init();
glutMainLoop();
return( 0 );
}
|