我正在尝试从中绘制小行星(八边形)。小行星类有两个成员。 vertex
指定其位置,vertices
指定八边形中的点。我的问题是如何找出此类对象的步幅和偏移量(对于glVertexAttribPointer和glBufferData)以进行绘制?
class asteroid
{
std::pair <float, float> vertex;
std::vector<std::pair <float, float>> vertices;
}
然后,我有一个
vector<asteroid> asteroids;
来存储我所有的小行星。 最佳答案
顶点的步幅是sizeof(vertices[0])
,要上传到glBufferData的偏移量是reinterpret_cast<void*>(&vertices[0])
glVertexAttribPointer的偏移量是reinterpret_cast<void*>(&vertices[0].first) - reinterpret_cast<void*>(&vertices[0])
但是,保持这样的顶点不是一个好主意,只需为所有小行星创建一个(共享的)VBO,然后取消矢量即可。
然后,您可以使用instancing,这样小行星的位置将位于单独的VBO中,并设置了glVertexAttribDivisor
属性。在顶点着色器中,您将拥有一个属性vertex
和一个属性position
。 vertex
属性是顶点VBO,position
是小行星的位置字段。
关于c++ - 找出OpenGL中C++类的跨步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28216837/