目前我有这个:
Shape* shapeArray[12];
for (int i = 0; i < vertices.size(); i += 3) {
for (int j = 0; j < sizeof(shapeArray) / sizeof(shapeArray[0]); j++) {
shapeArray[j] = new Triangle(vertices[i], vertices[i + 1], vertices[i + 2], vec3(0.8, 0.0, 1.0));
}
}
我正在尝试用三角形创建一个立方体。我想每次将j值增加1并且每次将i值增加3会产生类似的结果(如果它是硬编码的):
Shape* shapeArray[12];
shapeArray[0] = new Triangle(vertices[0], vertices[1], vertices[2], vec3(0.8, 0.0, 1.0));
shapeArray[1] = new Triangle(vertices[3], vertices[4], vertices[5], vec3(0.8, 0.0, 1.0));
shapeArray[2] = new Triangle(vertices[6], vertices[7], vertices[8], vec3(0.8, 0.0, 1.0));
shapeArray[3] = new Triangle(vertices[9], vertices[10], vertices[11], vec3(0.8, 0.0, 1.0));
shapeArray[4] = new Triangle(vertices[12], vertices[13], vertices[14], vec3(0.8, 0.0, 1.0));
shapeArray[5] = new Triangle(vertices[15], vertices[16], vertices[17], vec3(0.8, 0.0, 1.0));
shapeArray[6] = new Triangle(vertices[18], vertices[19], vertices[20], vec3(0.8, 0.0, 1.0));
shapeArray[7] = new Triangle(vertices[21], vertices[22], vertices[23], vec3(0.8, 0.0, 1.0));
shapeArray[8] = new Triangle(vertices[24], vertices[25], vertices[26], vec3(0.8, 0.0, 1.0));
shapeArray[9] = new Triangle(vertices[27], vertices[28], vertices[29], vec3(0.8, 0.0, 1.0));
shapeArray[10] = new Triangle(vertices[30], vertices[31], vertices[32], vec3(0.8, 0.0, 1.0));
shapeArray[11] = new Triangle(vertices[33], vertices[34], vertices[35], vec3(0.8, 0.0, 1.0));
然而,它没有给我想要的结果。我得到3个j值因此没有正确绘制立方体。
我怎么能用for循环来解决这个问题?或者我需要更改使用数组来存储三角形。谢谢。
答案 0 :(得分:2)
正如评论中所指出的,你的内部循环是没有必要的。
在创建新的三角形时,需要迭代数组并相应地计算顶点索引。
Shape* shapeArray[12];
for (int i = 0; i < vertices.size(); i += 3) {
shapeArray[i] = new Triangle(vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2], vec3(0.8, 0.0, 1.0));
}
将是一个更简单和有效的实施。
答案 1 :(得分:1)
for (int i= 0, j= 0; i < vertices.size(); i+= 3, ++j) {
...
}
这样的东西?
答案 2 :(得分:1)
您可以更改for循环,以便shapeArray索引准确对应顶点索引。我根据你的样本输出推断出这个。
Shape* shapeArray[12];
for (int i = 0; i < vertices.size(); i += 3)
{
shapeArray[(int)i/3] = new Triangle(vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2], vec3(0.8, 0.0, 1.0));
}
如果您将i
增加3
,那么您需要将3
除以shapeArray
索引。在这种情况下,您不需要内循环。