1

http://jsfiddle.net/techsin/CxFRC/15/所有 chrome 都只能单击和拖动,向上和向后箭头。

pastebin.com/gXS1J7zw

问题:我不能c=$('.con')横向移动/平移。我已经成功地做到了前后。但我不能锻炼侧身的公式。

这是我的第一次尝试。使用箭头键,前进和后退的作品有不同的功能。但左右没有。

有问题的代码:您无需担心左右的其余代码主逻辑就在这里。我试过找到垂直角,但它的行为相反,然后相反。

第一个有效且无需注意的代码:

function forwBack(x){ 
   az+= x*(Math.cos((Math.PI/180)*ry))*Math.cos((Math.PI/180)*rx)*speed;
   ax-= x*(Math.sin((Math.PI/180)*ry))*Math.cos((Math.PI/180)*rx)*speed;
   ay+= x*(Math.sin((Math.PI/180)*rx))*speed; 
}

现在代码不符合我的要求......垂直于矢量翻译。

     function rightLeft(x){
       az+= Math.sin(ry*(Math.PI/180))*(Math.cos((rx+90)*(Math.PI/180))*speed*x);
       ax-= Math.cos(ry*(Math.PI/180))*(Math.cos((rx+90)*(Math.PI/180))*speed*x);
       ay+= Math.sin((rx+90)*(Math.PI/180))*speed*x; 
    }

x 是决定左/右或前/后的符号。速度在这里是斜边。Pi/180 度到弧度。弧度为 180/Pi。(绕 x 轴旋转) rx 和 ry 在函数 ch.. 中定义,表示 main(.ma) 容器的旋转。rx 由鼠标的垂直移动定义。

我不需要这样做,但我想这样做。我想让 3d explorer 像一个大厅……只是为了好玩。我曾经像 9 年前那样在 Flash 中做这种事情。那时我还是个孩子。

主要问题是横向并不总是-x或+x,它取决于外部容器旋转了多少(围绕xyz)。因此,如果 m 围绕 y 轴旋转 90 度,只告诉 c 移动 x+ 会使 c 实际上看起来像是在 z 中返回或减小。

连续尝试两天后,我无法解决此问题。

http://jsfiddle.net/techsin/hGkMj/1/ -- 签出 3d

http://jsfiddle.net/techsin/hGkMj/6/ -- 签出 3d

http://jsfiddle.net/techsin/9YjSC/3 我这样做是为了清楚地了解我想要做什么。移动鼠标,并使用箭头键。需要在预览窗口中点击。

4

1 回答 1

0

我发现了问题。在您的函数 rightLeft 中,您正在反转 x 和 y。我重写了函数,它工作正常:

    function rightLeft(x){
        var dAy = 0 ; 
        var dAz = Math.cos((ry+90)*(Math.PI/180))*speed*x;
        var dAx = Math.sin((rx+90)*(Math.PI/180))*speed*x;
        console.log("dAx = " + dAx + " dAz = " + dAz + " dAy = " + dAy);
        ax-= dAx;
        az+= dAz;
        ay+= dAy;
    }

希望这可以帮助!

于 2013-09-20T20:28:02.637 回答