首页 > 解决方案 > 有没有使用 glDrawArrays() 绘制多个不同大小的点的无着色方法?

问题描述

我正在绘制一个具有不同颜色点的点云:

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);


    glVertexPointer(3, GL_FLOAT, 0, vertices.get());
    glColorPointer(3, GL_FLOAT, 0, colors.get());


    glDrawArrays(GL_POINTS, 0, n);


    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

有没有办法告诉 glDrawArrays (或默认着色器)为每个点的大小使用另一个客户端状态?

标签: opengl

解决方案


如果有,那将是非常低效的!

  1. 在核心上下文中使用可编程管道 => OpenGL 3.3 及更高版本。
  2. 创建一个包含所有顶点(您的点)的缓冲区。
  3. 使用每个点的大小创建一个缓冲区。
  4. 将缓冲区 2 和 3 传递给顶点着色器。将大小分配给全局 gl_PointSize。

如果您不明白我的建议,那么您必须从学习现代 OpenGL 渲染方式开始 :)


推荐阅读