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