这两天要做个分形的程序,用到IFS的算法,其中有个地方是这样的:不断的计算新的点,在屏幕上画出来,经过大量的迭代(大概几万次)之后,这些点渐渐形成一个图形。现在的问题是:用Opengl画,怎样才能保证当前画面不变,只在上面添上新的点呢?就是说形成一个渐变的效果?Opengl里需要设置什么模式吗?我的程序是win32的程序,参考的Nehe的教程的框架,初学opengl,各位大虾多多关照,感激不尽!!

解决方案 »

  1.   

    我开始的思路是这样的:开始调用迭代函数,计算出下一个点,并画出,SwapBuffers(hDC);但是这样只能显示大概几十个点,后面的都显示不出来,我想,应该是缓存的问题;但是如果glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);那么开始画的些点都没有了,有没有什么办法,在保持原有点不变的情况下,添加新的点呢?
      

  2.   

    方法一:将这些点的信息全部保存起来,每次都重绘.
    方法二:去掉GL_COLOR_BUFFER_BIT ,即不清除已经画出来的东西
      

  3.   

    ls的大虾:方法一: 不适用,因为点的个数需要大概数万个,开销太大;方法二: 我试了一下,还是只能显示大概几十个点。
    大概思想如下:
    画图程序:glClear(GL_DEPTH_BUFFER_BIT) —> 画出当前点 -> 计算下一个点 -> 将这个点作为当前点
    winmain中: 一直调用上面的画图程序,DrawGLScene(); SwapBuffers(hDC);单步跟进去,虽然每次都可以计算出新的点,但是都没有在图上显示。为什么呢?
      

  4.   

    莫非周末,各位大虾们都去happy了who来教教俺
      

  5.   

    方法一:每次几万个点对于现在的计算机来说小意思了;
    方法二:你每次都在一个页面上画新的点,然后交换……当然就没有了。
    方法三:其实这个应用只是画点而没有3D计算的话,用GDI足够了,用一个内存位图不停的往上画点->BitBlt,保证你效率。
      

  6.   

    你可能把问题想复杂了,所有迭代完成后再交换就可以了
    e.g
    ...
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    ...
    loop
       caculateVertex(currentVertex,newVertex);
       //get the new data form currentVertex and stored in newVertex
       drawVertex(newVertex);
       updateCurrentVertex(newVertex);//currentVertex=newVertex
    end loop
       SwapBuffers();或者使用一些缓冲区屏蔽的技巧也可以