OPENGL橡皮筋技术
在基于opengl和MFC的三维显示中,涉及到用矩形框或索套对模型进行选取,用户看到的矩形框一般用dc中的异或笔实现(橡皮筋技术),下面是画矩形示例代码:
//橡皮筋技术主要代码 CClientDC dc(pView); // 异或笔擦除上次图形 CRect rect(c_down.x, c_down.y, c_last.x, c_last.y); rect.NormalizeRect(); dc.DrawFocusRect(rect); // 画本次图形 CRect rect; rect.SetRect(c_down.x, c_down.y, point.x, point.y); rect.NormalizeRect(); dc.DrawFocusRect(rect);
这种算法在 xp系统 下没有问题,在我的windows7 64位系统(使用windows7 Basic主题)下会出现问题,如图1(截图来自http://www.codeproject.com/Articles/3674/Basic-Curves-And-Surfaces-Modeler),如果采用windows经典主题则没有问题。主要是视觉效果上不好看。
图1 win7主题下用dc实现画矩形框出现问题
解决这个问题花了我较多时间,尝试修改opengl的初始设置和使用GDI+都没有能解决问题。最终想到用opengl来代替,使用opengl直接画矩形和使用dc效率相当,可以运用于实际中。感觉对dc和opengl的机理了解不够清楚。虽然解决了上述问题,但是什么原因至今还不清楚,烦请知道的告诉我下。
opengl橡皮筋技术参考:http://www.codeproject.com/Articles/12989/Rubber-Banding-with-OpenGL