2015-03-17 2 views
0

Я загружающий 3D Skeleton model (exported from Blender) с помощью Cocos3D но получила следующее утверждение:Вершины превысила максимально допустимый по OpenGL ES

*** Assertion failure in -[CC3OpenGLES2IOS drawIndicies:ofLength:andType:as:], /Users/phamdacloc/Downloads/xxx/cocos3d201/Projects/CC3HelloWorld/cocos3d/cocos3d/OpenGL/CC3OpenGL.m:282 

Вот где утверждают, пришел из:

-(void) drawIndicies: (GLvoid*) indicies ofLength: (GLuint) len andType: (GLenum) type as: (GLenum) drawMode { 
#if CC3_OGLES 
    CC3Assert((type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_BYTE), 
       @"OpenGL ES permits drawing a maximum of 65536 indexed vertices, and supports only" 
       @" GL_UNSIGNED_SHORT or GL_UNSIGNED_BYTE types for vertex indices"); 
#endif 
    glDrawElements(drawMode, len, type, indicies); 
    LogGLErrorTrace(@"glDrawElements(%@, %u, %@, %p)", NSStringFromGLEnum(drawMode), len, NSStringFromGLEnum(type), indicies); 
    CC_INCREMENT_GL_DRAWS(1); 
} 

Из сообщения выше, я понимаю, что модель слишком детализирована и содержит больше вершин, чем разрешено (65536). Затем я удалил все спинные шнуры, голову, ноги, и на этот раз Cocos3D загружается успешно. Есть ли способ сохранить все эти вершины или я должен разделить модели на несколько файлов .pod?

На боковой ноте, когда я открываю файл skeleton.blend в «Object Mode», я вижу 205,407 вершин в верхнем правом углу Blender. Однако, когда я перешел из «Режим объекта» в «Режим редактирования» и выбрал все вершины, присутствовало только 33 574 + 4 773 = 38 347 вершин. Почему «Режим объекта» показывает больше вершин, чем «Режим редактирования»?

ответ

0

Если у вас все в порядке с зависимостью от устройства/платформы, наиболее разумно новейшие устройства поддерживают расширение OES_element_index_uint. Это добавляет поддержку индексов типа GL_UNSIGNED_INT, поверх типов GL_UNSIGNED_SHORT и GL_UNSIGNED_BYTE типов, поддерживаемых базой ES 2.0.

На iOS, который, как вам кажется, используется, это расширение поддерживается всеми графическими процессорами SGX Series 5, A7 и A8 (источник: https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html). Я ожидаю, что поддержка этого расширения также будет присутствовать на устройствах Android аналогичного возраста.

С 32-разрядными индексами память будет исчерпана задолго до того, как вы исчерпали диапазон индексов.

Если вы хотите, чтобы это работало с чистой функциональностью ES 2.0, вы в значительной степени должны разделить свою модель на более мелкие части. По крайней мере, я не могу придумать разумную альтернативу.

+0

Спасибо. Я решил использовать другое решение, применив инструмент Decimate для сокращения вершин. –

Смежные вопросы