2015-11-13 74 views
1

我与SMFL/C++的工作做一个2D等距游戏引擎之间不必要的空间,我得到这个当我做等距算了一笔账:等距坐标,菱形,瓷砖

enter image description here

这里我的公式我在2D引擎来计算等距坐标: 对于IJ坐标我有:

x = (I - J) * (tileWidth/2); 
y = (J + I) * (tileHeight/2); 

//Totally working with classics tiles 

编辑:我的问题是由于我的瓷砖形至极是立方体,但我不知道如何解决它。我真的不得不做一些复杂的数学来处理3D objetcs(我宁愿避免这种情况),或者我可以稍微改变一下公式?

编辑2:解决方法:int isoY = (x + y) * (height/4);

回答

1

首先,如果它是一个2D引擎中我不知道为什么有3个维度,为何及如何在您的发动机使用ž。

假设您想要在正交投影中给定坐标(I,J)的瓦片数目的等轴投影((x,y)中的瓦片计划)。 在这种情况下,您给出的公式x和y对我来说很好给定了tileWidth和tileHeight是正确的(即等轴投影中的值)。你不应该使用任何z。

在另一方面,如果你的问题是获得(X,Y)像素为单位的(X,Y,Z)的3D对象的坐标笛卡尔坐标我建议你阅读本:Computing the Pixel Coordinates of a 3D Point

如果我假设错我会编辑或删除。

+0

这是等轴测投影,你说得对,现在我只用z作为图层的位置,我的不好。 但我仍然想知道为什么我的地图不是一个完美的diamong:/ – Madz

+0

我编辑了我的帖子。我不明白为什么它不工作,因为我在互联网上到处读到这个公式,并且它适用于所有人... 而且错误不是关于我如何编码,因为公式是完全写(writed?)像this:/ 'int isoX =(x-y)*(width/2); int isoY =(y + x)*(height/2);' – Madz

+0

宽度和高度的值是多少?因为它应该是等轴测投影中的值。 (我以这种方式编辑)。 你如何绘制你的瓷砖? – Rbtnk