昨天在《OpenGL中的光照和键盘控制》中的代码的基础上加入了用鼠标来控制旋转,不过自己觉得思路是不正确的,纯属瞎弄。。。
为了识别出用户想要旋转的方向和角度,增加了下面的变量:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
enum
RotateDirection
{ // 鼠标控制的旋转方向
EAST,
WEST,
NORTH,
SOUTH
};
RotateDirectiondirection;
CPointm_pStart; // 起点
CPointm_pEnd; // 终点
bool isMoseDown; // 是否左键还按下
{ // 鼠标控制的旋转方向
EAST,
WEST,
NORTH,
SOUTH
};
RotateDirectiondirection;
CPointm_pStart; // 起点
CPointm_pEnd; // 终点
bool isMoseDown; // 是否左键还按下
然后就是鼠标的事件处理代码了:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
void
COpenGLDemoView::OnLButtonDown(UINTnFlags,CPointpoint)
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
this -> isMoseDown = TRUE;
this -> m_pStart = point;
this -> m_pEnd = point;
CView::OnLButtonDown(nFlags,point);
}
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
this -> isMoseDown = TRUE;
this -> m_pStart = point;
this -> m_pEnd = point;
CView::OnLButtonDown(nFlags,point);
}
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
void
COpenGLDemoView::OnLButtonUp(UINTnFlags,CPointpoint)
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
this -> isMoseDown = FALSE;
if ( this -> direction == EAST)
yspeed += 0.5f ;
else if ( this -> direction == WEST)
yspeed -= 0.5f ;
else if ( this -> direction == SOUTH)
xspeed += 0.5f ;
else if ( this -> direction == NORTH)
xspeed -= 0.5f ;
CView::OnLButtonUp(nFlags,point);
}
void COpenGLDemoView::OnMouseMove(UINTnFlags,CPointpoint)
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
if ( this -> isMoseDown == false )
{
return ;
}
if (point.x > this -> m_pEnd.x)
this -> direction = EAST;
else if (point.x < this -> m_pEnd.x)
this -> direction = WEST;
else if (point.y > this -> m_pEnd.y)
this -> direction = SOUTH;
else if (point.y < this -> m_pEnd.y)
this -> direction = NORTH;
this -> m_pEnd = point;
CView::OnMouseMove(nFlags,point);
}
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
this -> isMoseDown = FALSE;
if ( this -> direction == EAST)
yspeed += 0.5f ;
else if ( this -> direction == WEST)
yspeed -= 0.5f ;
else if ( this -> direction == SOUTH)
xspeed += 0.5f ;
else if ( this -> direction == NORTH)
xspeed -= 0.5f ;
CView::OnLButtonUp(nFlags,point);
}
void COpenGLDemoView::OnMouseMove(UINTnFlags,CPointpoint)
{
// TODO:Addyourmessagehandlercodehereand/orcalldefault
if ( this -> isMoseDown == false )
{
return ;
}
if (point.x > this -> m_pEnd.x)
this -> direction = EAST;
else if (point.x < this -> m_pEnd.x)
this -> direction = WEST;
else if (point.y > this -> m_pEnd.y)
this -> direction = SOUTH;
else if (point.y < this -> m_pEnd.y)
this -> direction = NORTH;
this -> m_pEnd = point;
CView::OnMouseMove(nFlags,point);
}
试了下效果,控制上不是很舒适方便,我觉得自己才旋转的方向判断上应该是不对的,到底如何判断旋转方向呢?
2669

被折叠的 条评论
为什么被折叠?



