0

我正在学习 opengl 并使用 VBO 的示例,它由 GL.DrawElements() 使用的颜色数组、顶点数组、法线数组和索引数组组成,结构看起来像(一个点表示下一个元素/项目):

 Rgba.Rgba.Rgba.....Xyz.Xyz.Xyz.Xyz....n1n2n3.n1n2n3.n1n2n3.....ijklmn.ijklmn.ijklmn

我需要将它们用作:

 R.R.R.R.R....g.g.g.g.g......b.b.b.b.b.....a.a.a.a.a.a.....X.X.X.X.X.X....y.y.y.y.y.y..
 ...z.z.z.z.z.z.......n1.n1.n1.n1.n1.n1......n2.n2.n2.n2.n2.n2.n2......n3.n3.n3.n3.n3...
 ...i.i.i.i.i.i......j.j.j.j.j.j.j.j......k.k.k.k.k.k.k.k.k

因为我将 opencl 内核的缓冲区数据用作 cl-gl-interop 并且第一种类型的结构进行跨步内存访问,这会降低主内存访问的性能,因为我只使用每个元素/项目的一个组件,例如仅“x”或只有“r”。但第二种结构是平等地使用所有内存库,适合我的需要。这种结构是否可用/适合opengl绘图操作?

4

1 回答 1

1

您通常将图像作为纹理传递。在您的情况下,您将使用 3 个单独的纹理或 3 层纹理数组,将它们组合成片段着色器中的 RGB 元组。

您将作为 3 个单独的 1 分量顶点属性传递的几何数据 (XYZ),步幅为 0,每个属性偏移量都指向相应数据的开头。

于 2013-08-14T12:20:20.223 回答