opengl - 有没有使用 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 3.3 及更高版本。
- 创建一个包含所有顶点(您的点)的缓冲区。
- 使用每个点的大小创建一个缓冲区。
- 将缓冲区 2 和 3 传递给顶点着色器。将大小分配给全局 gl_PointSize。
如果您不明白我的建议,那么您必须从学习现代 OpenGL 渲染方式开始 :)
推荐阅读
- eclipse - 没有名为 cairo 的模块 - Mac
- jenkins - Jenkins - 单击可用插件时出现错误立即检查按钮
- amazon-product-api - 使用亚马逊产品广告 API 获取产品类别
- python - 命令“python setup.py egg_info”在 /tmp/pip-install-jsegcbha/mysqlclient/ 中失败,错误代码为 1
- java - JavaFx 套接字编程和发送图像
- javascript - 将时间转换为字符串,如“一分钟前”在 Firefox 中不起作用
- javascript - 需要帮助将变量传递给Angular 2中的对话框
- android - 有没有更短的方法来使用 textView 在 Firebase 数据库中显示数据?
- python - 当两行具有相同的第一个值时如何将一行的数据添加到另一行
- node.js - 我应该重试 ENOENT 错误吗?