Решение проблемы разного количества текстурных координат и количества вершин модели в 3DS MAX.
Автор: AntanubiS
Часто встречаются вопросы о том как быть с выводом графики через массивы вершин, если 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