我正在尝试从中绘制小行星(八边形)。小行星类有两个成员。 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和一个属性positionvertex属性是顶点VBO,position是小行星的位置字段。

关于c++ - 找出OpenGL中C++类的跨步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28216837/

10-13 05:54