我的程序绘制一个对象,然后转换、旋转、缩放它,然后重新绘制它,等等。要设置翻译,我将这样做:
gl.glTranslatef(2,4,666);
然后清除gl.glTranslatef(-2,-4,-666)
;
我想知道是否有一个内置的功能来做到这一点?
glPushMatrix()和glPopMatrix()是正常的方法。在应用glTranslate之前Push,完成后弹出,它将恢复堆栈。你必须记住,OpenGL是一个使用堆栈的基于状态的系统。当你应用glTranslatef时,你是在将翻译函数添加到堆栈中,所以在它被放置到堆栈之后绘制的任何东西都会对它进行翻译。调用
gl.glTranslatef(2,4,666);
然后
gl.glTranslatef(-2,-4,-666);
如果我理解正确的话,将导致场景首先将你的对象移动到(-2,-4,-666),然后返回(2,4,666)。因为它是一个堆栈,你应用的最后一个转换首先被应用,而第一个是最后一个。这有助于你在设置场景时记住这个小事实。只要在gl. gltranslate(2,4,666);前加一个push,在后面加一个pop,就可以了。
glPushMatrix();
gl.glTranslatef(2,4,666);
//draw code here
glPopMatrix();
只要记住整个堆栈的东西,你应该能够思考任何问题的领域
用glLoadIdentity()
重置你的矩阵。
另一种选择(如果你有很多需要自己矩阵的对象)是在矩阵副本上绘制对象的图纸。为了实现这一目标,您需要使用glPushMatrix()
和glPopMatrix()
。
glloadiidentity ()