2015-07-22 76 views
0

我想创建一个精细的三角形网格。在绘制函数:用三角形条创建平面

// Draws triangular strip as only lines 
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 

// Create Cloth Mesh 
glBegin(GL_TRIANGLE_STRIP); 
glNormal3f(0,0,1); 

for(float i = 0.0 ; i < 2.0; i+=.05) 
{ 
    for(float j = -1.0 ; j < 1.0 ; j+=.05) 
    { 
     glVertex3f(j,1-i+.05,0); 

     glVertex3f(j,1-i,0); 
    } 
} 


glEnd(); 

我得到以下输出:

enter image description here

我我所期待的。

但是,如果我旋转了现场,我看到在背面:

enter image description here

(如果它不是明确的,它有气无力地亮着网格,但三角形是不一样显示出来的前面)

Q1。背部不应该看不见?我启用了这些标志:

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 

Q2。即使背面出现,为什么它会显示这些不规则的长三角形,与前面不一样?

P.S.这是调整功能:

void MyGLWidget::resizeGL(int width, int height) 
{ 
int side = qMin(width, height); 
glViewport((width - side)/2, (height - side)/2, side, side); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrtho(-2, +2, -2, +2, 1.0, 15.0); 
glMatrixMode(GL_MODELVIEW); 
} 

P.P.S:是的,我明白这不是现代的OpenGL。

回答

2

对我来说,这看起来像三角形,由三角形条生成以“跳回”到左侧。无论何时开始新行,都会发生这种情况。基本上,它们由前一行的最后一个顶点和下一行的第一个顶点组成。背面剔除似乎可行,但大三角形从后面可见,因为它们的卷绕顺序与小三角形的正好相反。

如果您不想拥有它们,您必须重置每行末尾的三角形条或使用其他结构(GL_TRIANGLES)。