用三角形条创建平面

时间:2015-07-22 07:49:45

标签: qt opengl qt5 mesh

我正在尝试创建一个精细的三角网格。在绘图功能中:

// 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。

1 个答案:

答案 0 :(得分:2)

对我来说,这看起来像是由三角形条带产生的三角形“向后跳”到左侧。每当您开始新行时都会发生这种情况。基本上,它们由前一行的最后顶点和下一行的第一个顶点组成。背面剔除似乎有效,但从后面可以看到大三角形,因为它们的缠绕顺序与其中一个小三角形完全相反。

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