• 6428阅读
  • 5回复

OPENGL绘点时很卡 [复制链接]

上一主题 下一主题
离线hhshiyi
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-14
我做了个程序(科学计算可视化的)用opengl绘制大量的点,
运行时一卡一卡的,还经常出现程序无响应

代码如下:(3层循环,每一层循环都有上千次)
for(k=1;k<Tn;k++)
{
        //----------雷克子波离散值------------//      
       ricker[k]=exp((-4*PI*PI*f*f*k*k*Delta_t*Delta_t)/(r*r))*cos(2*PI*f*Delta_t*k);
       glClear(GL_COLOR_BUFFER_BIT);
       glBegin(GL_POINTS);
       for(i=1;i<Xn-1;i++)
       for(j=1;j<Yn-1;j++)
        {
            Is_Center=0.0;
            if(i==Wave_Center->x()&&j==Wave_Center->y())Is_Center=1.0;
            u[i][j][k+1]=2*u[i][j][k]-u[i][j][k-1]+(Delta_t*Delta_t/(Delta_h*Delta_h))*v[i][j]*v[i][j]*(u[i+1][j][k]-2*u[i][j][k]+u[i-1][j][k]+u[i][j+1][k]-2*u[i][j][k]+u[i][j-1][k])+ricker[k]*Is_Center;
            glColor3f(u[i][j][k],u[i][j][k],u[i][j][k]);
            glVertex2f((1.0/width)*i,(1.0/hight)*j);
        }
        glEnd();
        glFlush();
    }
请教有没有办法解决这个问题啊????谢谢!!!!我的email:hhshiyi@163.com

TC的graphics。h这个里边的putpixel()函数绘制的时候一点都不卡!可惜跟不上节奏啊!
[ 此帖被hhshiyi在2011-05-14 21:35重新编辑 ]
离线wd007

只看该作者 1楼 发表于: 2011-05-15
使用性能测试工具,能否结合起来,看看瓶颈在哪里
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线hhshiyi
只看该作者 2楼 发表于: 2011-05-15
测试工具有什么啊?
说说几个常用的!
离线net21
只看该作者 3楼 发表于: 2011-05-23
计算太慢了,检查一下。
离线hhshiyi
只看该作者 4楼 发表于: 2011-05-26
回 3楼(net21) 的帖子
我也知道了是计算太慢的问题了。可是还是不知道怎么解决,多线程?
我现在正在学CUDA,或许有点帮助吧
离线花后叶
只看该作者 5楼 发表于: 2011-11-04
其实我觉的呢,这里的问题是优化不足
像这里的
       //----------雷克子波离散值------------//      
       ricker[k]=exp((-4*PI*PI*f*f*k*k*Delta_t*Delta_t)/(r*r))*cos(2*PI*f*Delta_t*k);
你把pi、f、Delta的平方都写成了乘号运算,而不是直接调用平方函数。这实际上就是一个优化,不过还不足,你可以吧PI*f*Delta_t*k = A,
上面就变成了
A = PI*f*Delta_t*k ;
ricker[k]=exp((-4*PI**f*k*Delta_t*A)/(r*r))*cos(2*A);
这样子速度在上千次的循环中是很省时的,计算机的计算是傻瓜式的一个一个的来的一个A代入明显比再计算还快,你说是不是!
下面的数组也一样做优化,我想速度应该可以再上一各层次!

——————————迟到的回帖————希望对你有帮助———————————————
快速回复
限100 字节
 
上一个 下一个