Войти
Подсказки

Решение проблемы разного количества текстурных координат и количества вершин модели в 3DS MAX.

Автор:

Часто встречаются вопросы о том как быть с выводом графики через массивы вершин, если 3DS MAX генерирует различное количество вершин и текстурных вершин (пар/троек текстурных координат) со своими, различными индексами для вершин и для текст. координат. Для получение массивов данных одного размера после экспорта (или во время экспорта) можно использовать такой код:

количество вершин - numVerts;
количество текстурных вершин - numTVerts;
количество треугольников - numTris;
вершины - vertices;
текстурные вершины - texverts;
индексы вершин - Faces;
индексы тексурных вершин - TexFaces;
конечный вершины - finalvertices;
конечный текстурные вершины - finaltexverts;
конечные индексы - finalindices;

float *finalvertices = 0;
float *finaltexverts = 0;
float *finalindices = 0;
if(numVerts>=numTVerts)
{
  finalvertices = new float[numVerts*3];
  finaltexverts = new float[numVerts*2];
  finalindices = new int[numTris*3];
  memcpy(finalindices, Faces, numTris*3*sizeof(int));
  memcpy(finalvertices, vertices, numVerts*3*sizeof(float));
  for(int i = 0; i<numTris; i++)
  {
    memcpy(finaltexverts[Faces[i*3+0]*2], texverts[TexFaces[i*3+0]*2], 2*sizeof(float));
    memcpy(finaltexverts[Faces[i*3+1]*2], texverts[TexFaces[i*3+1]*2], 2*sizeof(float));
    memcpy(finaltexverts[Faces[i*3+2]*2], texverts[TexFaces[i*3+2]*2], 2*sizeof(float));
  }
}
else
{
  finalvertices = new float[numTVerts*3];
  finaltexverts = new float[numTVerts*2];
  finalindices = new int[numTris*3];
  memcpy(finalindices, TexFaces, numTris*3*sizeof(int));
  memcpy(finaltexverts, texverts, numTVerts*2*sizeof(float));
  for(int i = 0; i<numTris; i++)
  {
    memcpy(finalvertices[TexFaces[i*3+0]*3], vertices[Faces[i*3+0]*3], 3*sizeof(float));
    memcpy(finalvertices[TexFaces[i*3+1]*3], vertices[Faces[i*3+1]*3], 3*sizeof(float));
    memcpy(finalvertices[TexFaces[i*3+2]*3], vertices[Faces[i*3+2]*3], 3*sizeof(float));
  }
}

То есть, считаем все по тем индексам, вершин которых больше (во как завернул:)

27 мая 2004