首先,您不能使用双精度浮点数,因为几乎任何 GPU 都不支持这些浮点数。因此,只需将结构的成员更改为浮点数...
在 glsl 中定义相同的结构。
struct myVertStruct
{
float x, y, z; // for spacial coords
float nx, ny, nz; // for normals
float u, v; // for texture coords
float a, b; // just a couple of custom properties
} myStructName;
然后,在 c/c++ 中实例化结构数组,创建 vbo,为其分配内存,然后将其绑定到着色器:
struct myVertStruct
{
float x, y, z; // for spacial coords
float nx, ny, nz; // for normals
float u, v; // for texture coords
float a, b; // just a couple of custom properties
};
GLuint vboID;
myVertStruct myStructs[100]; // just using 100 verts for the sake of the example
// .... fill struct array;
glGenBuffers(1,&vboID);
然后当你绑定属性时:
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glVertexAttribPointer(0, sizeof(myVertStruct) * 100, GL_FLOAT, GL_FALSE, 0, &struct);
glBindBuffer(GL_ARRAY_BUFFER, 0);
...然后将您的 vbo 绑定到您使用上面使用的 glsl 段创建的着色器程序。