代码之家  ›  专栏  ›  技术社区  ›  Loc Pham

顶点超过OpenGL ES允许的最大值

  •  0
  • Loc Pham  · 技术社区  · 11 年前

    我正在加载 3D Skeleton model (exported from Blender) 使用Cocos3D,但得到以下断言:

    *** 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文件?

    顺便说一下,当我打开 混合骨粉 在“对象模式”中,我在Blender的右上角看到205407个顶点。然而,当我从“对象模式”更改为“编辑模式”并选择所有顶点时,仅出现33574+4773=38347个顶点。为什么“对象模式”显示的顶点比“编辑模式”多?

    1 回复  |  直到 11 年前
        1
  •  0
  •   Reto Koradi    11 年前

    如果您对某种程度的设备/平台依赖性没有问题,那么最新的设备支持 OES_element_index_uint 扩大这增加了对类型索引的支持 GL_UNSIGNED_INT ,在类型的顶部 GL_UNSIGNED_SHORT 和 GL_UNSIGNED_BYTE 基本ES 2.0支持的类型。

    在您似乎正在使用的iOS上,所有SGX Series 5、A7和A8 GPU都支持此扩展(来源: https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html ). 我希望类似年龄的Android设备也支持此扩展。

    使用32位索引时,内存将在耗尽索引范围之前耗尽。

    如果你想用纯ES2.0功能实现这一点,你必须把你的模型分成更小的部分。至少我想不出一个合理的选择。