如何在顶点缓冲区数组中制作一组多边形的多个副本?
Posted
技术标签:
【中文标题】如何在顶点缓冲区数组中制作一组多边形的多个副本?【英文标题】:How do I make multiple copies of a set of polygons in a Vertex Buffer Array? 【发布时间】:2015-08-24 21:13:39 【问题描述】:在 OpengL 1 中,在带有 OpenTK 的 Visual Basic 中,如果我想将一百个立方体全部排列成圆形,我会写
glRef = GL.GenLists(1)
GL.NewList(glRef, ListMode.Compile)
GL.Begin(PrimitiveType.Traingles)
GL.Vertex3....for the vertices of a cube
GL.End()
GL.EndList()
这会给我 glRef 作为我可以做的句柄
For i = 0 to 100
GL.PushMatrix()
GL.Rotate(3.6*i, 0, 0, 1)
GL.Translate(5.0, 0.0, 0.0)
GL.CallList(glRef)
GL.PopMatrix()
Next
然后把一百个立方体排成一个圆圈。
如何在 Open GL 2.0 或更高版本中使用顶点缓冲区对象做同样的事情?
我开始
GL.GenBuffer(VBOid)
Dim VertexArray() As Single = ....for the vertices of a cube
然后将它绑定到顶点缓冲区
GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid(0))
GL.BufferData(BufferTarget.ArrayBuffer, SizeOf(GetType(Single)) * VertexArray.Count, VertexArray, BufferUsageHint.StaticDraw)
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, False, 0, VertexArray)
然后在我的绘图程序中,我按照以下方式做一些事情
GL.EnableClientState(ArrayCap.VertexArray)
GL.BindBuffer(BufferTarget.ArrayBuffer, PrimitiveID(0))
GL.DrawElements(PrimitiveType.Triangles)
但此时添加第二个 DrawBuffer 命令和变换似乎并没有为我创建第二个立方体。我一直把头撞在墙上,在互联网上到处找,我找不到一个直接的参考来告诉我怎么做,甚至确认它是可能的。
这不是它应该的工作方式,我只是应该发送一百组立方体顶点,还是有办法复制顶点缓冲区对象并对其应用变换? (或者我可能在某个地方做错了,我需要继续寻找错误 - 任何提示都会有所帮助)
【问题讨论】:
【参考方案1】:我认为GL.DrawBuffer
在这个地方不是正确的命令。它用于在 FBO 的上下文中指定可以写入哪些附着点。
由于您尝试在这里绘制 VBO,我希望使用 GL.DrawArrays
或 GL.DrawElements
。
【讨论】:
是的,很抱歉它应该是其中任何一个,它在我的代码中的 DrawElements,但为了解释的目的,我在这里对其进行了大量简化。我已经对其进行了编辑以反映这一点。鉴于此,知道如何在 VBO 中克隆对象吗?以上是关于如何在顶点缓冲区数组中制作一组多边形的多个副本?的主要内容,如果未能解决你的问题,请参考以下文章