为了使两次调用glTranslatef效果不叠加,在第二次glTranslatef之前我使用了glLoadIdentity,但是为什么第二次glTranslatef后画出的东西不见了?如果循环调用 glPushMatrix()和glPopMatrix()可以解决这个问题,但是我想知道原因

解决方案 »

  1.   

    代码如下:
    glPushMatrix();
    glColor3f(1,1,1);
    glTranslatef (0,0,1.0f);
    auxSolidSphere(0.02f);//这个可以画出来 glLoadIdentity();
    glTranslatef (0,0,1.1f);
    TextOutPut(0,0,"中国");//这个我找不到了
      

  2.   

    可能是,如果没有没有压栈的话,可能会导致glLoadIdentity对以前的影响!
    压栈的话,只对当前的有影响,对以前的没有影响!
      

  3.   

    to fandh :你可以说的具体些吗?或者在代码的基础上改一下
      

  4.   

    glLoadIdentity()函数的作用是对这个函数以下的起作用吗?
      

  5.   

    我说说我的想法吧(当然,我的水平也很菜,高手别见笑啊)glLoadIdentity()就是把当前矩阵变成单位矩阵。
    我感觉你之所以看不见第二个“中国”。
    我感觉有两种原因。
    第一种我不太确定,我是拿c写opengl的!所以你用的TextOutPut我表示我没见过啊……(c里面的glut库里面auxSolidSphere这个函数也没有!)但是好像在opengl里面直接写字直接调用这种函数就可以了吗?这个我就不知道了!我觉得有一点点可能是因为你直接调用TextOutPut所以他显示不出来。我觉得你可以再画个其他什么图形试试看。
    第二种我觉得可能是你定义的视景体的问题。恩……我忘了是不是叫这个了!就是用glOrtho或者glPerspective那些修改的投影的东西。你调用glTranslatef (0,0,1.0f);这样相当于是往电脑屏幕外面移动。很有可能就移出视景体外面了!那样当然就看不到了!我再补充点没用的,你连续调用glTranslatef (0,0,1.0f);和glTranslatef (0,0,1.1f);的效果。就相当于glTranslatef (0,0,2.1f);当然,两次调用中间别画其他东西了!
      

  6.   

    LZ 知道是什么原因了吗? 我也是遇到这里有点迷惑了。刚开始学OpenGL. 还请指点。