我要使用OpenGL绘制5万条以上的线条,和很多的圆弧,圆弧是由很多小直线段连接成了的。绘制完后,需要支持缩放,平移。我现在缩放使用的方法是改变glOrTh的投影空间大小,平移使用的glTranslate平移,然后重绘,但是绘制效率太低了。我的这个情况,opengl的显示列表是不能使用的,因为显示列表只能绘制一个坐标值不变的对象。
我想请问:在大数据的情况下,有什么方法可以快速的缩放和平移,旋转?OpenGL绘图效率

解决方案 »

  1.   

    先说一下,缩放可以使用glScale()函数。
    然后作为矩阵的替代方法,可以使用四元数进行坐标变换操作。我也正在学习,这里有我写的两篇日志,可以参阅一下。
    四元数学习之四元数和矩阵的转换
    OpenGL中glRotatef()函数究竟对矩阵做了什么
    最后可能需要使用OpenGL里面高级的知识了,比如不使用glVertex()函数,而使用VBO、VAO等等。
      

  2.   


    1:如果你的对象变化频率不是很高的话,还是可以使用displaylist,改变的时候调整
    2:能采用displaylist的部分(不变的对象组)尽量做成list
    3:如果你每次刷新都要用用glBegin绘制全部线条和圆弧, 不知道有什么办法可以解决
    4:大数据的话自己做可视区域判断,只处理可见形体,过滤掉区域外形体
      

  3.   

    我是做的数控机床的3维路径显示,类似AutoCAD,Opengl不熟悉,Opengl可以不使用刷新视图就调整观察点吗?
      

  4.   

    我是做的数控机床的3维路径显示,类似AutoCAD,Opengl不熟悉,Opengl可以不使用刷新视图就调整观察点吗?我知道了,你的轨迹是实时计算现实还是计算完毕后显示GL中任何改变都需要刷新视图后才能显示出来,包括视点的改变(旋转,平移,缩放),模型的改变(增删新元素,位置改变...)加工轨迹如果是一边计算一边显示,那就不能用显示列表
    如果计算完成后显示,可用显示列表
      

  5.   

    我是做的数控机床的3维路径显示,类似AutoCAD,Opengl不熟悉,Opengl可以不使用刷新视图就调整观察点吗?我知道了,你的轨迹是实时计算现实还是计算完毕后显示GL中任何改变都需要刷新视图后才能显示出来,包括视点的改变(旋转,平移,缩放),模型的改变(增删新元素,位置改变...)加工轨迹如果是一边计算一边显示,那就不能用显示列表
    如果计算完成后显示,可用显示列表
    嗯,是的,我的位置点都是实时改变的,所以使用显示列表会很复杂,但是autoCAD的复杂3D绘制很快,不知道他怎么做的。