if(num==3)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();glBegin(GL_LINES);
glVertex3f(0.0f, 0.0f, 0.0f);//画出X方向的直线
glVertex3f(0.5, 0.0f, 0.0f);
glEnd();glPushMatrix();
glTranslatef(0.5, 0.0f, 0.0f);//画出X方面的坐标系箭头
glRotatef(90.0f,0.0f,1.0f,0.0f);
glutWireCone(0.027,0.09,10,10);
glPopMatrix();glPushMatrix();glRotatef(j,j+10,j+30,0.0);
glScalef(k,k,k);
glTranslatef(p,0,0);
 static GLfloat  c2[]={0.5,1.0,1.0};
glBegin (GL_LINE_LOOP);iii=dlgg.m_edit;//编辑框输入iii值    );
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);
lVertex3f(ss[iii].p4.x/ww,ss[iii].p4.y/ww,ss[iii].p4.z/ww);
glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);
glVertex3f(ss[iii].p2.x/ww,ss[iii].p2.y/ww,ss[iii].p2.z/ww);
glEnd();glBegin (GL_LINE_LOOP);
glVertex3f(ss[iii].p5.x/ww,ss[iii].p5.y/ww,ss[iii].p5.z/ww);
glVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glVertex3f(ss[iii].p7.x/ww,ss[iii].p7.y/ww,ss[iii].p7.z/ww);
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);
glEnd();glBegin (GL_LINE_LOOP);
glVertex3f(ss[iii].p5.x/ww,ss[iii].p5.y/ww,ss[iii].p5.z/ww);
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);
glVertex3f(ss[iii].p2.x/ww,ss[iii].p2.y/ww,ss[iii].p2.z/ww);
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);
lEnd();glBegin (GL_LINE_LOOP);
glVertex3f(ss[iii].p4.x/ww,ss[iii].p4.y/ww,ss[iii].p4.z/ww);
glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);
glVertex3f(ss[iii].p7.x/ww,ss[iii].p7.y/ww,ss[iii].p7.z/ww);
glVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glEnd();glBegin (GL_LINE_LOOP);
glColor3fv(c2);
glVertex3f(ss[iii].p2.x/ww,ss[iii].p2.y/ww,ss[iii].p2.z/ww);
glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);
glVertex3f(ss[iii].p7.x/ww,ss[iii].p7.y/ww,ss[iii].p7.z/ww);
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);
glEnd();glBegin (GL_LINE_LOOP);
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);
glVertex3f(ss[iii].p4.x/ww,ss[iii].p4.y/ww,ss[iii].p4.z/ww);
glVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glVertex3f(ss[iii].p5.x/ww,ss[iii].p5.y/ww,ss[iii].p5.z/ww);
glEnd();
//以上画出六面体单元
  static GLfloat  c1[]={0.0,0.0,1.0},                 c3[]={1.0,1.0,1.0},  c4[]={1.0,0.0,1.0},                c5[]={1.0,0.0,0.0},  c6[]={1.0,1.0,0.0},                c7[]={0.3,0.5,0.3},  c8[]={1.0,1.0,1.0}; 
glBegin (GL_TRIANGLES);glColor3fv(c7);
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);
glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);       
lVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glEnd();
glBegin (GL_TRIANGLES);
glColor3fv(c7);glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);       
glVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);glEnd(); glBegin (GL_TRIANGLES);
 glColor3fv(c2);       
       
 
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);
glVertex3f(ss[iii].p3.x/ww,ss[iii].p3.y/ww,ss[iii].p3.z/ww);
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);glEnd();glBegin (GL_TRIANGLES);
glColor3fv(c8);
glVertex3f(ss[iii].p8.x/ww,ss[iii].p8.y/ww,ss[iii].p8.z/ww);
glVertex3f(ss[iii].p1.x/ww,ss[iii].p1.y/ww,ss[iii].p1.z/ww);
glVertex3f(ss[iii].p6.x/ww,ss[iii].p6.y/ww,ss[iii].p6.z/ww);     
       
glEnd();
以上对六面体单元进行优化成四面体glPopMatrix();glMatrixMode(GL_PROJECTION);
glLoadIdentity();SwapBuffers(hDC);

 }
这段代码在Onpaint()里,用num==3做状态变量控制画六面体及四面体,还有一段代码和这一段差不多,其中num==2控制画六面体,用定时器定时发出paint消息,问题来了glRotatef(j,j+10,j+30,0.0);
glScalef(k,k,k);
glTranslatef(p,0,0);以上三段控制平移,缩放,旋转的时候,单元出现滞后,功能同时生效的现象
也就是说,我点菜单的缩小的时候,单元在缩小的同时还平移,或者我先点左平移,单元向左移动,然后我点右平移的时候,它还是向左平移一两次,然后再右移,我点旋转的时候,单元旋转的同时还发生平移,而且在平移的过程中单元消失,然后又在另一端出现小弟在另一个程序测试一下,同是这段代码却完全正常,不同的是代码没有用状态变量num控制,而且仅有这一段代码,我怀疑问题出现在glPopMatrix();和glPushMatrix()的位置放错,高手看看
代码有点长,不过其实只有开头和结尾有用,中间的代码是画单元用的,和本问题没有联系

解决方案 »

  1.   

    其实问题也简单,也就是说怎么做才能让
    glScalef(k,k,k);
    glTranslatef(p,0,0);
    glRotatef(j,j+10,j+30,0.0);
    互不影响?
      

  2.   

    小弟做的网格剖分,其实没什么难度不过现在遇到的问题与有限元没什么联系,说白了,就是怎么才能做到旋转,平移,缩放互不影响,我觉得可能是glPopMatrix();和glPushMatrix()出问题,但是又找不到,老大给指点一下
      

  3.   

    我的QQ:94258821
    邮箱:[email protected]急切等待各位的回复,谢谢!!!!!!!!!!!!!!!!!!!!!!!