用 QVector <QVector3D>填充 VBO
Filling a VBO with QVector<QVector3D>
我在一个教程中看到,您可以直接用std::vector<glm::vec3>
填充VBO,如下所示:
std::vector< glm::vec3 > vertices;
// fill the vector and create VBO
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
现在我想知道我是否可以用QVector<QVector3D>
做同样的事情。CCD_ 3可以代替CCD_。但QVector3D
和glm::vec3
都不是POD(如果我错了,请纠正我),而且glm::vec3
在某种程度上起作用。这是标准行为吗?我可以试着用QVector3D
做同样的事情吗?
我不会以这种方式使用glm::vec3,因为我不记得看到过任何指定其内部布局的文档。type_ptr.hpp中定义了一个glm::value_ptr(obj)帮助程序,这让我更加怀疑。
也就是说,你可以检查它的源代码,自己验证它有3个浮点值,没有额外的字段,还可以在编译时检查sizeof(glm::vec3)==3*sizeof(float),以防结构填充有任何有趣的事情。
粗略地看一下QVector3D的文档并没有显示任何内部内存布局的指示。因此,就像使用glm::vec3一样,您需要检查其源代码,以验证x、y、z是否按您期望的顺序排列,然后验证sizeof(QVector3d)==sizeof(GLfloat)*3。
还要记住,虽然YMMV可能在您的特定编译器/平台上工作,但如果试图移植到其他平台,则YMMV。或者就这一点而言,如果更新到任一库的新版本。
编辑:关于OP上关于POD的评论,我认为这实际上并不相关?"琐碎"answers"标准布局"都不意味着类中没有用于记账的额外字段,也没有任何关于填充的内容,而且我不确定您是否能够首先根据发布的文档保证这两种分类。琐碎布局与标准布局与POD
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 流填充字符的默认定位
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- OpenGL VBO Indexing ( How to compute Index Array)
- C++:使用缓冲区中的数据填充结构
- 如何将零填充的多维数组传递给 C++ 中的函数?
- Cryptopp:获取密码输入的填充字符串
- GLSL着色器不渲染任何内容,VAO已填充,VBO已填充顶点
- 用 QVector <QVector3D>填充 VBO