Javascript 二维六角网格透视坐标

Javascript 二维六角网格透视坐标,javascript,math,geometry,perspective,hexagonal-tiles,Javascript,Math,Geometry,Perspective,Hexagonal Tiles,这是一个树桩 移植一些旧代码,我在2.5D中呈现了这个2D十六进制网格: 瓷砖的y比例和位置是为透视而计算的,但我也希望为透视而水平缩放和定位它们(图板顶部的卡通看起来被压扁)。以下是当前代码: const SCALE_X = PixiStages.game._width * 0.0012; const SCALE_Y = PixiStages.game._height * 0.0018; this.scale.x = SCALE_X; this.scale.y = SCALE_Y * (

这是一个树桩

移植一些旧代码,我在2.5D中呈现了这个2D十六进制网格:

瓷砖的y比例和位置是为透视而计算的,但我也希望为透视而水平缩放和定位它们(图板顶部的卡通看起来被压扁)。以下是当前代码:

const SCALE_X = PixiStages.game._width * 0.0012;
const SCALE_Y = PixiStages.game._height * 0.0018;

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

const getStageXFromBoardX = ( board_x ) => {
    const tileWidth = SCALE_X * 38;
    return board_x*tileWidth;
}

const getStageYFromBoardY = ( board_y ) => {
    const tileHeight = SCALE_Y * 44;        
    return board_y*tileHeight/4 + board_y*board_y*tileHeight / (8*Game.TILE_ROWS);
}
只需将x-scale更改为
this.scale.x=scale\ux*(0.5+0.5*gamePiece.y/Game.TILE\u行)如下所示:

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


有什么想法或联系吗?谢谢

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

XPersp = (A * X + B * Y + C) / (G * X + H * Y + 1)
对于您的情况(沿中心轴的透视视线),将带角的矩形(XCenter-W,0)-(XCenter+W,H)转换为垂直居中于XCenter的梯形,通过YSShift向上移动,即:

其中H,E是一些系数,适用于良好外观


改变E(定义梯形高度)大约
0.5-2.0
,H(定义梯形倾斜)大约
0.005

这是一个令人惊讶的答案-非常感谢。。。现在就让我的头绕着它。。。
XPersp = XCenter + (X - XCenter) / (H * Y + 1)
YPersp = (YShift +  E * Y) / (H * Y + 1)