C++ 移动时openGL图形未保持在一起
我在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
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
循环中头部的顶点。