这是交易,我正在用 opengl ES 编写一个 2D 框架/游戏引擎。我正在使用 VBO 和正射投影在整个屏幕上绘制精灵排列(作为测试的一部分),一切都进行得很顺利,直到我不得不使用平移和旋转。我遇到的具体问题是,当我在旋转之前使用 glTranslatef() 应用平移时,该函数不仅会移动精灵,还会移动我的原点,从而打乱了我的整个转换。我 100% 确定它是这样工作的,因为我使用 glTranslatef() 将精灵移动到屏幕大小一半的右侧和底部(是的,我的原点在左上角),然后应用恒定旋转并且东西只是围绕屏幕中心沿圆形路径移动(实际上是旋转,但不像我期望的那样。
如果你想要一些代码,我们去:
gl.glTranslatef(-(x+width/2), -(y+height/2), -layer);
gl.glRotatef(angle, 0.0f, 0.0f, -1.0f);
gl.glTranslatef(x+width/2, y+height/2, layer);
在这段代码中,x 和 y 是精灵的位置,height 和 width 是精灵的大小,angle 是旋转的角度,layer 只是将精灵组织成几层的一种形式,非常简单,对?
同样,我的问题是 glTranslatef(); 正在移动精灵和原点,我是在做错什么还是对翻译有误解?
提前致谢。