step2
以下のプログラムをVS2010等でビルドして実行します。
やっていることは描画毎に左右の視点を指定しているだけです。
glut32.libとglew32.libをリンクしてください。
//************************************************************** // OpenGLでアクティブ方式の3D立体視 by g.koutaki // ただ、wglSwapIntervalEXT(1) で垂直同期オン にして // 偶数奇数フレームで視点位置を変えて描画しているだけです。 // // ・モニターの設定で120Hzにして(アクティブ形式の3Dモニタ・プロジェクタはできるかと)、 // 実行時はそのモニター以外は切りました。 // ・左右の判定はしていないので、左右逆になる可能性があります。 // ・処理落ちすると左右の画像が入れ替わる可能性があります。 // // 参考URL: http://www21.atwiki.jp/opengl/pages/80.html //************************************************************** #include <stdlib.h> #include <string> #include <GL/glew.h> #include <GL/wglew.h> #include <GL/glut.h> #define WIDTH 1280 #define HEIGHT 720 //回転用 float anglex = 0.0f; //ライトの位置 GLfloat lightpos[] = { 200.0, 150.0, -500.0, 1.0 }; //描画フレーム数 int count = 0; char buf[255],buf2[255]; /* 描画のコールバック関数 */ void display(void) { static GLfloat diffuse[3] = {1.0f, 0.0f, 0.0f}; static GLfloat ambient[3] = {0.25f, 0.25f, 0.25f}; static GLfloat specular[3] = {1.0f, 1.0f, 1.0f}; static GLfloat shininess[1] = {32.0f}; anglex+=0.2f; 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, 1000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //*********************************************** // 視点の設定 // フレームの奇数/偶数で視点位置を変える //*********************************************** gluLookAt( 30 * (count++ % 2) - 15, 10.0,-200.0, //カメラの座標 0.0,0.0,0.0, // 注視点の座標 0.0,1.0,0.0); // 画面の上方向を指すベクトル //ライトの設定 glLightfv(GL_LIGHT0, GL_POSITION, lightpos); //マテリアルの設定 glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); glMaterialfv(GL_FRONT, GL_SHININESS, shininess); //回転 glRotatef(anglex,0.8f,0.5f,0.3f);//X軸を回転 // Teapot描画 glutSolidTeapot(30.0); glutSwapBuffers(); } void idle(void) { glutPostRedisplay(); } void Init(){ glClearColor(0.3f, 0.3f, 0.3f, 1.0f); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); //*********************************************** wglSwapIntervalEXT(1);//垂直同期オン //*********************************************** } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(WIDTH, HEIGHT); glutCreateWindow(argv[0]); glewInit(); glutDisplayFunc(display); Init(); glutIdleFunc(idle); glutMainLoop(); return 0; }