gpt4 book ai didi

opengl - OpenGL VBO 中的颜色?

转载 作者:行者123 更新时间:2023-12-02 08:35:20 26 4
gpt4 key购买 nike

我正在尝试在 OpenGL 中使用单个结构和单个 VBO 向我的对象添加颜色。为此,我创建了一个 Vertex 结构,如下所示:

typedef struct {
float x;
float y;
float z;
float r;
float g;
float b;
float a;
} Vertex;

我已经知道我正在正确设置所有坐标和颜色以获得我想要的,因为我对列表中存储的每个对象进行了迭代测试,并使用 glVertex3f 绘制点并设置颜色和 glColor4f (这比我正在寻找的要慢得多)。但是当我尝试使用 VBO 绘制它时,我发现到处都是一大堆乱七八糟的彩色三角形。

我的渲染循环中绘制 VBO 的部分如下所示:

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, NULL);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL);
glDrawArrays(GL_TRIANGLES, 0, vertex_amount);
glBindBuffer(GL_ARRAY_BUFFER, 0);

我做错了什么?

最佳答案

glVertexPointer(3, GL_FLOAT, 0, NULL);
^

Vertex 数组中的位置值不是紧密排列的,因此您不能使用 0 来表示 stride。使用sizeof(顶点)

glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL);
^^^^^^^^^^^^^^^^^^^

我……不确定你来这里的目的是什么。也许您认为glVertexPointer()/glColorPointer()的第三个参数是 pointer 而不是 stride?将 offsetof() 移动到最后一个参数,pointer

一起:

glVertexPointer(3, GL_FLOAT, sizeof( Vertex ), offsetof(Vertex, x) );
glColorPointer(4, GL_FLOAT, sizeof( Vertex ), offsetof(Vertex, r) );

您可能需要将 pointer 参数值转换为 void*,具体取决于您实现 offsetof() 的方式。

关于opengl - OpenGL VBO 中的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40165256/

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