如何使用原始重启功能

时间:2012-01-18 18:50:40

标签: opengl

我正在尝试制作地形网格,现在有这样的东西:

    GL.PushMatrix();
    GL.Begin(BeginMode.TriangleStrip);

    for (int i = 0; i < 6; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            GL.Vertex2(0 + 50 * j, 0 + 50 * i);
            GL.Vertex2(0 + 50 * j, 0 + 50 + 50 * i);
        }

    }

    GL.End();
    GL.PopMatrix();

但它看起来不像假设,应该如何正确完成?

image http://img821.imageshack.us/img821/5387/otkl.jpg

2 个答案:

答案 0 :(得分:7)

如果没有索引列表,则无法使用原始重启。此外,原始重启是一种性能增强工具;如果你正在使用立即模式渲染(glBegin/End),你已经放弃了性能。所以只需将开头和结尾放在循环中,如下所示:

for (int i = 0; i < 6; i++)
{
    GL.Begin(BeginMode.TriangleStrip);
    for (int j = 0; j < 6; j++)
    {
        GL.Vertex2(0 + 50 * j, 0 + 50 * i);
        GL.Vertex2(0 + 50 * j, 0 + 50 + 50 * i);
    }
    GL.End();
}

答案 1 :(得分:3)

如果要将整个地形绘制为单个三角形条带,则需要使用“退化三角形”(在相同位置具有两个或三个顶点的三角形),并在不同方向上绘制偶数行和奇数行。 Here关于它的一个教程,虽然对于DirectX,但用于定位顶点的循环应该几乎相同。