1

我正在使用顶点缓冲区(在固定函数管道中)通过重复第一个/最后一个顶点来批处理三角形条带。渲染代码如下:

    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);

    // 启用顶点数组
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 3*sizeof(GLfloat), 0);

    //准备颜色VBO
    glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);

    // 启用颜色数组
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(3, GL_FLOAT, 3*sizeof(GLfloat), 0);

    // 准备法线 VBO
    glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);

    // 启用普通数组
    glEnableClientState(GL_NORMAL_ARRAY);
    glNormalPointer(GL_FLOAT, 0, 0);

    glDrawArrays(mode, 0, _nVertices);      

    // 禁用/解除绑定
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

但是,虽然三角形条被正确分开,但只有第一个三角形条的照明是正确的。

在下面的示例中,我正在渲染一个五边形和一个正方形,您可以看到只有五边形的照明是正确的。

在此处输入图像描述

这是 3 个(顶点、法线、颜色)顶点缓冲区中的数据。可以看到五边形的最后一个顶点和正方形的第一个顶点是重复的,而且法线是一致的。

顶点:

-2.000000 1.000000 0.000000
-1.000000 0.000000 0.000000
-1.000000 2.000000 0.000000
0.000000 0.000000 0.000000
0.000000 2.000000 0.000000
0.000000 2.000000 0.000000
1.000000 -1.000000 0.000000
1.000000 -1.000000 0.000000
1.000000 -2.000000 0.000000
2.000000 -1.000000 0.000000
2.000000 -2.000000 0.000000

法线:

-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 -0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 -0.000000 1.000000

颜色:

0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922

为什么广场的照明不对?

4

1 回答 1

0

显然,这个问题与组合 2 个三角形条带时添加的退化三角形的数量有关。这可以改变顶点顺序,从而使法线的方向不一致。

当三角形条的当前运行长度为奇数时,我通过添加额外的冗余顶点来解决上述问题。

下面的链接有很多关于三角带的构造和连接的有用信息:

http://www.codercorner.com/Strips.htm

于 2012-09-07T03:46:28.727 回答