OpenGL

仕様書
マウス左クリックを押すことで回転する。(x,y,z)=(0,0,0)の地点を原点するモデリング座標系1の直角三角錐はy軸を中心に回転をし、モデリング座標系2の直角三角錐はモデリング座標系1におけるx=1の地点を中心とし、モデリング座標系2のx軸、y軸方向に回転をする。

ソースコード
//コンパイル cc 0425.c -lglut -lGLU -lGL -lm #include #include #include #include /*立方体の座標*/ GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 0.0 } }; /*頂点のグループ(辺)*/ int face[][3] = { { 0, 1, 2 }, { 2, 1, 3 }, { 3, 1, 0 }, { 0, 2, 3 } }; GLdouble normal[][3] = { { 0.0, 0.0,-1.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, {-1.0, 0.0, 0.0 }, { 0.0,-1.0, 0.0 }, { 0.0, 1.0, 0.0 } }; GLfloat light0pos[] = { 0.0, 3.0, 5.0, 1.0 }; GLfloat light1pos[] = { 5.0, 3.0, 0.0, 1.0 }; GLfloat green[] = { 0.0, 1.0, 0.0, 1.0 }; GLfloat red[] = { 0.8, 0.2, 0.2, 1.0 }; GLfloat blue[] = { 0.2, 0.2, 0.8, 1.0 }; /*テクスチャ*/ #define TEXWIDTH 512 /* テクスチャの幅    */ #define TEXHEIGHT 512 /* テクスチャの高さ   */ static GLubyte texture[TEXHEIGHT][TEXWIDTH][4]; void initTexture(void) { FILE *fp; int x, z; /* texture file open */ if((fp=fopen("reiwa.png", "rb"))==NULL){ fprintf(stderr, "texture file cannot open\n"); return; } fseek(fp, 18, SEEK_SET); for(x=0;x= 360) r = 0; if (++r2 >= 360) r2 = 0; } void resize(int w, int h) { glViewport(0, 0, w, h); /* 透視変換行列の設定 */ glMatrixMode(GL_PROJECTION); glLoadIdentity