📄 subject_57496.htm
字号:
<p>
序号:57496 发表者:宝石 发表日期:2003-10-26 03:11:43
<br>主题:一个关于opengl旋转的问题!
<br>内容:有一个问题一直困扰我,请大虾帮忙。 <BR>我想进行对x轴旋转时, <BR>调用 <BR>glRotated(m_xAngl,1.0,0,0); <BR>发现旋转只是沿着屏幕水平方向旋转,并没有按照x轴旋转(我的x轴此时 <BR>与水平方向并不重合)。 <BR>我该怎么做才能实现此功能? <BR>另外,我发现, <BR>当我调用 <BR>glRotated(m_zAngl,0,0,1.0); <BR>时却是沿着z轴方向旋转(我的z轴并不垂直于屏幕),对此我非常费解。 <BR>请大虾帮忙,谢谢。 <BR>下面是我的ondraw 和mousemove函数。 <BR>void CPre3DDrawView::OnDraw(CDC* pDC) <BR>{ <BR> CDocument* pDoc = GetDocument(); <BR> // TODO: add draw code here <BR> wglMakeCurrent(pDC->m_hDC,m_hglrc); <BR> //translate <BR> ::glPushMatrix(); <BR> glMatrixMode(GL_MODELVIEW); <BR> //glLoadIdentity(); <BR> glRotated(m_xAngl,1.0,0,0); <BR> glRotated(m_yAngl,0,1.0,0); <BR> glRotated(m_zAngl,0,0,1.0); <BR> <BR> DrawBK(pDC); <BR> glTranslatef(m_xOff,m_yOff,m_zOff); <BR> CElementDraw element; <BR> //glPolygonMode(GL_FRONT,GL_FILL); <BR> element.m_color = RGB(192,192,192); <BR> element.m_Vertex[0] = POINT3D(100,100,100); <BR> element.m_Vertex[1] = POINT3D(0,100,100); <BR> element.m_Vertex[2] = POINT3D(0,100,0); <BR> element.m_Vertex[3] = POINT3D(100,100,0); <BR> element.m_Vertex[4] = POINT3D(100,0,100); <BR> element.m_Vertex[5] = POINT3D(0,0,100); <BR> element.m_Vertex[6] = POINT3D(0,0,0); <BR> element.m_Vertex[7] = POINT3D(100,0,0); <BR> element.Draw(); <BR> glBegin(GL_LINES); <BR> glColor3f(1.0,0,1.0); <BR> glVertex3d(0,0,0); <BR> glVertex3d(100,100,100); <BR> glEnd(); <BR> ::glPopMatrix(); <BR> glFlush(); <BR> SwapBuffers(pDC->m_hDC); <BR> wglMakeCurrent(pDC->m_hDC,NULL); <BR>} <BR>void CPre3DDrawView::OnMouseMove(UINT nFlags, CPoint point) <BR>{ <BR> if(m_nOperMod == TRANSLATE) <BR> { <BR> if(nFlags&MK_LBUTTON) <BR> { <BR> int xoff = point.x - m_ptTrackOld.x; <BR> int yoff = point.y - m_ptTrackOld.y; <BR> <BR> m_xOff += xoff; <BR> m_yOff += -yoff; <BR> m_ptTrackOld = point; <BR> Invalidate(); <BR> } <BR> } <BR> if(m_nOperMod == ROTATE_X) <BR> { <BR> if(nFlags&MK_LBUTTON) <BR> { <BR> int yoff = point.y - m_ptTrackOld.y; <BR> <BR> m_xAngl +=double(yoff)/3.6; <BR> m_xAngl = fmod(m_xAngl,360.0); <BR> m_ptTrackOld = point; <BR> Invalidate(); <BR> } <BR> <BR> } <BR> if(m_nOperMod == ROTATE_Y) <BR> { <BR> if(nFlags&MK_LBUTTON) <BR> { <BR> int xoff = point.x - m_ptTrackOld.x; <BR> <BR> m_yAngl +=double(xoff)/3.6; <BR> m_yAngl = fmod(m_yAngl,360.0); <BR> m_ptTrackOld = point; <BR> Invalidate(); <BR> } <BR> <BR> } <BR> if(m_nOperMod == ROTATE_Z) <BR> { <BR> if(nFlags&MK_LBUTTON) <BR> { <BR> int yoff = point.y - m_ptTrackOld.y; <BR> <BR> m_zAngl +=double(yoff)/3.6; <BR> m_zAngl = fmod(m_zAngl,360.0); <BR> m_ptTrackOld = point; <BR> Invalidate(); <BR> } <BR> <BR> } <BR> if(m_nOperMod == ROTATE_DYNC) <BR> { <BR><BR> if(nFlags&MK_LBUTTON) <BR> { <BR> int xoff = point.x - m_ptTrackOld.x; <BR> int yoff = point.y - m_ptTrackOld.y; <BR> <BR> m_xAngl +=double(yoff)/3.6; <BR> m_yAngl +=double(xoff)/3.6; <BR> m_xAngl = fmod(m_xAngl,360.0);m_yAngl = fmod(m_yAngl,360 <BR>.0); <BR> Invalidate(); <BR> m_ptTrackOld = point; <BR> } <BR> }
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:飞翔鸟115 回复日期:2003-10-27 12:47:37
<br>内容:这与先旋转哪个轴有关,先旋转的轴是针对屏幕坐标的变换<BR>比如:先旋转Z轴,可试试效果<BR>glRotated(m_zAngl,0,0,1.0); <BR>glRotated(m_yAngl,0,1.0,0); <BR>glRotated(m_xAngl,1.0,0,0); <BR> <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -