首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于摄像机位置和旋转的相对项目位置计算

基于摄像机位置和旋转的相对项目位置计算
EN

Stack Overflow用户
提问于 2014-08-04 13:03:23
回答 1查看 1.3K关注 0票数 2

对于2d游戏,我有以下几个概念:

  • 舞台:放置物品和照相机的容器。
  • 物品:一个可见的实体,位于世界上的某个点上,从中心锚定。
  • 照相机:一种无形的物体,用来产生世界的相对图像,位于世界的某一点上,固定在中心。

在插图中,您可以看到它们之间的关系,以及最终结果应该是什么。

下面是我的代码:(为了让阅读变得更容易)

Note1:这不是在画布上发生的,所以我不会使用画布平移或旋转(即使这样,我也不认为它会使问题变得更容易)。

Note2:物品和相机的位置是中心坐标。

代码语言:javascript
复制
var sin = Math.sin(rotationRad);
var cos = Math.cos(rotationRad);

var difX = item.x - camera.x;
var difY = item.y - camera.y;
var offsetX = camera.width / 2;
var offsetY = camera.height / 2;

var view.x = (cos * difX) - (sin * difY) + _Ax + _Bx;
var view.y = (sin * difX) + (cos * difY) + _Ay + _By;

这应该是通过以下方法计算项的新位置:

  • 用相机中心旋转来计算物品的新位置
  • (_A*)通过偏移相机位置来调整项目位置
  • (_B*)通过调整相机尺寸来调整项目位置

在这里,我尝试了几种不同的解决方案,用于_A*和_B*,但它们都不起作用。

正确的方法是什么,如果可能的话,解释是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-08-08 19:56:33

首先从对象位置减去新的原点位置。然后你用旋转的反义词来旋转它。新的来源可以是相机位置左上角的视口。当然,如果您知道视口中心,它的左上角是通过减去一半的尺寸。

如下所示:

代码语言:javascript
复制
var topLeft = Camera.Position - Camera.Size / 2;

var newPosition = Object.Position - topLeft;

newPosition = Rotate(newPosition, -camera.Angle);

轮换非常简单:

代码语言:javascript
复制
rotatedX = x * cos(angle) - y * sin(angle)
rotatedY = y * cos(angle) + x * sin(angle)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25119349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档