OpenGL ES/Android - 是否有内置函数来重置对象的缩放,平移和旋转?

far*_*ich 1 graphics android opengl-es

我的程序绘制一个对象,然后进行翻译,旋转和缩放,然后重绘它等等.要设置翻译我会做:

gl.glTranslatef(2,4,666);
Run Code Online (Sandbox Code Playgroud)

然后清除它gl.glTranslatef(-2,-4,-666);

我想知道是否有内置功能这样做?

Wro*_*lai 5

只需使用重置矩阵即可glLoadIdentity().

另一种替代方法(如果你有很多需要自己矩阵的对象)是在矩阵副本上制作对象的绘图.为了实现这一点,你需要使用glPushMatrix()glPopMatrix().


Dav*_*ido 5

glPushMatrix()和glPopMatrix()是执行此操作的常用方法.在应用glTranslate之前按下,完成时弹出它将恢复堆栈.您必须记住,OpenGL是一个使用堆栈的基于状态的系统.当您应用glTranslatef时,您正在将translate函数添加到堆栈中,因此将其放在堆栈上之后绘制的任何内容都将对其进行转换.调用

gl.glTranslatef(2,4,666); 
Run Code Online (Sandbox Code Playgroud)

然后

gl.glTranslatef(-2,-4,-666);
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,将导致场景首先将您的对象移动到(-2,-4,-666),然后返回(2,4,666).因为它是一个堆栈,所以您应用的最后一个转换首先应用,第一个转换为最后一个.在设置场景时,记住这个小事实很有帮助.只需在gl.glTranslatef(2,4,666);之前按下,然后弹出一个并且你应该是好的.

glPushMatrix();
gl.glTranslatef(2,4,666);
//draw code here
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

只记得整个堆栈的东西,你应该能够思考任何问题区域.