OpenGL ES/Android——是否有一个内置的功能来重置一个对象的缩放,平移,旋转



我的程序绘制一个对象,然后转换、旋转、缩放它,然后重新绘制它,等等。要设置翻译,我将这样做:

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 ()

最新更新