- 大多数2D屏幕/位图坐标系的Y轴正下方(原点位于左上角)。
- 这与大多数人以正的Y轴指向上方(原点为中心)的几何方式思考相反。
大多数游戏如何管理两个不同的2D坐标系?坐标有两种主要类型(屏幕与笛卡尔坐标),但可能有许多不同的坐标空间:精灵空间,世界空间,视图空间,屏幕空间等。
背景:
我最初使游戏中的世界坐标与2D屏幕坐标约定相匹配。这使得使用图形绘制例程非常自然,但是在使用三角函数(如atan2())时会出现一些细微问题。馈入atan2()2D屏幕坐标的结果非常令人困惑,因为atan2()假定正y轴指向上。
因此,我更改了世界坐标,以遵循经典的笛卡尔坐标系(原点位于屏幕左下方)。使用atan2()进行推理更加简单明了,但是现在很难进行其他类型的推理:
- 如果我单击此处的屏幕,下面是什么精灵?
- 我在哪里点击了那个精灵?
- 如果在错误的位置绘制了子图形,则错误地计算了什么?屏幕坐标还是世界坐标?
我意识到从屏幕坐标到直角坐标的转换只涉及将y值按-1缩放,同时可选地转换两个(x,y)值。我对游戏设计的最佳做法更感兴趣:
- 大多数游戏是否只遵循屏幕坐标约定并改变了他们对atan2()之类的东西的看法?
- 何时/如何完成坐标系转换?(使用矩阵,OOP抽象等)
- 子画面位置是否存储为子画面的中心或拐角之一?当我绘制精灵时,精灵的高度/宽度朝“错误”方向移动似乎是一个常见问题。
尽管我的问题主要是关于2D游戏,但OpenGL似乎使用了Y轴指向上方的坐标系。OpenGL必须最终将这些3D坐标投影到2D屏幕坐标系上。也许可以在OpenGL的方法中找到一些指导...