【问题标题】:Possible to store different vertex attributes and indices in same VBO?可以在同一个 VBO 中存储不同的顶点属性和索引吗?
【发布时间】:2017-05-20 04:05:33
【问题描述】:

(说到 OpenGL 3.3)有没有办法在同一个 VBO 中存储不同的顶点属性?我的意思不是与“步幅”交错,我的意思是例如 VBO 开头的位置和 VBO 结尾的纹理坐标。

如果是,那么索引也是如此吗?我可以将顶点索引和顶点属性存储在同一个 VBO 中并将其绑定到 DrawElements 类型的绘图调用吗? 谢谢!

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    是的,不需要交错数据。

    gl命令的最后一个参数glVertexAttribPointer() "指定当前绑定到GL_ARRAY_BUFFER目标的缓冲区的数据存储中数组中第一个通用顶点属性的第一个分量的偏移量。初始值为 0。”

    只需自行计算该偏移量并将其传递给命令即可。

    我可以将顶点索引和顶点属性存储在同一个 VBO 中吗? 为 DrawElements 类型的绘图调用绑定它?

    如果您使用不同的glVertexAttribPointer 或不同的glDrawxx,则没有问题。
    如果顶点和索引具有不同的类型(浮点数和整数)和步幅,则不能同时读取它们。

    【讨论】:

    • 仅供参考:基于 ANGLE 的 OpenGL 实现(例如您可能从 Qt 或 WebGL 实现中获得)确实不允许您使用缓冲区对象作为顶点和索引数据的源。但是桌面 GL 和 GL ES 对此没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多