使用Opengl绘制50k以上球体时如何提高速度
How to improve speed when drawing over 50k sphere with Opengl
现在,我使用glutSolidSphere绘制了多个球体,即50k+球体速度非常低。
有什么提高速度的方法或建议吗?
下面是我的代码。。。
void COpenGlWnd::OnPaint()
{
CPaintDC dc(this);
::wglMakeCurrent(m_hDC, m_hRC);
for(int k = 0; k < m_nCountZ; k++)
{
for(int j = 0; j < m_nCountY; j ++)
{
for(int i = 0; i < m_nCountX; i ++)
{
::glPushMatrix();
........
::glutSolidSphere(Size[i][j][k], 36, 36);
........
::glPopMatrix();
}
}
}
::SwapBuffers(m_hDC);
}
有关详细信息:球体将始终位于特定位置,但用户可以使用鼠标旋转并从差异视图中查看所有球体。
这里有几个建议:
- 创建一个包含球体的顶点缓冲区对象(VBO)并渲染它,而不是使用glutSolidSphere
- 看看实例化,就是用一个绘图调用绘制许多球体
以下文章几乎完全符合您的要求:http://sol.gfxile.net/instancing.html
如果你真的想要效率并且只处理球体,你实际上可以只使用一个四边形和一个着色器来绘制一个具有无限分辨率的球体。基本上用数学来计算球体。从一个没有纹理的圆圈开始。添加深度、法线、照明、纹理等。
这将计算每个像素的球体,使其具有所需的高分辨率。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 为什么在读取文件大小时文件IO速度会发生变化
- 计算每个节点的树高,帮助我解释这个代码解决方案
- Python中的for循环与C++有何不同
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- C++高阶模板
- 获取 SFML 窗口的 HWND 和高可用性?
- Opencv 恢复到比我设置的更高的分辨率
- 输入较高值时的分段代码
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 高精度双精度的 Sprintf 格式化问题
- 在C++中释放内存期间,迭代器与指针有何不同
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 使用来自串行端口的字符串数据来操作振镜扫描仪在更高的速度下会出错
- 提振.计算速度比普通CPU慢
- 更好的可读性和简单性vs更高的复杂性和编程速度,选择什么