마우스를 사용하여 1 인칭 동작을 구현하려고합니다. 키보드로 작업해도 마우스를 사용하여 구현하는 데 어려움이 있습니다. 특정면으로의 이동이 명확하지 않아서 (즉, 왼쪽으로 움직이는 것이 위 또는 아래로 움직이는 것을 포함 할 수 있기 때문입니다.) 변경된 위치 값을 받으려면 matrix3d
을 사용하고 싶습니다.마우스로 제어되는 1 인칭 동작 JS
편집 # 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 행렬을 바꾼 다음 커밋하면 이제는 X 및 Y 회전과 관련 될 수있는 cos(XTURN).toFixed(10)
을 사용하여 문제가 해결됩니다. 그러나 완벽하지는 않습니다. 팁/아이디어를 주시면 감사하겠습니다.
피씨 나는 최대한의 브라우저를 지원하기를 원하기 때문에 Pointer Lock API을 사용하고 싶지 않습니다.
바랍니다. – FakeRainBrigand
따라서 해결되지 않아야하므로 제대로 작동하지 않습니다. 따라서 답변을 게시하면 잘못 될 수 있습니다. 첫 번째 질문 이후 변경된 내용을 게시했습니다. –
아, 죄송합니다. 오해했습니다. 네가 네가 해결했다고 말한 줄 알았는데. – FakeRainBrigand