gpt4 book ai didi

ios - opengl es VBO 用法 - 无几何渲染

转载 作者:可可西里 更新时间:2023-11-01 05:41:55 24 4
gpt4 key购买 nike

我正在尝试为我的渲染代码设置 VBO 以获得更高的 fps。它适用于顶点位置、颜色和纹理坐标的单独 VBO,但在转移到交错顶点数据后,没有几何渲染。这是我的设置函数:

const GLsizeiptr data_size = NUMBER_OF_CUBE_VERTICES * 9 *sizeof(float);
// allocate a new buffer
glGenBuffers(1, &cubeVBO);
glBindBuffer(GL_ARRAY_BUFFER, cubeVBO);
glBufferData(GL_ARRAY_BUFFER, data_size, data, GL_STATIC_DRAW);

float* ptr = (float*)data;
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 0));
glEnableVertexAttribArray(ATTRIB_VERTEX);

glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 3));
glEnableVertexAttribArray(ATTRIB_COLOR);

glVertexAttribPointer(ATTRIB_TEXCOORD0, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 7));
glEnableVertexAttribArray(ATTRIB_TEXCOORD0);

glGenBuffers(1, &cubeIBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeIBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, NUMBER_OF_CUBE_INDICES*sizeof(GLubyte), s_cubeIndices, GL_STATIC_DRAW);

数据数组如下所示:

static float data[] =
{
// position // // color // //UV//
-1.0, +1.0, +1.0, 255,0,0,255, 0,0,
-1.0, -1.0, +1.0, 0,255,0,255, 0,0,
+1.0, +1.0, +1.0, 255,0,255,255, 0,0,
+1.0, -1.0, +1.0, 255,0,0,255, 0,0,

+1.0, +1.0, +1.0, 255,0,0,255, 0,0,
+1.0, -1.0, +1.0, 255,0,0,255, 0,0,
+1.0, +1.0, -1.0, 255,255,0,255, 0,0,
+1.0, -1.0, -1.0, 255,0,0,255, 0,0,

+1.0, +1.0, -1.0, 255,0,255,255, 0,0,
+1.0, -1.0, -1.0, 255,255,0,255, 0,0,
-1.0, +1.0, -1.0, 0,255,0,255, 0,0,
-1.0, -1.0, -1.0, 255,0,0,255, 0,0,

-1.0, +1.0, -1.0, 0,0,255,255, 0,0,
-1.0, -1.0, -1.0, 255,0,0,255, 0,0,
-1.0, +1.0, +1.0, 255,255,0,255, 0,0,
-1.0, -1.0, +1.0, 255,0,0,255, 0,0,
};

这是我的渲染代码:

glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glBindBuffer(GL_ARRAY_BUFFER, cubeVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeIBO);
glDrawElements(GL_TRIANGLE_STRIP, NUMBER_OF_CUBE_INDICES, GL_UNSIGNED_BYTE, s_cubeIndices);

我还尝试在没有索引缓冲区的情况下使用 DrawArrays 函数,但结果是一样的——没有呈现几何图形。当我的程序运行时,输出窗口中也有 GLError 1282。如果对我的问题有任何帮助,我将不胜感激。

最佳答案

当您使用缓冲区对象时,glVertexAttribPointer 的最后一个参数应该偏移到您需要的数据。例如,您的 ATTRIB_VERTEX 数组将从偏移量 0 开始,ATTRIB_COLOR 数组从偏移量 sizeof(float) * 3 开始(因为位置需要三个 float ),等等...

当您不使用缓冲区对象,而是使用顶点数组时,您必须通过调用取消绑定(bind)当前绑定(bind)的缓冲区对象到 GL_ARRAY_BUFFER 目标

glBindBuffer(GL_ARRAY_BUFFER, 0);

关于ios - opengl es VBO 用法 - 无几何渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com