我正在尝试创建一个精细的三角网格。在绘图功能中:
// 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();
我得到以下输出:
我的预期。
但如果我旋转场景,我会在背面看到这一点:
(如果不清楚,它的灯光无力,但三角形与前面显示的不同。)
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。
答案 0 :(得分:2)
对我来说,这看起来像是由三角形条带产生的三角形“向后跳”到左侧。每当您开始新行时都会发生这种情况。基本上,它们由前一行的最后顶点和下一行的第一个顶点组成。背面剔除似乎有效,但从后面可以看到大三角形,因为它们的缠绕顺序与其中一个小三角形完全相反。
如果您不想拥有它们,则必须重置每行末尾的三角形条带,或使用其他结构(GL_TRIANGLES)。