用于VBO-OpenGL的顶点阵列
Vertex Array for VBO -OpenGL
我有一个包含坐标的数组。它看起来像:
glm::vec3* Vertices;
如何将其元素传递给glVertexAttribPointer。唯一的方法就是一维数组吗?例如我能用这样的东西吗:
float* Vertices[3];
在阅读我的答案之前:显然,我的答案只是部分正确,您可以使用glVertexAttribPointer,而无需手动写入GRAM,而是使用客户端内存,但最好使用VBO,而不是使用这种方法。
您不会将某些内容传递给glVertexAttribPointer
。在使用glBindBuffer
绑定缓冲区之后,您必须首先使用glBufferData
将其写入GRAM。CCD_ 4将仅描述在该绑定缓冲区中将在哪里找到数据。这一点表明,您可以将几乎任何想要的数据传递给GRAM。如果你有vec3的数组(我假设vec3只包含浮点x、y和z),这个数组的内存看起来像x1, y1, z1, x2, y2, z2, x3, y3, z3
等等。如果它被写入你的GRAM,你必须指定这个数据,这样你的GPU才能知道该怎么做。示例:
glBindBuffer(GL_ARRAY_BUFFER, bufferID);
bufferID必须在(glGenBuffers
)之前分配。
glBufferData(GL_ARRAY_BUFFER, 36, vertices, GL_STATIC_DRAW);
写入GL_ARRAY_buffer中绑定的缓冲区(使用glBindBuffer)。写入36个字节(浮点=4个字节,1个只有位置的顶点=3个浮点,1个三角形=3个顶点,对于1个三角形总计36个字节)GL_STATIC_DRAW表示我们将写入一次,然后只绘制它。
glVertexPointer(3, GL_FLOAT, 0, 0)
- 每个顶点有3个坐标(
size
) - 它们是浮动(GL_FLOAT、
type
) - 缓冲区大小为(float)*3的整个数据集有12个字节的长度,因为这里只使用一个指针,所以当您传递0(elements*typesize)(
stride
)时,它可以为自己计算步长 - 它们从缓冲区(0,
offset
)的开头开始
为了简单起见,我在这里使用了glVertexPointer。
你可以在LWJGL Wiki 中找到一个非常好的VBO教程
http://www.lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_%28VBO%29
- 如何循环打印顶点结构
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 顶点阵列与类问题
- 我的OpenGL顶点阵列将其抽象成课程不再起作用
- 带顶点阵列的OpenGL照明
- 顶点阵列GLFW崩溃C 程序
- 使用顶点阵列、四边形阵列来创建四边形网格
- 用于VBO-OpenGL的顶点阵列
- 使用客户端顶点阵列在没有VBO的情况下在opengl 3.1+中进行渲染
- OpenGL ES顶点着色器中的动态大小阵列;用于混合形状/变形目标
- 使用openGL顶点阵列的白屏
- 如何使用“顶点阵列”对象
- 旋转顶点阵列对象不起作用
- 从阵列中查找重复的三维顶点
- OpenGL顶点阵列,根据用户输入绘制
- OpenGL更新顶点阵列/缓冲区
- 你能用OpenGL 4.4的顶点阵列做到这一点吗