2D六角网格的透视坐标

时间:2016-04-21 06:10:07

标签: javascript math geometry perspective hexagonal-tiles

这是一个难得的......

移植一些旧代码,我在2.5D中渲染了这个2D十六进制网格: enter image description here

y-scale&瓷砖的位置是为透视计算的,但我想扩大规模。同时将它们放置在水平透视位置(板顶部的卡通看起来像是压扁的)。这是当前的代码:

this.scale.x = SCALE_X * ( 0.5 + 0.5 * gamePiece.y / Game.TILE_ROWS );

只需将x-scale更改为-pathForResource:ofType:inDirectory:,如下所示: enter image description here

...所以我想我只需要一个方程来正确设置它们的x位置。

任何想法或链接?谢谢!

1 个答案:

答案 0 :(得分:3)

请注意,透视变换后的X坐标取决于X和Y源坐标。一般表达

XPersp = (A * X + B * Y + C) / (G * X + H * Y + 1)

对于您的情况(沿中心轴的透视视线)将带角的矩形(XCenter-W,0) - (XCenter + W,H)转换为在XCenter垂直居中的梯形,向上移动YShift,是: enter image description here

XPersp = XCenter + (X - XCenter) / (H * Y + 1)
YPersp = (YShift +  E * Y) / (H * Y + 1)

其中H,E是一些适合好看的系数。

V {E(定义梯形高度)约为0.5-2.0,H(定义梯形倾斜)约为0.005