2011-11-15 4 views
26

私は3次元のOpenGLのスポットを学んでいます。それはかなりうまくいく、私は素敵なカメラを移動しています。現在、頂点配列を使用していますが、ここではVBOにスワップしています。それは間違いなく非常に間違っているのですが、どのような順序で私の頂点をかけるためにOpenGLに送るべきですか

void cube::update_verts(){ 
GLushort cur=0; 

///back face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 

///right face 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 

///top face 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 

///front face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 

///bottom face 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 

///left face 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 


} 

///Drawing Code: 

glVertexPointer(3,GL_FLOAT,0,object.verts); 
glColorPointer(3,GL_UNSIGNED_BYTE,0,object.colors); 
glDrawArrays(GL_QUADS,0,6*4); 

を理由:私はちょうど今、これは私がやっているものです、しかし、私はどのような順序私は私の頂点を指定するべきものではわからない、カリングを有効にしようとしていますglEnable(GL_CULL_FACE);私の立方体には正しい顔が表示されません(下記参照)。カリングこれらの画像の両方に問題がある子供 View From Side

ノーマル Regular View From Top

が有効になっています。

どのような順番で頂点を指定する必要がありますか?


(EDIT)更新ワーキング機能:デフォルトで

void cube::update_verts(){ 
GLushort cur=0; 

///top face 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 


///bottom face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 

///left face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 

///right face 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 

///front face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz; 


///back face 
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z; 
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z; 
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z; 

} 

答えて

関連する問題