教程总目录: http://blog.csdn.net/zqiang_55/article/details/50878524
Libgdx是基于OpenGL ES的,因此对于初次接触的libgdx坐标系的人往往感觉错综复杂,无从下手,因此本文翻译了wiki的文章,水平有限,可看原文
Touch coordinates
- Units: pixels
- System: y-down
- Type: integer, can’t be fractional
- Range: (0,0) (upper left corner) to (Gdx.graphics.getWidth()-1,Gdx.graphics.getHeight()-1) (lower right corner)
- Usage: touch/mouse coordinates
- Dependence: device specific
Touch coordinates坐标系在app中也是经常用到,点击屏幕/鼠标都会给出的值都是这个坐标系的。 从上面给出的值可以看出它是从左上角开始,到右下角。由于坐标系的每一对值都代表物理像素,因此值不能是小数。
在实际开发中经常会用到下面函数来将Touch坐标系转换为World坐标系
camera.unproject or viewport.unproject
Screen or image coordinates
* Units: pixels
* System: y-up
* Type: integer, can’t be fractional
* Range: (0,0) (lower left corner) to (Gdx.graphics.getWidth()-1, Gdx.graphics.getHeight()-1) (upper right corner)
* Usage: viewport, scissors and pixmap
* Dependence: device/resource/asset specific
Screen坐标系实际上也是表示屏幕的像素坐标,有时候也表示内存中图像的索引,因此也只能是整数,不能是小数。screen坐标转换为touch坐标y = Gdx.graphics.getHeight() - 1 - y;
只有当操作glViewport, glScissor和Pixmap才会使用这种坐标系,可以使用下面方法可以将world坐标系转换为screen坐标系
camera.project and viewport.project
Pixmap and texture coordinates
Pixmap坐标系不太符合OpenGL 坐标系。Pixmap通常用来上传纹理数据。例如当加载PNG图像到纹理时,首先解码到Pixmap,之后再拷贝到GPU在屏幕上渲染。OpenGL希望纹理数据是image坐标系,即y-up。然而,大多数图像格式保存了图像数据其y轴方向y-down.Libgdx不会转换这两种坐标系。还会保持Pixmap和Texture的y的方向u-down.
未来补偿y-down,SpriteBatch翻转textuer的UV坐标
###Normalized render coordinates
* Units: one
* System: y-up
* Type: floating point
* Range: (-1,-1) (lower left corner) to (+1,+1) (upper right corner)
* Usage: shaders
* Dependence: none
Normalized texture (UV) coordinates
- Units: one
- System: y-up
- Type: floating point
- Range: (0,0) (lower left corner) to (1,1) (upper right corner)
- Usage: shaders, mesh, texture region, sprite
- Dependence: none
World coordinates
- Units: application specific, e.g. SI Units
- System: application specific, but usually y-up
- Type: floating point
- Range: application specific
- Usage: game logic
- Dependence: game/application
实在翻译不下去了,有空再翻译