移动时,openGL数字不会停留在一起

时间:2014-03-03 05:58:44

标签: c++ opengl glut

我在OpenGL中绘制了一个简笔画,我有正文(我正在使用GL_LINES)和头部(我正在使用GL_LINE_LOOP)。在绘制出来之后,它们都显示出完美的细节。然而,当我在整个屏幕上移动棒图时,头部与身体断开连接。我需要这些才能保持游戏目的。任何人都可以帮我解释一下吗?

如果您还需要我进一步解释,请告诉我。

//Drawing body
glBegin(GL_LINES);
    glColor3f(1,1,1);
    glVertex2f(xpos, ypos);
    glVertex2f(xpos - xdim/2, ypos - ydim);             
    glVertex2f(xpos, ypos);
    glVertex2f(xpos + xdim/2, ypos - ydim);             
    glVertex2f(xpos, ypos);
    glVertex2f(xpos, ypos + ydim);                  
    glVertex2f(xpos - xdim/2, ypos + ydim/2);
    glVertex2f(xpos, ypos + ydim);                  
    glVertex2f(xpos - xdim/2, ypos + ydim/2);       
    glVertex2f(xpos - xdim/4, ypos + ydim/2);           
    glVertex2f(xpos - xdim/4, ypos + ydim/2);   
    glVertex2f(xpos - xdim/4, ypos + ydim/3);   
    glVertex2f(xpos - xdim/4, ypos + ydim/2);
    glVertex2f(xpos + xdim, ypos + ydim/2);         
    glVertex2f(xpos + xdim, ypos + ydim/2);
    glVertex2f(xpos + xdim, ypos + ydim/3);         
    glVertex2f(xpos + xdim, ypos + ydim/2);
    glVertex2f(xpos + xdim + xdim/2, ypos + ydim/2);  
    glVertex2f(xpos + xdim/2, ypos + ydim/2);
    glVertex2f(xpos, ypos + ydim);                      
    glVertex2f(xpos, ypos + ydim + ydim/4);
    glVertex2f(xpos, ypos + ydim);                      
glEnd();

//Drawing head
glBegin(GL_LINE_LOOP); 
    glColor3f(1,1,1);
    for (i = 0; i < 100; i++){
        j = 2*3.14*i/100;
        glVertex2f(200 + 15 * cos(j), 254 + 15 * sin(j));
    }
glEnd();

1 个答案:

答案 0 :(得分:1)

这很明显:您需要对所有图形部分应用相同的变换,以便将它们组合在一起。

取决于图层次结构:

  • 如果是单个部件:为每个部件添加相同的偏移量。注意避免矩阵堆栈之间的变化(在FFP glPush / glPop中);
  • 如果您使用列表/树状部件层次结构 - 确保部件正确地为父级,并且只将转换应用于根。

在您的代码示例中:您似乎使用xpos / ypos来移动正文,但是您不会将它们添加到头部 - 因此它不会移动。