Kivy + 3D - 只允许65535个indicies。我可以处理这个问题吗?

问题描述 投票:0回答:1

根据 文件在索引缓冲区中只能有65535个图标。这对于今天的3D图形来说是一个非常合理和痛苦的限制。所以,我的问题是--是否有可能以某种方式处理这个问题?例如,在源代码中改变一些东西?而这 真的 OpenGL ES 2.0的限制?

其实这个问题有一个很好的解决方法--拆分绘制调用,并为3D模型中的每65535个顶点和索引缓冲区分别设置,但这确实是对性能的打击,因为一些顶点需要在拆分缓冲区的不同部分之间复制。

我真的很感谢有人能给我解释一下,我在哪里可以找到kivy代码的这一部分,并改变它,或者解释一下,为什么我不能改变它,如果我真的不能。

python opengl opengl-es kivy opengl-es-2.0
1个回答
2
投票

根据

OpenGL ES通用配置文件规范2.0.25版(完整规范)(2010年11月2日)。

指数必须

是UNSIGNED_BYTE或UNSIGNED_SHORT中的一个,分别表示索引中的值是GL类型ubyte或ushort的索引。

所以,只要 Kivy正在使用 OpenGL 2我认为你被这个限制所困。

在OpenGL 3.3中,这个限制是index.必须是UNSIGNED_BYTE、UNSIGNED_SHORT或UNSIGNED_INT中的一种,这表明索引值的类型是GL uby。

必须是UNSIGNED_BYTE、UNSIGNED_SHORT或UNSIGNED_INT中的一种,分别表示索引值是GL类型ubyte、ushort或uint。


2
投票

如果您的 GL ES 实现支持 OES_element_index_uint 你可以自由使用的扩展 GL_UNSIGNED_INT 的索引。


1
投票

我真的很感激有人能给我解释一下,我在哪里可以找到kivy代码的这一部分,并把它改掉。

除了其他答案之外,并没有什么真正从根本上限制了Kivy在OpenGL ES 2上的应用,所以如果你想使用新版本的功能可能并不难。然而,你可能找不到人简单地给你一个不同的版本。你需要研究一下 Kivy图形代码 并可能扩展opengl cython包装器。

© www.soinside.com 2019 - 2024. All rights reserved.