c++ - 找出 OpenGL 中 C++ 类的步幅

标签 c++ opengl

我有一门课,我试图从中画出一颗小行星(八边形)。小行星类有两个成员。 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 并取消 vector 。

然后你可以使用instancing所以小行星的位置将在一个单独的 VBO 中,并带有 glVertexAttribDivisor 属性放。在顶点着色器中你有一个属性 vertex和属性 position . vertex属性是顶点 VBO 和 position是小行星的位置场。

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

相关文章:

c++ - 在没有 MSVCRT 运行时的情况下在 Visual Studio 2012 中编译 C

c++ - vs2005和vs2010模板函数的优先级不同

java - token 语法错误 'class' @ expected [JAVA - LWJGL]

java - 如何使用3.2或以上版本在LWJGL中显示文本

c++ - 将 Nsight 设置为与现有 Makefile 项目一起运行

c++ - 如何在 C++ 中读取和解析 CSV 文件?

c++ - 内联静态数据导致节类型冲突

c++ - 为什么我必须链接到 opengl32.lib

opengl - glUniformMatrix4fv 是否立即复制传入指针指向的数据?

跨顶点的 OpenGL 颜色插值