C++ 如何在OpenGL中仅转换场景的一个对象?
在我的OpenGL游戏中,我有一个墙模式C++ 如何在OpenGL中仅转换场景的一个对象?,c++,opengl,translate,C++,Opengl,Translate,在我的OpenGL游戏中,我有一个墙模式DrawWall和一架飞机drawplanet。如何推动和弹出当前矩阵并仅平移场景中的墙 我希望飞机能修好 private: void DrawWall(){ glPushMatrix(); glBegin(GL_POLYGON); LeftWallPattern(); glEnd(); glBegin(GL_POLYGON); RightWallPattern(); glEnd(); g
DrawWall
和一架飞机drawplanet
。如何推动和弹出当前矩阵并仅平移场景中的墙
我希望飞机能修好
private: void DrawWall(){
glPushMatrix();
glBegin(GL_POLYGON);
LeftWallPattern();
glEnd();
glBegin(GL_POLYGON);
RightWallPattern();
glEnd();
glPopMatrix();
}
private: void DrawAirplane(){
glPushMatrix();
glBegin(GL_LINE_LOOP);
//...
glEnd();
glPopMatrix();
}
public: void Display(){
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(0, -0.02, 0);
DrawWall();
DrawAirplane();
glFlush();
}
使用
glPushMatrix()
推动当前矩阵,执行glTranslate
并绘制墙,然后glPopMatrix()
并绘制平面。这只能平移墙。问题是您似乎是在显示中而不是在DrawWall
中执行平移操作。使用glPushMatrix()
推动当前矩阵,执行glTranslate
并绘制墙,然后glPopMatrix()
并绘制平面。这只能平移墙。问题是你似乎是在显示器上做翻译,而不是在DrawWall
应该在的地方做翻译。有几件事可以详述耶稣所说的话
绘制飞机时,您不希望对其应用任何变换,因此需要加载标识矩阵:
Push the current modelview matrix
Load the identity matrix <=== this is the step you're missing
Draw the airplane
Pop the modelview matrix
在初始化过程中的某个时刻,在第一次调用
Display
之前,需要将modelview矩阵设置为标识矩阵。对于以后每次调用Display
,-0.02将被添加到y方向的翻译中。一些事情来扩展耶稣所说的内容
绘制飞机时,您不希望对其应用任何变换,因此需要加载标识矩阵:
Push the current modelview matrix
Load the identity matrix <=== this is the step you're missing
Draw the airplane
Pop the modelview matrix
在初始化过程中的某个时刻,在第一次调用
Display
之前,需要将modelview矩阵设置为标识矩阵。对于以后每次调用显示
,-0.02将添加到y方向的翻译中。我已更改,但不影响!来源如下:@Hallaji我看不出该代码有任何错误(乍一看)。您是否曾调用glLoadIdentity()
以确保在绘图之前加载了标识矩阵?不,我没有在任何地方调用glLoadIdentity()
:(哦,问题出在哪里?:(@Hallaji是的,你应该始终以身份矩阵作为当前矩阵开始。谢谢你的回复。你能解释一下我应该在哪里添加glLoadIdentity()
?我做了更改,但没有影响!以下是来源:@Hallaji我看不出该代码有任何错误(从第一眼看)。您是否曾调用glLoadIdentity()
以确保在绘图之前加载了标识矩阵?不,我没有在任何地方调用glLoadIdentity()
。:(哦,有什么问题吗?:(@Hallaji是的,您应该始终以标识矩阵作为当前矩阵开始。谢谢您的回复。您能解释一下我应该在哪里添加glLoadIdentity()
?