2017-02-26 53 views
-2

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

+0

该规范没有提到最大值,所以我想每个适合GLuint的值都是有效的。这可能是驱动程序或代码中的错误。请显示代码。 – ybungalobill

+0

我知道实例化以及divisor如何帮助我遍历vertex_buffer_object上的数据。当我想要将一个变换传递给每个n实例(n从1到255)时它工作正常,但是当我想要将一个变换传递给更多的256个实例时,它会呈现为屏幕中的噪声扇。 – Manh

+0

这听起来像是代码中的错误,就好像你在某处使用了错误的数据类型。 – ybungalobill

回答

1

您误会了divisor and instance arrays的工作原理。

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

除数不是顶点数的除数。它是实例计数的除数。因此,如果您使用instanced rendering,它实际上只会有用。

如果除数为零,则不会为该属性发生实例化。如果除数为1,则实例内的所有顶点的属性将相同,但下一个实例将获得下一个值。如果除数是2,那么前两个实例会得到相同的值,但接下来的两个会得到不同的值。等等。

除非你正在做一些非常特殊的实例化,否则你的除数应该是0或1.它不应该基于顶点数。

+0

有320个三角形,我可以在同一个VAO中组合很多不同的模型,我看到的好处是我可以管理这些模型的顶点,正常,颜色,这意味着我可以通过一个或多个实例几个绘制调用和低传输数据到GPU的开销。 – Manh

+0

@Manh:我无法破译你在说什么。您听起来像是通过单个实例化绘制调用渲染多个*不同*模型,而不是在不同地方使用相同的模型。但那是*不可能*。所以要么你不正确地解释你在做什么,要么你没有做你认为你在做的事。 –

+0

我使它成为可能。我所做的是看到具有80个三角形的模型与具有100个或120个三角形的模型相同... – Manh

相关问题