opengl 保存当前矩阵的问题 求高人
我在做三维图形的旋转和平移的时候发现一个问题
将三维图形旋转一定角度,显示为三维图形,但是做平移的时候,就转为二维图形然后再平移
我想把旋转后的图形保存,然后将这个图形以三维的形式进行平移,程序如下:
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();
}
...............
}
我想每次进行一次矩阵操作后,就把结果压入矩阵栈中,然后进行下一次操作的时候,再把前面压入的矩阵弹出来,但是上面的程序不能实现这个效果
怎么办???
问题点数:0、回复次数:9Top
1 楼qiuyejun(秋叶君)回复于 2004-12-03 10:59:38 得分 0
这个用法有点意思,不过如果你是想要回复初始状态,只要使用glLoadIdentity就可以了。Top
2 楼syy64(太平洋)回复于 2004-12-03 11:14:40 得分 0
因为每次你重画时矩阵栈已被置单位阵了。Top
3 楼beyond8820(beyond8820)回复于 2004-12-03 11:37:39 得分 0
呵呵。就是不想恢复初始状态才用glPopMatrix()和glPushMatrix()Top
4 楼beyond8820(beyond8820)回复于 2004-12-03 11:45:36 得分 0
可是我在move和rotate 操作的时候,就把操作的结果矩阵压入栈里啊。即使重画时重置了单位矩阵,那用glPopMatrix()不可以把单位矩阵前的结果矩阵弹出来吗Top
5 楼syy64(太平洋)回复于 2004-12-03 13:50:11 得分 0
放在onDraw不合适吧,因为有无数次这些操作。Top
6 楼Tieren_love(甜蜜程序员)回复于 2004-12-03 15:08:42 得分 0
可能的错误:
1. 再OnDraw()中绘图不合适。
2. Rotate时使用的矩阵可能是上次Move压入的,而Move使用的矩阵也可能是上次Rotate压入的,这样导致混乱。
如果还是不行就发给我看看,也许我能解决。
Tieren_love@163.comTop
7 楼beyond8820(beyond8820)回复于 2004-12-03 16:31:56 得分 0
给点建议吧Top
8 楼syy64(太平洋)回复于 2004-12-04 21:48:23 得分 0
未收到邮件。Top
9 楼beyond8820(beyond8820)回复于 2004-12-06 09:00:45 得分 0
太平洋,我换了信箱,又发了一次Top




