マウスを使用して一人称の動きを実装しようとしています。キーボードで動作していますが、特定の側への移動が明確ではないため、マウスを使用して実装するのは困難です (つまり、左に移動すると上下に移動する可能性があります)。matrix3d
位置の変更された値を受け取るために使用したい。
EDIT #2ここにjsfiddleがあります。
EDIT私が解決した新しいコードを貼り付けました:
$(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();
});
ご覧のとおり (1 行のマトリックスで申し訳ありません) 私は同じマトリックスの変更で X と Y の回転の変更を述べてから、それをコミットしています。問題はcos(XTURN).toFixed(10)
、X と Y の回転に関連している可能性があることです。であるため、機能していることがわかりますが、完全ではありません。ヒントやアイデアをいただければ幸いです。
PS Pointer Lock APIは使用したくありませんが、最大数のブラウザーをサポートする必要があるためです。