繁体   English   中英

每个着色器属性的VBO没有VAO,还是其他方法?

[英]VBO per shader attribute without VAO, or different approach?

我在应用程序中使用了各种“嵌套”上下文(用于着色器和几何图形共享),所以我无法使用VAO,因为它们无法在上下文之间共享。

我的网格数据作为唯一顶点的“池”存储在一个VBO中,在另一个VBO中,我存储构成面的索引。 我目前在CAD应用程序中已成功使用此功能进行线框渲染,但是我想添加一个平面阴影模式-为此,我需要使用面法线。

如果我需要顶点法线,我只是将数据附加到顶点位置数据中,但是在这里我不能这样做,因为一个顶点将具有不同的面法线,具体取决于所渲染的面。 理想情况下,我想创建另一个保持我的面部法线和索引的VBO对,但是即使没有VAO,我也无法将两个VBO绑定到同一目标-即使它们用于不同的属性。

我知道通常的方法是使用VAO,它确实允许您将多个VBO分配给同一目标,但是我不能使用它们,因为我的几何环境是共享的,而VAO不是共享的。 是否有其他解决方案可以解决此问题?

如果我需要顶点法线,我只是将数据附加到顶点位置数据中,但是在这里我不能这样做,因为一个顶点将具有不同的面法线,具体取决于所渲染的面。 理想情况下,我想创建另一个保持我的面部法线和索引的VBO对,但是即使没有VAO,我也无法将两个VBO绑定到同一目标-即使它们用于不同的属性。

您的问题与VAO或缓冲区对象无关。 VAO不允许您具有多个索引列表。 它们不允许您拥有“脸部法线”。

顶点数组对象不过是一个存储顶点属性绑定的容器。 它们使您无法做没有它们就无法做的任何事情; 更改所有属性绑定只是一种简便的方法。

您需要将顶点位置分解为不同的面。 因此,您需要复制位置值,以便每个唯一的位置/正常对都是正确的唯一。 VAO不能绕开这个限制。

仅供参考:未共享VAO的原因是因为它们太简单了,无法打扰共享。 您可以轻松地在两个不同的上下文中设置相同的VAO。 只需在要使用的上下文中创建VAO,然后按照通常的方式进行设置即可。 它只是一个简单的状态对象。 它实际上不包含任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM