一个关于OpenGL绘图的显示效率问题

starytx 2011-04-09 11:34:57
问题描述:用OpenGl绘制的2维地图,现在感觉放大后漫游比较卡。发现别的软件的地图在用鼠标拖拽漫游的时候,视窗外的区域在拖拽的时候是没有东西的,只有鼠标抬起后才刷新了当前视窗的内容,人家的效率就比较高,感觉自己的不管什么时候都在绘制整幅的地图,效率可能就不高了(放大后拖拽比较卡)。不知道OpenGL中怎么解决这样的问题。能做到别人那样也行。不过我这种在漫游时却没有那种视窗外没有数据的断裂现象,是一整幅连续的在移动,但是效率不行。不知道讲清楚问题没有?希望大牛指点一二,先谢了
...全文
395 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
翊麾校尉 2011-04-22
  • 打赏
  • 举报
回复
把glRasterPos2f换成glWindowPos试试[Quote=引用 15 楼 starytx 的回复:]
我现在就是使用glReadPixels形成一幅视图区大小的位图数据缓冲去pBuffer,然后在拖拽时先用glRasterPos2f定位位置再使用glDrawPixels绘制,发现glDrawPixels出的位图的左下角如果在视图区外(比如拖拽住向左,或者向下一移动),位图就不显示了,这个是不是glDrawPixels的固有特性?如果是那怎么解决呢?

引用 10 楼 zyrr159487 的回……
[/Quote]
starytx 2011-04-20
  • 打赏
  • 举报
回复
我现在就是使用glReadPixels形成一幅视图区大小的位图数据缓冲去pBuffer,然后在拖拽时先用glRasterPos2f定位位置再使用glDrawPixels绘制,发现glDrawPixels出的位图的左下角如果在视图区外(比如拖拽住向左,或者向下一移动),位图就不显示了,这个是不是glDrawPixels的固有特性?如果是那怎么解决呢?[Quote=引用 10 楼 zyrr159487 的回复:]
放大缩小后可以将图像数据绘制在位图上,这样拖拽的话就只是拖拽一副位图,自然不卡并且不刷新数据。
每次放大缩小,则需要重新计算数据并重新绘制到需要显示的位图上
[/Quote]
starytx 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gongdiwudu 的回复:]
这儿搞OpenGL的不多吗?相信有人遇到过这样的问题吧
===========>别用OpenGL,毫无意思
[/Quote]
无水先生 2011-04-16
  • 打赏
  • 举报
回复
这儿搞OpenGL的不多吗?相信有人遇到过这样的问题吧
===========>别用OpenGL,毫无意思
chen2009zhou 2011-04-16
  • 打赏
  • 举报
回复
路过来看看,正想学OPENGL
starytx 2011-04-16
  • 打赏
  • 举报
回复
OpenGl怎么绘到一张位图上?移动漫游时也要重绘这个位图吗[Quote=引用 10 楼 zyrr159487 的回复:]
放大缩小后可以将图像数据绘制在位图上,这样拖拽的话就只是拖拽一副位图,自然不卡并且不刷新数据。
每次放大缩小,则需要重新计算数据并重新绘制到需要显示的位图上
[/Quote]
zyrr159487 2011-04-16
  • 打赏
  • 举报
回复
放大缩小后可以将图像数据绘制在位图上,这样拖拽的话就只是拖拽一副位图,自然不卡并且不刷新数据。
每次放大缩小,则需要重新计算数据并重新绘制到需要显示的位图上
starytx 2011-04-16
  • 打赏
  • 举报
回复
为什么显示列表也不能提高这个速度。再等等
starytx 2011-04-13
  • 打赏
  • 举报
回复
显示的时候没有什么计算,基本都是调用的显示列表。但是参数改变时有些东西是需要重新计算的[Quote=引用 7 楼 swandream 的回复:]
我理解,在显示数据时,不要有太多的数据计算,这样通常不会卡的,如果需要有数据计算,请事先弄好,显示就是把准备好的数据显示出来
[/Quote]
向立天 2011-04-12
  • 打赏
  • 举报
回复
具体我确实没做过
不过一般都是像你说的那样
每次只绘制当前现实的区域
这个没什么复杂的
就是做一级映射
每次根据要现实区域的坐标根据需要将地图上相应位置在视区中绘制出来
starytx 2011-04-12
  • 打赏
  • 举报
回复
这儿搞OpenGL的不多吗?相信有人遇到过这样的问题吧
天鹅梦 2011-04-12
  • 打赏
  • 举报
回复
我理解,在显示数据时,不要有太多的数据计算,这样通常不会卡的,如果需要有数据计算,请事先弄好,显示就是把准备好的数据显示出来
starytx 2011-04-12
  • 打赏
  • 举报
回复
哦,那可能这个函数和glScissor一样,只是限定了显示的窗口,并不是不绘制视窗外的东西,只是不显示。看来这效率不好提高啊。现在这个放大后慢就慢在有很多由图案接起来的“线”(复合线),每个图案有自己的显示列表,这些线就循环的调用了很多次显示列表,每条线又形成了一个显示列表,是不是由于嵌套调用引起的,我这也只有2层,关键是循环的多而已,越放大线越长,循环的就越多[Quote=引用 5 楼 xianglitian 的回复:]
我说的意思不是这种视区裁剪
而是一种动态计算
举个例子
比如硬盘上有一个1024*1024的文件
我通过一个100*100窗口观察
那我没有必要将这个图片全都复制到dc
每次根据坐标取出图片中100*100的部分绘制出来即可
当然我这也是纯理论
一般我也是整张图拿来显示
没处理过太大的场景
[/Quote]
向立天 2011-04-12
  • 打赏
  • 举报
回复
我说的意思不是这种视区裁剪
而是一种动态计算
举个例子
比如硬盘上有一个1024*1024的文件
我通过一个100*100窗口观察
那我没有必要将这个图片全都复制到dc
每次根据坐标取出图片中100*100的部分绘制出来即可
当然我这也是纯理论
一般我也是整张图拿来显示
没处理过太大的场景
starytx 2011-04-12
  • 打赏
  • 举报
回复
我使用glClipPlane函数设置了几个切割平面,拖拽时视窗外的区域就变成白色了,释放鼠标后恢复,跟别人的软件有点像了,但是只是切了视窗的左边和上边的部分,右边和下边的不知道怎么切割?而且我感觉这个切割并没有如我所愿的提高效率,是不是我对这个函数理解错了?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧