ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

軸とグリッドの描画

XYZの各軸とXZ平面のグリッドの描画を追加した。

#include <GL/glut.h>

// 軸の描画
void drawAxis(void)
{
    GLdouble axis[][3] =
    {
        { 0.0, 0.0, 0.0 },
        { 1.0, 0.0, 0.0 },
        { 0.0, 1.0, 0.0 },
        { 0.0, 0.0, 1.0 }
    };

    glBegin(GL_LINES);
    for(int i = 0; i<3; i++)
    {
        glColor3dv(axis[i+1]);
        glVertex3dv(axis[0]);
        glVertex3dv(axis[i+1]);
    }
    glEnd();
}

// XZ平面の描画
void drawPlane(void)
{
    const GLdouble xsize = 10.0f;
    const GLdouble zsize = 10.0f;
    const int xnum = 20;
    const int znum = 20;

    glBegin(GL_LINES);
    glColor3d(0.5, 0.5, 0.5);
    for(GLdouble x = -xsize; x <= xsize; x += xsize/xnum)
    {
        glVertex3d( x, 0.0, -zsize );
        glVertex3d( x, 0.0,  zsize );
    }
    for(GLdouble z = -zsize; z <= zsize; z += zsize/znum)
    {
        glVertex3d( -xsize, 0.0, z );
        glVertex3d(  xsize, 0.0, z );
    }
    glEnd();
}

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    
    drawPlane();
    drawAxis();

    glFlush();
}

void resize(int w, int h)
{
    glViewport(0, 0, w, h);
    
    glLoadIdentity();
    gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);
    gluLookAt(6.0, 8.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 1.0); // 画面のクリアカラー
}

int main(int argc, char *argv[])
{
    glutInitWindowSize(800, 600); // Windowサイズを指定
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutCreateWindow(argv[0]);
    glutDisplayFunc(display);
    glutReshapeFunc(resize);
    init();
    glutMainLoop();
    return 0;
}

これで最低限のテストはできるだろう。あとはマウスでカメラの回転や移動ができるようになれば便利。でもとりあえずそれは後回し。