OpenGL:立方体を書く

本物のページはこちら→cube

視点に一番近い立方体の頂点を求める

WebGLデモ

OpenGL備え付けの関数

glutWireCube(double size);
glutSolidCube(double size);

キューブインデックス

small.jpg
頂点配列について

面の前後関係をきちんとさせるには?

glEnable(GL_DEPTH_BUFFER);
//描画
glDisable(GL_DEPTH_BUFFER);

コード

どれもGL_TRIANGLE_STRIPを使用して書くことを想定している
GLushort cubeIndicesForQuadsInside[]={//内側が表バージョン
    0,1,2,3, 7,0,3,4, 6,7,4,5, 1,6,5,2, 5,4,3,2, 6,1,0,7,
    //far,    left,    near,   right,    top,    bottom
};

geometryInitにて

 glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glInterleavedArrays(GL_T2F_V3F,5*sizeof(GLfloat),cubeVerticesForQuads);

display関数にて

頂点配列バージョン

glBindTexture ( GL_TEXTURE_2D, texIds[0] );
   glEnable ( GL_TEXTURE_2D ); 
   glDrawArrays(GL_QUADS,0,24);
  glDisable(GL_TEXTURE_2D);

ベタ書きバージョン
        void DrawTextureQuad(){
            glEnable(GL_TEXTURE_2D);
            for(int quad=0;quad<6;quad++){
                glBindTexture(GL_TEXTURE_2D,texId[quad]);
                glBegin(GL_QUADS);
                for(int v=0;v<4;v++){
                    vertex[v].texcoord.glTexCoord();
                    vertex[cubeIndicesForQuadsInside[quad*4+v]].pos.glVertex();
                }
                glEnd();
                glBindTexture(GL_TEXTURE_2D, 0);
            }
            glDisable(GL_TEXTURE_2D);
        }

視点に一番近い立方体の頂点を求める

WebGLデモ

OpenGL備え付けの関数

glutWireCube(double size);
glutSolidCube(double size);

キューブインデックス

small.jpg
頂点配列について

面の前後関係をきちんとさせるには?

glEnable(GL_DEPTH_BUFFER);
//描画
glDisable(GL_DEPTH_BUFFER);

コード

どれもGL_TRIANGLE_STRIPを使用して書くことを想定している
GLushort cubeIndicesForQuadsInside[]={//内側が表バージョン
    0,1,2,3, 7,0,3,4, 6,7,4,5, 1,6,5,2, 5,4,3,2, 6,1,0,7,
    //far,    left,    near,   right,    top,    bottom
};

geometryInitにて

 glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glInterleavedArrays(GL_T2F_V3F,5*sizeof(GLfloat),cubeVerticesForQuads);

display関数にて

頂点配列バージョン

glBindTexture ( GL_TEXTURE_2D, texIds[0] );
   glEnable ( GL_TEXTURE_2D ); 
   glDrawArrays(GL_QUADS,0,24);
  glDisable(GL_TEXTURE_2D);

ベタ書きバージョン
        void DrawTextureQuad(){
            glEnable(GL_TEXTURE_2D);
            for(int quad=0;quad<6;quad++){
                glBindTexture(GL_TEXTURE_2D,texId[quad]);
                glBegin(GL_QUADS);
                for(int v=0;v<4;v++){
                    vertex[v].texcoord.glTexCoord();
                    vertex[cubeIndicesForQuadsInside[quad*4+v]].pos.glVertex();
                }
                glEnd();
                glBindTexture(GL_TEXTURE_2D, 0);
            }
            glDisable(GL_TEXTURE_2D);
        }
[[bibliography]]
gviz
GraphVizで立方体図形を描いている例 cool!

[[/bibliography]]

サポートサイト Wikidot.com