Създавам лабиринт за игра в Three.js. Всички обекти — подът, таванът и стените — са поставени в положителните оси X и Z. Камерата е поставена така:
camera = new THREE.PerspectiveCamera(45,
window.innerWidth / window.innerHeight,
0.1,
1000
);
camera.position.set(0, 0.25, 0);
// The camera is placed pointing to the nearest open path from the
// initial position. Check mazeGenerator.js for the reference of
// "coordinates".
if(grid[1][0] == coordinates.W)
{
camera.lookAt(new THREE.Vector3(1, 0.25, 0));
}
else
{
camera.lookAt(new THREE.Vector3(0, 0.25, 1));
}
и се движи така:
function keyboardCheck()
{
var movementSpeed = 0.02;
var rotationSpeed = 0.03;
if(keyboard.pressed('w') || keyboard.pressed('up'))
{
camera.translateZ(-movementSpeed);
}
if(keyboard.pressed('a') || keyboard.pressed('left'))
{
camera.rotateY(rotationSpeed);
}
if(keyboard.pressed('d') || keyboard.pressed('right'))
{
camera.rotateY(-rotationSpeed);
}
}
Ако поставя камерата без функцията lookAt
, изглежда, че е обърната към [0, 0, 0]
, но разбира се това, което исках да направя, беше да помогна малко на играча, като накарам камерата да гледа към най-близкия възможен отворен път.
За да го накарам да се движи напред, трябва да намаля Z, защото в противен случай, когато натиснете клавиша "преместване напред", той се връща назад. Това ме кара да мисля, че въпреки че казвам на камерата да гледа в определена посока, оста Z на обекта е противоположна на оста Z на света.
Самият въпрос е: защо се случва това?
Благодаря много предварително.