VBO 通用几何
Posted
技术标签:
【中文标题】VBO 通用几何【英文标题】:VBO General Geometry 【发布时间】:2015-03-20 17:16:44 【问题描述】:我正在使用 Haskell 制作渲染引擎,并正在优化我的代码以使用 VBO。我想稍微抽象一下几何的类型,因为数量很多,并且想把它粘在一个函数和几个参数中。
例如,如果我有一组几何图形,它是顶点和法线对的列表,即[(Vertex, Normal)]
。我将步幅设置为 6,在描述符中,将每个的大小设置为 3,然后将法线的偏移设置为 3。
现在,如果我只想做一个顶点列表,即 [Vertex],我可以将步幅的大小设置为 3,将法线的大小设置为 0,但仍然设置指针和所有内容吗?
【问题讨论】:
【参考方案1】:从OpenGL documentation 到glVertexAttribPointer
:
尺寸
指定每个通用顶点属性的组件数。必须
为 1, 2, 3, 4。此外,接受符号常量 GL_BGRA
通过 glVertexAttribPointer。初始值为 4。
因此,您不能调用指向大小为零的对象的指针。为了不使用法线,您必须使用不同的 VBO。
【讨论】:
为什么要使用不同的 VBO?缓冲区对象只是完全在用户控制之下的内存。没有什么可以阻止在同一个 VBO 中拥有多个具有不同顶点格式的对象。 好的,很酷。我知道那时我可以抽象出多少。谢谢!是的,我将使用相同的 VBO。所有的绑定和东西都应该是一样的,我认为只是偏移量和东西不同。谢谢你们! @Gentatsu 如果我正确理解您要做什么,那么您的 VBO 存储应该没有问题。但是如果没有法线,您将必须跳过glVertexAttribPointer()
调用法线。并确保您没有启用相应的属性。
是的,这就是我从答案中得到的。它位于相当复杂的代码链中,所以我不想过多地玩弄它,以防万一我失去了原来的位置,无论如何不得不再次回滚。很高兴知道我的立场,并做一点,而不是直接潜入。谢谢!以上是关于VBO 通用几何的主要内容,如果未能解决你的问题,请参考以下文章