我正在尝试使用鼠标实现第一人称动作。我确实让它与键盘一起使用,但我在使用鼠标实现它时遇到了困难,因为向特定一侧的移动不是那么清楚(即向左移动可以包括向上或向下移动)。我想使用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 旋转有关的问题,所以你可以看到它有效但并不完美。将不胜感激任何提示/想法。
PS 我不想使用Pointer Lock API,即使它很棒,因为我希望它支持最大数量的浏览器。