opengl 保存当前矩阵的问题 求高人

beyond8820 2004-12-03 10:52:32
我在做三维图形的旋转和平移的时候发现一个问题
将三维图形旋转一定角度,显示为三维图形,但是做平移的时候,就转为二维图形然后再平移
我想把旋转后的图形保存,然后将这个图形以三维的形式进行平移,程序如下:
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();

}
...............
}
我想每次进行一次矩阵操作后,就把结果压入矩阵栈中,然后进行下一次操作的时候,再把前面压入的矩阵弹出来,但是上面的程序不能实现这个效果
怎么办???
...全文
299 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond8820 2004-12-06
  • 打赏
  • 举报
回复
太平洋,我换了信箱,又发了一次
syy64 2004-12-04
  • 打赏
  • 举报
回复
未收到邮件。
beyond8820 2004-12-03
  • 打赏
  • 举报
回复
可是我在move和rotate 操作的时候,就把操作的结果矩阵压入栈里啊。即使重画时重置了单位矩阵,那用glPopMatrix()不可以把单位矩阵前的结果矩阵弹出来吗
beyond8820 2004-12-03
  • 打赏
  • 举报
回复
呵呵。就是不想恢复初始状态才用glPopMatrix()和glPushMatrix()
syy64 2004-12-03
  • 打赏
  • 举报
回复
因为每次你重画时矩阵栈已被置单位阵了。
秋叶君 2004-12-03
  • 打赏
  • 举报
回复
这个用法有点意思,不过如果你是想要回复初始状态,只要使用glLoadIdentity就可以了。
beyond8820 2004-12-03
  • 打赏
  • 举报
回复
给点建议吧
Tieren_love 2004-12-03
  • 打赏
  • 举报
回复
可能的错误:
1. 再OnDraw()中绘图不合适。
2. Rotate时使用的矩阵可能是上次Move压入的,而Move使用的矩阵也可能是上次Rotate压入的,这样导致混乱。

如果还是不行就发给我看看,也许我能解决。
Tieren_love@163.com
syy64 2004-12-03
  • 打赏
  • 举报
回复
放在onDraw不合适吧,因为有无数次这些操作。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧