我正在尝试通过给定的widthheight参数化生成平面。这应该非常简单,但是却非常令人沮丧:我的代码适用于16x16或以下的所有正方形大小,然后开始困惑。

生成顶点

这里没有什么特别的,只需按行和列布置顶点即可。

Float3* vertices = new Float3[width * height];
int i = 0;
for (int r = 0; r < height; r++) {
    for (int c = 0; c < width; c++) {
        i = (r * width) + c;
        vertices[i] = Float3(c, 0, r);
    }
}

生成索引

黑色数字=顶点索引,红色数字=顺序

每个顶点除边缘外还需要6个槽来放置其索引。
numIndices = ((width - 1) * (height - 1)) * 6;
GLubyte* indices = new GLubyte[numIndices];
i = 0; // Index of current working vertex on the map
int j = -1; // Index on indices array
for (int r = 0; r < height - 1; r++) {
    for (int c = 0; c < width - 1; c++) {
        i = (r * width) + c;
        indices[++j] = i;
        indices[++j] = i + height + 1;
        indices[++j] = i + height;
        indices[++j] = i;
        indices[++j] = i + 1;
        indices[++j] = i + 1 + height;
    }
}

逻辑哪里出问题了?

最佳答案

您正在溢出GLubyte的限制,该限制可以保留最大值255。请尝试使用GLushort。

关于c++ - 平面的参数生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29160575/

10-10 01:45