カメヲラボ

主にプログラミングとお勉強全般について書いてます

Stereo Graphics Programming(7)

off-axisの計算はまた後でということで、とりあえずdraw関数の概要を載せておく。詳しく説明したい気もするけど、今風邪を引いて超しんどい(-_-)コメントがちょろっと付いているのでそれで我慢してチョ。


今日は手抜き。



001 void drawScene( void )
002 {
003 int x;
004
005 /* ステンシルバッファを使う。1ライン置きにマスク */
006 glClearStencil(0);
007 glStencilFunc(GL_ALWAYS, BARRIERBIT, BARRIERBIT);
008 glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
009 glDisable(GL_DEPTH_TEST);
010 glDrawBuffer(GL_NONE);
011 glMatrixMode(GL_PROJECTION);
012 glLoadIdentity();/* ちゃんと初期化しとけヨ */
013 glOrtho(-0.5, (GLdouble)width, -0.5, (GLdouble)height, -1.0, 1.0);
014 glMatrixMode(GL_MODELVIEW);
015 glLoadIdentity();/* ちゃんと初期化しとけヨ */
016 glPushMatrix();
017 glBegin(GL_LINES);
018 for (x = 0; x < width; x += 2) {
019 glVertex2d(x, 0);
020 glVertex2d(x, height - 1);
021 }
022 glEnd();
023 glPopMatrix();
024 glDrawBuffer(GL_BACK);
025 glEnable(GL_DEPTH_TEST);
026 glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
027
028
029 /* ここから物体の描画 */
030 glPushMatrix();
031 glMatrixMode( GL_MODELVIEW );
032 glLoadIdentity();/* ちゃんと初期化しとけヨ */
033
034
035 /* 右目 */
036 glColorMask(1, 1, 1, 1);
037 glClear( GL_COLOR_BUFFER_BIT
038 | GL_DEPTH_BUFFER_BIT
039 | GL_STENCIL_BUFFER_BIT );/* ちゃんとクリアしとけヨ */
040
041 glPushMatrix();
042 stereo_off_axis( RIGHT_EYE );/* off-axis法でビューボリュームを計算 */
043 glStencilFunc(GL_NOTEQUAL, BARRIERBIT, BARRIERBIT);
044 glColorMask(1, 0, 1, 1);/* RB */
045 DrawObject();/* 一回目 */
046 glStencilFunc(GL_EQUAL, BARRIERBIT, BARRIERBIT);
047 glColorMask(0, 1, 0, 0);/* G */
048 DrawObject();/* 二回目 */
049 glPopMatrix();
050
051
052 /* 左目 */
053 glColorMask(0, 0, 0, 0);/* これを書かないとおかしくなる場合がある */
054 glClear( GL_COLOR_BUFFER_BIT
055 | GL_DEPTH_BUFFER_BIT
056 | GL_STENCIL_BUFFER_BIT );/* ちゃんとクリアしとけヨ */
057
058 glPushMatrix();
059 stereo_off_axis( LEFT_EYE );/* off-axis法でビューボリュームを計算 */
060 glStencilFunc(GL_EQUAL, BARRIERBIT, BARRIERBIT);
061 glColorMask(1, 0, 1, 1);/* RB */
062 DrawObject();/* 三回目 */
063 glStencilFunc(GL_NOTEQUAL, BARRIERBIT, BARRIERBIT);
064 glColorMask(0, 1, 0, 0);/* G */
065 DrawObject();/* 四回も(´д`) */
066 glPopMatrix();
067
068
069 glPopMatrix();
070 glutSwapBuffers();
071 }