Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 移动时openGL图形未保持在一起_C++_Opengl_Glut - Fatal编程技术网

C++ 移动时openGL图形未保持在一起

C++ 移动时openGL图形未保持在一起,c++,opengl,glut,C++,Opengl,Glut,我在OpenGL中绘制一个棒状图形,我有身体(我使用的是GL_线for)和头部(我使用的是GL_线for)。把这些画出来后,它们都表现得非常好。然而,当我在整个屏幕上移动木棍图形时,头部与身体断开。我需要这些作为一个游戏的目的。有人能帮我解释一下吗 如果你还需要我进一步解释,请告诉我 //Drawing body glBegin(GL_LINES); glColor3f(1,1,1); glVertex2f(xpos, ypos); glVertex2f(xpos - x

我在OpenGL中绘制一个棒状图形,我有身体(我使用的是
GL_线
for)和头部(我使用的是
GL_线
for)。把这些画出来后,它们都表现得非常好。然而,当我在整个屏幕上移动木棍图形时,头部与身体断开。我需要这些作为一个游戏的目的。有人能帮我解释一下吗

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

//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();
//图体
glBegin(GL_行);
gl3f(1,1,1);
glVertex2f(XPO、YPO);
glVertex2f(xpos-xdim/2,ypos-ydim);
glVertex2f(XPO、YPO);
glVertex2f(xpos+xdim/2,ypos-ydim);
glVertex2f(XPO、YPO);
glVertex2f(xpos、YPO+ydim);
glVertex2f(xpos-xdim/2,ypos+ydim/2);
glVertex2f(xpos、YPO+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、YPO+ydim);
glVertex2f(xpos、YPO+ydim+ydim/4);
glVertex2f(xpos、YPO+ydim);
格伦德();
//拉丝头
glBegin(GL_线_环);
gl3f(1,1,1);
对于(i=0;i<100;i++){
j=2*3.14*i/100;
glVertex2f(200+15*cos(j),254+15*sin(j));
}
格伦德();

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

根据地物层次结构:

  • 如果是单个零件:为每个零件添加相同的偏移。注意避免矩阵堆栈在两者之间发生变化(在FFP glPush/glPop中)
  • 如果使用类似列表/树的零件层次结构,请确保零件的父级设置正确,并且仅对根应用一次变换


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

我们需要了解您如何移动身体部位。由于OpenGL是一个状态机,您可能有重复移动。为了配合@KromStern,您是否正确使用了
glPush()
glPop()
s?这是假设您正在使用OpenGL即时模式,如果您没有,那么问题是您如何使用自己的矩阵。如果我将我的木棍图形的绘制部分放在这里会有帮助吗?假设您使用
xpos
ypos
移动角色,您需要将这些添加到
for
循环中头部的顶点。