【发布时间】:2013-08-15 11:14:06
【问题描述】:
我正在尝试使用鼠标实现第一人称动作。
我确实让它与键盘一起使用,但我在使用鼠标实现它时遇到了困难,因为移动到特定的一侧不是那么清楚(即向左移动可以包括向上或向下移动)。
我想使用matrix3d 来接收位置的更改值。
编辑#2这是jsfiddle。
编辑我已经粘贴了我设法解决的新代码:
$(document).on('mousemove', function (e) {
var MOVE = 10; // how much to move
var XTURN = 1; // how much to rotate
var YTURN = 1; // how much to rotate
var transformer, origMat, translationMatrix, result;
transformer = document.getElementById("transformer");
if ($.browser.webkit)
origMat = new WebKitCSSMatrix(window.getComputedStyle(transformer).webkitTransform);
//turn left
if (e.pageX < xPrev) {
if (XTURN < 0) {
XTURN *= -1;
}
xPrev = e.pageX;
//turn right
} else {
if (XTURN > 0) {
XTURN *= -1;
}
xPrev = e.pageX;
}
//look up
if (e.pageY < yPrev) {
if (YTURN < 0) {
YTURN *= -1;
}
yPrev = e.pageY;
//look down
} else {
if (YTURN > 0) {
YTURN *= -1;
}
yPrev = e.pageY;
}
translationMatrix = new WebKitCSSMatrix("matrix3d(" + cos(XTURN).toFixed(10) + ",0," + sin(XTURN).toFixed(10) + ",0,0,"+ cos(-YTURN).toFixed(10) +","+ sin(YTURN).toFixed(10) +",0, " + sin(-XTURN).toFixed(10) + ","+ sin(-YTURN).toFixed(10) +"," + cos(XTURN).toFixed(10) + ",0,0,0,0,1)");
transformer.style.webkitTransform = translationMatrix.multiply(origMat).toString();
});
如您所见(对单行矩阵表示抱歉)我正在说明 X 和 Y 旋转在同一个矩阵变化上的变化然后提交它,现在的问题是 cos(XTURN).toFixed(10) 可以相关到 X 和 Y 旋转,所以你可以看到它有效但并不完美。
将不胜感激任何提示/想法。
P.S 我不想使用Pointer Lock API,尽管它很棒,因为我希望它支持最大数量的浏览器。
【问题讨论】:
-
如果您可以使用,请在答案中发布您更改的内容,或删除问题(答案会更好)。
-
它没有按应有的方式工作,因此没有解决,因此发布答案将是错误的做法。我已经发布了自第一个问题以来发生的变化的编辑。
-
哦,对不起,我误会了。我以为你说你解决了。
-
你看过quaternions 吗?如果您有兴趣,我可以尝试使用此技术找到我的一些旧代码。这些确实更容易操作,计算量更少。
标签: javascript jquery css