zoukankan      html  css  js  c++  java
  • 状态栏上放进度条&纹理操作@MFC/OpenGL

    这两天的进展是,OpenGL方面:对纹理的半透明的显示,MFC方面:在状态栏上放进度条,能根据进度对进度条进行实时更新。

    从昨天到今早,做的东西还算是比较多的,下午一直在移植代码,有点焦头烂额的感觉,想着应该把节奏放放,否则做过的,遇到的问题不总结总结,只怕是下午又遇到后,就没啥感觉了,下面一点一点道来:

    1. 大致按问题的重要程度来排序吧,先是纹理的绑定,由于我的程序实现的是,静态分割窗口,一个Doc对应两个View,两个View都需要OpenGL的渲染环境,也就是一个DC(设备上下文),对应两个RC(渲染上下文),而一个RC同一时刻只能分配到一个RC上,也就是说,两个RC要轮流切换着,至于有人说啥多个DC,对应多个RC,可以同时绘制,由于不大懂就作罢了,而且现在的这个比较好理解,就暂且用着。而纹理的绑定glBindTexture,是共享在当前RC下的display-list space中的(参见这里),也就是说每次如果有切换View,并且要绑定纹理的话,必须先切换当前的RC,而纹理的绑定对纹理的显示效率提高至关重要,在各自的View中添加一个绑定纹理的方法,然后按照上述所说操作就可以了。有关纹理的优化,这里这里讲的很不错,推荐

    2. 纹理的显示没问题后,由于左视图中的纹理要采用半透明的效果,于是用到了glBlendFunc函数,然后对混合知识补充了下,所谓混合制造透明效果,其实就是对两类RGBA颜色,进行某种线性运算后的结果,给人种透明的假想,其实还是二维的信息。在有了大致的了解,MSDN里讲的很不错,以后要养成看MSDN的习惯,这里提到,如果在绘制的3D的对象的话,要注意把深度测试给关闭了,否则有些地方就达不到混合的效果了。

    3. 昨晚弄OpenGL弄的有点烦了之后,就弄弄MFC方面的调解调解(晚上回去瞎翻了翻毕淑敏的书看看,调剂调剂,发现文字很吸引人啊),在状态栏上放进度条,可以做参考,篇博文转载的算是比较多的了,而且内容比较完整,照着做后才发现,那是相当的晕的,要么是比较旧的,要么就是那人蛋疼,不过,让我学习了下怎么自定义消息,消息响应函数,还是不错的,里面那个OnProgress函数,由于开发平台式VS2008的缘故,必须弄成返回值是LRESULT,带有WPARM和LPARM参数(参见这里),后两个术语把我弄的比较蛋疼,从MSDN那儿链到这里,然后就豁然开朗了,W指的是WORD(16),L指的是LONG(32),由于最开始的是16位的平台,WORD型变量用来传其他参数,LONG型变量用来传指针,虽然现在硬件发展了,还沿用了原来的命名习惯。

    4. 至于状态栏中放进度条,跟工具栏中放滑动条有点类似,新建一个变量继承自CStatusBar,添加成员变量CProgressCtrl,通过它的Creat方法来新建,至于消息响应的话,在MainFrame下添加消息响应函数afx_msg void OnProgress(),然后和之前设好的消息ID通过ON_MESSAGE(MYWM_PROGRESS, OnProgress)进行绑定,ID设成(WM_USER+100),这里+100为了防止和系统ID或是其他的ID冲突,这些都准备好后,在需要调用该响应函数的地方,发送消息就可以了,用SendMessage,可以注意到MainFrame是CProgressCtrl的父容器的父容器,一般都是放在父容器的,我觉得其中一个原因可能是,如果是父容器的话,操作比较简单,就是直接对成员变量操作。这些完了之后,就是选择进度条放在哪了,MainFrm.cpp中有indicator数组,放的就是状态栏中具体划分的块数,可以参加这里ID_SEPARATOR指的是占位符,然后可以通过CStatusBar::SetPaneInfo,来设置在状态栏中的样式,包括是不是3D状的,这些搞定后,然后就是同上面的一些操作类似,会有些乱七八糟的业务,一一搞定就可以了,Debug了蛮久的。

    PS. 稍微总结下,实现的初期效果比较满意,图就不上了,但也有不少的疑问,如加了进度条后,加载一张vase1.png图片从原先的9s到现在的12s,设置进度条状态有那么耗时吗,在用户体验上,还有很多需要做的,也有些心得,对面向对象编程,有点理解,因为我没怎么面向对象,然后代码就越来越复杂了,乱七八糟的,调来调去的,然后我就会主动的去想,怎么把具有功能的代码放在一起写成一个函数放到相应的对象下,这样别人要用的时候,直接调用就可以了。接下来,先把最核心的功能处实现下,随着实现,又发现了不少需要做的,为了用户的操作方便。有一点有进展的是,对于时耗的瓶颈处,频繁修改的一个三角形集合的显示,起初用显示列表没能搞定,效果比较差,并且在CSDN上发帖寻求帮助,今天打开发现有人提出了很好的建议(至今有1个月了,囧),我可以尝试一下。插一句,今天下午移植代码的时候,发现还写了不少的,虽然有点后怕,但想起来比前些天有了些许进步而且看到了进展,心里就甜滋滋的。今天是第5天,也才5天而已,继续~

  • 相关阅读:
    20100822 动漫店 员工卡缓存出现问题。
    性能报告——使用AOP与DYNAMICProxy的orm性能测试
    性能报告——反射创建对象
    抓虾 老板体会。
    Pixysoft.framework.configuration 性能提升报告
    今天你抛弃了ASP.NET了吗?问题篇
    20100922 项目重构计划
    经过一年时间的沉淀 再次回首 TCP Socket服务器编程
    对Google Me的社会化网络 “The Real Life Social Network” 翻译
    20100718 项目重构计划
  • 原文地址:https://www.cnblogs.com/litstrong/p/1964363.html
Copyright © 2011-2022 走看看