Я пытаюсь воссоздать код Огре, использованный здесь (в Irrlicht):
http://dave.uesp.net/wiki/Block_Land_3
Для этой части кода:
MeshChunk->position(x, y, z+1); MeshChunk->normal(-1,0,0); MeshChunk->textureCoord(0, 1);
Я сделал это:
SMesh* Mesh = new SMesh();
SMeshBuffer *buf = 0;
buf = new SMeshBuffer();Mesh->addMeshBuffer(buf);
buf->drop();
block_t Block;
block_t Block1;
int iVertex = 0;
buf->Vertices.reallocate(3);
buf->Vertices.set_used(3);
....
buf->Vertices[0] = S3DVertex(vector3df(x, y, z+1), vector3df(-1,0,0), SColor(255, 0,0,0), vector2df(0, 1));
Но как это можно перевести:
MeshChunk->triangle(iVertex, iVertex+1, iVertex+2);
Это выглядит как добавление индексов, в частности, набора из 3 индексов вершин;
buf->Vertices[0] = S3DVertex(vector3df(x, y, z+1), vector3df(-1,0,0), SColor(255, 0,0,0), vector2df(0, 1));
buf->Vertices[1] = S3DVertex(vector3df(x, y+1, z+1), vector3df(-1,0,0), SColor(255, 0,0,0), vector2df(0, 1));
buf->Vertices[2] = S3DVertex(vector3df(x, y+1, z), vector3df(-1,0,0), SColor(255, 0,0,0), vector2df(0, 1));
buf->Vertices[3] = S3DVertex(vector3df(x, y, z), vector3df(-1,0,0), SColor(255, 0,0,0), vector2df(0, 1));buf->Indices.push_back(0);
buf->Indices.push_back(1);
buf->Indices.push_back(2);
//MeshChunk->triangle(iVertex, iVertex+1, iVertex+2);
buf->Indices.push_back(2);
buf->Indices.push_back(3);
buf->Indices.push_back(0);
//MeshChunk->triangle(iVertex+2, iVertex+3, iVertex);
Verticies — это список позиций, индексы показывают порядок их использования (в зависимости от их позиции в Verticies).
Вы можете повторно использовать индексы Verticies, если треугольники имеют общие точки — это сделает границу между треугольниками мягкой, если треугольники не копланарны, или вы можете создать несколько вершин в одной позиции с учетом жесткого края.
Других решений пока нет …