C OpenGL属性除数的最大值

C OpenGL属性除数的最大值,c,opengl,geometry-instancing,C,Opengl,Geometry Instancing,当在OpenGL中绘制实例时,属性除数只能设置为255作为最大值,所以要组合大网格,我必须将其分为多个实例。我需要更多地了解OpenGL中的除数,最大限制是取决于驱动程序/GPU还是在每个设备上总是255?您误解了它的工作原理 实例化意味着多次渲染同一网格,提供不同的每个实例数据,如变换等。实例数组是提供每个实例数据的一种方法 除数不是顶点计数的除数。它是实例计数的除数。因此,它实际上只做一些有用的事情,如果你使用 如果除数为零,则该属性不会发生实例化。如果除数为1,则实例中所有顶点的属性都相同

当在OpenGL中绘制实例时,属性除数只能设置为255作为最大值,所以要组合大网格,我必须将其分为多个实例。我需要更多地了解OpenGL中的除数,最大限制是取决于驱动程序/GPU还是在每个设备上总是255?

您误解了它的工作原理

实例化意味着多次渲染同一网格,提供不同的每个实例数据,如变换等。实例数组是提供每个实例数据的一种方法

除数不是顶点计数的除数。它是实例计数的除数。因此,它实际上只做一些有用的事情,如果你使用

如果除数为零,则该属性不会发生实例化。如果除数为1,则实例中所有顶点的属性都相同,但下一个实例将获得下一个值。如果除数为2,则前两个实例将获得相同的值,但后两个实例将获得不同的值。等等


除非你对实例化做了一些非常特殊的事情,否则你的除数应该是0或1。它永远不应该基于顶点计数。

规范中没有提到最大值,所以我想符合
GLuint
的每个值都是有效的。这要么是驱动程序中的错误,要么是代码中的错误。请出示代码。我知道实例化以及除数如何帮助我遍历vertex\u buffer\u对象上的数据。当我希望将转换传递给每个n个实例(从1到255的n个实例)时,它可以正常工作,但当我希望将转换传递给256个以上的实例时,它会像屏幕上的噪声风扇一样呈现。这听起来像是代码中的错误,好像您在某处使用了错误的数据类型。感谢我将除数定义为无符号字符,现在它可以完美地工作了。@Manh:为什么要给多个实例提供相同的每个实例数据?那似乎。。。事与愿违。有了320个三角形,我可以在同一个VAO中组合许多不同的模型,我看到的好处是我可以管理这些模型的顶点、法线和颜色,这意味着在许多情况下,我可以通过一个或多个绘图调用到达复杂的动态场景,并且将数据传输到gpu的开销很低。@Manh:我无法理解你说的话。听起来像是通过单个实例绘制调用渲染多个不同的模型,而不是在不同的位置渲染同一个模型。但这是不可能的。所以要么你没有正确解释你在做什么,要么你没有做你认为你在做的事情。我让这成为可能。我所做的是看到有80个三角形的模型和有100或120个三角形的模型是一样的。。。