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