A Scene
содержит список Shape
.
Каждый Shape
содержит:
- Его
std::vector
из Vertex
(с нормалью поверхности, texcoord, 3-х позиционное положение)
- Его
std::vector
из Triangle
(связанные вершины, для пересечения сетки)
Я хотел бы сделать объект Scene
повторяемым и как коллекцию Vertex
, и коллекцию Triangle
, в не так грязно way.
В настоящее время требуется пройтись по треугольникам: (синтаксис C # здесь):
foreach( Shape shape in Scene )
{
foreach( Mesh mesh in shape.meshGroup.meshes )
{
foreach( Triangle tri in mesh.tris )
{
// work with tri
}
}
}
Тройное вложенное for
не очень приятно видеть, и, конечно, синтаксис C ++ хуже, с использованием либо счетчиков i, j и k, либо с использованием ::iterator
s ..
Для доступа к каждому Vertex
:
foreach( Shape shape in Scene )
{
foreach( Mesh mesh in shape.meshGroup.meshes )
{
foreach( Vertex v in mesh.verts )
{
// work with v
}
}
}
Поскольку обход всех треугольников / вершин стоит начинать с , каков наилучший способ сделать это? (Предположим, что необходимо нажать каждые Triangle
/ Vertex
, поэтому нет необходимости в алгоритмах пространственного разделения и т. Д.)
Вы можете использовать любые функции C ++ 0x (включена VS-2010), включая лямбду.