我正在用3D制作游戏。我的代码中的一切都是正确的,尽管我对一件事感到困惑。
当我设置我的观点(gluPerspective)时,我将其设置为zNear = 0.1f
和zFar = 100.0f
。到现在为止还挺好。现在,我也希望通过glTranslate...
在x或y方向移动东西。但是,起源始于我屏幕的绝对中心。就像我有zFar
和zNear
一样,为什么x和y坐标不合适呢?现在就好像我将精灵-2.0f
移到x轴左侧并使glTranslate...
处理它,它几乎不在屏幕之外。并且z轴不是那样的。这使得处理所有方向的计算变得更加困难。向对象添加一个唯一的浮点值非常困难,现在我只是随机添加这些值以使它们保持在屏幕内。
所以,我有问题计算纠正每个对象的值。我错过了什么吗?我应该改变或思考什么吗?这很重要的原因是因为我需要知道我的屏幕的绝对左侧和右侧才能进行这些计算。
这是我的onSurfaceChanged
:
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float)width / (float)height,
0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
提前致谢!
答案 0 :(得分:1)
当您使用gluPerspective时,您正在使用默认情况下查看(0,0,0)的矩阵将您的坐标从3D世界空间转换为2D屏幕空间(即x = 0,y = 0位于其中心)屏幕)。设置对象坐标时,您在世界空间中进行,而不是在屏幕空间中进行。
如果你想有效地做2D图形(在屏幕上给出的位置与你在屏幕上的位置相对应,你想要使用gluOrtho2D。