LoginSignup
0
1

More than 5 years have passed since last update.

Macで GLUT + OpenGL のんびりいこう#7 Rolate Cube

Last updated at Posted at 2015-01-13

前提

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

スクリーンショット 2015-01-14 7.07.06.png

保守用履歴

今の環境でも確認できたので安心。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1