我在做三维图形的旋转和平移的时候发现一个问题
将三维图形旋转一定角度,显示为三维图形,但是做平移的时候,就转为二维图形然后再平移
我想把旋转后的图形保存,然后将这个图形以三维的形式进行平移,程序如下:
void COpenGLPlatView::OnDraw(CDC* pDC)
{
COpenGLPlatDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
wglMakeCurrent(pDC->GetSafeHdc(), m_hRC);

glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();

glTranslated(0.0, 0.0, 0.0);
//旋转角度
if(m_bRotate==TRUE)
{
glPopMatrix();
glMatrixMode(GL_MODELVIEW);//把后面的矩阵操作施加于造型视图矩阵栈 
glRotatef(xrof,1.0f,0.0f,0.0f);//x轴
glRotatef(yrof,0.0f,1.0f,0.0f);//y轴
glRotatef(zrof,0.0f,0.0f,1.0f);//z轴
glPushMatrix();

}
if(m_bMove==TRUE)
{
glPopMatrix();
glMatrixMode(GL_MODELVIEW);//把后面的矩阵操作施加于造型视图矩阵栈
glTranslated(xmove, ymove, 0.0);
glPushMatrix();

}
         ...............
}
我想每次进行一次矩阵操作后,就把结果压入矩阵栈中,然后进行下一次操作的时候,再把前面压入的矩阵弹出来,但是上面的程序不能实现这个效果
怎么办???

解决方案 »

  1.   

    这个用法有点意思,不过如果你是想要回复初始状态,只要使用glLoadIdentity就可以了。
      

  2.   

    呵呵。就是不想恢复初始状态才用glPopMatrix()和glPushMatrix()
      

  3.   

    可是我在move和rotate 操作的时候,就把操作的结果矩阵压入栈里啊。即使重画时重置了单位矩阵,那用glPopMatrix()不可以把单位矩阵前的结果矩阵弹出来吗
      

  4.   

    放在onDraw不合适吧,因为有无数次这些操作。
      

  5.   

    可能的错误:
    1. 再OnDraw()中绘图不合适。
    2. Rotate时使用的矩阵可能是上次Move压入的,而Move使用的矩阵也可能是上次Rotate压入的,这样导致混乱。  如果还是不行就发给我看看,也许我能解决。
      [email protected]