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经典主题则没有问题。主要是视觉效果上不好看。

image

图1 win7主题下用dc实现画矩形框出现问题

解决这个问题花了我较多时间,尝试修改opengl的初始设置和使用GDI+都没有能解决问题。最终想到用opengl来代替,使用opengl直接画矩形和使用dc效率相当,可以运用于实际中。感觉对dc和opengl的机理了解不够清楚。虽然解决了上述问题,但是什么原因至今还不清楚,烦请知道的告诉我下。

opengl橡皮筋技术参考:http://www.codeproject.com/Articles/12989/Rubber-Banding-with-OpenGL

posted @ 2014-04-24 17:38  ChengshengXiong  阅读(1142)  评论(0编辑  收藏  举报