前提
Mac OSX 10.7.5
Developer Tool
目標
Cubeを回転させる。
Glangle.cpp
Glangle.cpp
#include <GLUT/glut.h>
#define WIDTH 640
#define HEIGHT 480
//回転用
float angle = 0.0f;
//cubeの色
GLfloat green[] = { 0.0, 1.0, 0.0, 1.0};
float Radius=80.0f;
//3つのベクトル
struct Vector3f{
float x;
float y;
float z;
}vec3d;
void Line3D(float x1,float y1,float z1,float x2,float y2,float z2){
//線幅
glLineWidth(1.0);
//線
glBegin(GL_LINES);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y2,z2);
glEnd();
}
void DrawMeasure(int measure,float size){
glDisable(GL_LIGHTING);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
for(int x=0;x<=measure;x++){Line3D(x*size-(size*measure/2),0,-(size*measure/2),x*size-(size*measure/2),0,measure*size-(size*measure/2));}
for(int y=0;y<=measure;y++){Line3D(-(size*measure/2),0,y*size-(size*measure/2),measure*size-(size*measure/2),0,y*size-(size*measure/2));}
glDisable(GL_DEPTH_TEST);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
Line3D(0,0,0,(measure/2+2)*size,0,0);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
Line3D(0,0,0,0,(measure/2+2)*size,0);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
Line3D(0,0,0,0,0,(measure/2+2)*size);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, WIDTH, HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)WIDTH / (double)HEIGHT, 1.0, 5000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,800.0,800.0,
0.0,0.0,0.0,
0.0,1.0,0.0);
glColor3f(1,1,1);
DrawMeasure(16,40);
glMaterialfv(GL_FRONT, GL_DIFFUSE, green);
glRotatef(angle,vec3d.x,vec3d.y,vec3d.z);
glutSolidCube(80.0);
glutSwapBuffers();
}
void idle(void)
{
angle+=2.0f;
//Sleep(1);
glutPostRedisplay();
}
void Init(){
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
//任意軸のベクトルを設定
vec3d.x=45.0f;
vec3d.y=90.0f;
vec3d.z=0.0f;
}
int main(int argc, char *argv[])
{
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("Rotate Cube");
glutDisplayFunc(display);
glutIdleFunc(idle);
Init();
glutMainLoop();
return 0;
}
コンパイル
framework指定が要点です。
g++ -o Glangle Glangle.cpp -framework GLUT -framework OpenGL
Result
保守用履歴
今の環境でも確認できたので安心。