sách gpt4 ai đã đi

opengl - OpenGL 是如何知道如何通过 glDrawElements() 使用普通数据的?

In lại 作者:行者123 更新时间:2023-12-05 04:15:38 28 4
mua khóa gpt4 Nike

我花了几天时间构建了一个使用简单光照在 OpenGL 中渲染立方体的工作示例

我有:

vertices = {...};
normals = {...};
vertex_indices = {...};
normal_indices = {...};

(1) 我设置我的 VBO

glBufferSubData(GL_ARRAY_BUFFER, 0, vertSize, &vertices[0]); // vertices
glBufferSubData(GL_ARRAY_BUFFER, vertSize, normSize, &normals[0]); // normals

(2) 我启用我的顶点指针

glEnableVertexAttribArray(0);
glVertexAttribPointer(0,..)

glEnableVertexAttribArray(1);
glVertexAttribPointer(1,..)

(3) 我还设置了我的索引缓冲区

 glBufferData(GL_ELEMENT_ARRAY_BUFFER, indcSize, & vertex_indices[0], GL_STATIC_DRAW);

然后在我的渲染方法中调用glDrawElements

glDrawElements(GL_TRIANGLES, (int)vertex_indices.size(), GL_UNSIGNED_INT, 0);

我没有在任何地方传递正常索引,但一切似乎都运行良好。

我认为我没有正确理解 glDrawElements。在没有正常指数的情况下,照明是如何工作的? glDrawElements 应该只获取顶点索引吗?

1 Câu trả lời

I don't think I understand glDrawElements correctly. How did the lighting work without the normal indices? was glDrawElements suppose to only get the vertex indices?

在 OpenGL 中,每个属性没有单独的索引。就 OpenGL 而言,顶点是 tất cả 属性的 n 元组,例如位置、颜色、法向量、tex 坐标等等。

对于立方体,您至少需要 24 个顶点。只有 8 个角位置,但每个角都连接到 3 个不同的面,每个面都有不同的法线。这意味着,您需要在每个角上有 3 个单独的顶点,它们都在同一位置,但它们的法线方向都不同。

Vì vậy,glDrawElements 仅使用一个索引数组,这是同时指向所有启用的顶点属性数组 的索引。您的 normal_indices 数组根本没有被使用。如果它仍然按预期工作,那么您的正常数据恰好以正确的方式组织。

关于opengl - OpenGL 是如何知道如何通过 glDrawElements() 使用普通数据的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642410/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com