Контролите на камерата са противоположни на това, което трябва да бъдат. Защо?

Създавам лабиринт за игра в 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 на света.

Самият въпрос е: защо се случва това?

Благодаря много предварително.


person MikelAlejoBR    schedule 21.05.2017    source източник


Отговори (1)


Камерата гледа надолу по своята отрицателна ос-z, така че за да се придвижите напред, направете следното:

camera.translateZ( - distance );

Счита се, че всички други обекти гледат в посоката на тяхната положителна ос-z, така че за да преместите други обекти напред, бихте използвали

object.translateZ( distance );

three.js r.85

person WestLangley    schedule 21.05.2017