Guidelines for adjusting the camera angle while moving the camera

Recently, I created a basic threeJS 3D application that allows users to navigate and move using four directional keys. However, there seems to be an issue where the movement is consistent regardless of where you are looking. This behavior can be attributed to the code snippet below:

camera.position.x += 0.1

Answer №1

To implement movement in different directions using the arrow keys, you will need to set a default displacement vector of (0.1, 0, 0) as a Vector3. This vector should then have the camera's rotation (quaternion) applied to it before being added to the camera's position. Below is an example of the code:

// Create the camera
var camera = new THREE.PerspectiveCamera();

// Create a reusable displacement vector
var dispVector = new THREE.Vector3();

function onRightKey() {
    dispVector.set(0.1, 0, 0); // Moving right by 0.1 on the x-axis
    applyDisplacement();
}

function applyDisplacement() {
    // Applying the camera's rotation to the displacement vector
    dispVector.applyQuaternion(camera.quaternion);

    // Updating the camera position with the resulting displacement vector
    camera.position.add(dispVector);
}

This concept can be extended to other directional keys as well. For instance, using (-0.1, 0, 0) for moving left or (0, 0.1, 0) for moving up. Here's how you can do it:

function onLeftKey() {
    dispVector.set(-0.1, 0, 0); // Moving left by -0.1 on the x-axis
    applyDisplacement();
}

function onUpKey() {
    dispVector.set(0, 0.1, 0); // Moving up by 0.1 on the y-axis
    applyDisplacement();
}

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Using Vue.js's ref within a v-for iteration

When attempting to utilize components within a v-for loop and initialize the ref for future access to their methods from the parent component, I encountered an issue. Below is a simplified version of the code that demonstrates my scenario: <template> ...

Is it possible to incorporate button classes from the <a> tag into a JQuery fade in/fade out function?

My jQuery image thumb Slider features thumb buttons that link to different div elements. When a user clicks on a thumb button, I want the associated div to smoothly fade in, replacing the previous one. The goal is to have a seamless transition between the ...

Call a PHP function within a functions file using a JavaScript function

Seeking a way to navigate between PHP and JavaScript worlds with confidence. There's a collection of PHP functions stored neatly in custom_functions.php waiting to be called from JavaScript. As I delve into the realm of JavaScript and jQuery, my fam ...

Invoke a function from a page that has been reloaded using Ajax

After making an Ajax request to reload a page, I need to trigger a JavaScript function on the main page based on certain database conditions. This is necessary because I require some variables from the main page for the function. PHP code: if($reset_regi ...

Dealing with an Undefined Property: Troubleshooting Guide

Encountering an error message Uncaught TypeError: Cannot read property 'top' of undefined at VM32939 own.js:819 resulting from var hands_corrected = (hands_original.top + 680) this issue arises because "hands_original" is not used in any par ...

An error of undefined Angular Service/Factory has occurred

I created a factory service called siteCollection: spApp.factory('siteCollection', function(){ return { usersObject : [], getUsers : function (){ $().SPServices({ operation: "GetUserCollectionFromSite", completef ...

Dispatching identification to controller after submission

I am encountering an issue with a page that contains the following code: <div class="col-sm-2 displaybutton"> <div data-point-to="displaysHeader"> @using (Html.BeginForm("Administration", "Home", FormMethod.Post)) ...

Adjust the spacing of a div based on the fluctuating height of another dynamically changing div

Is it possible to dynamically adjust the margin of a div using jQuery or JS? Currently, I have set a margin on a div by calculating the height of a container that includes images. var articleImageHeight = $('.slides_control').height(); $(' ...

Defining a TypeScript interface specifically tailored for an object containing arrow functions

I encountered an issue while trying to define an interface for the structure outlined below: interface JSONRecord { [propName: string]: any; } type ReturnType = (id: string|number, field: string, record: JSONRecord) => string export const formatDicti ...

Creating a Node.js application using Express requires careful consideration of file structure and communication methods

Struggling to pass login form credentials to existing JavaScript files for logic and info retrieval. Login page contains a form with POST method. main.js handles the login: main.js module.exports = { returnSessionToken: function(success, error) { ...

Exclude characters preceded by a particular prefix using regular expressions

I've got this JavaScript function: value.replace(/[\\\*\+\^\?\$\[\]\{\}\-]/g, '\\$&'); It's designed to replace: * , + , ^ , ? , & , { , } with: \ ...

Modify the transition and design of two progress bars

I'm having an issue with merging two Bootstrap progress bars into one. Initially, the first progress bar appears when the page loads and hides after data is loaded. At the same time, the second progress bar shows up. However, the transition animation ...

The functionality of RegExp is not as expected in this specific case, even though it works correctly in all

I am new to Node.js and currently transitioning from a PHP background, eager to learn more about it. My challenge involves using the following Regular Expression: /([A-Z]{2,})+/gim (identifying two or more consecutive letters). The string I am working w ...

The JSON object is not providing the length of the array, returning the value as

I'm currently fetching JSON data from a PHP file in the following manner: $.getJSON('fresh_posts.php',function(data){ global_save_json = data.freshcomments; var countPosts = data.freshposts; var howManyPosts = countPosts.length; ...

What could be causing the color to not appear in the textarea depending on the time condition?

I am attempting to dynamically change the color of my calendar blocks based on the current time. I have created variables for various times in military format and compared them with the current time using a conditional statement. For instance, I have spec ...

The determination of the volume value was impossible using only the values from the object nested within an array

I am currently developing a react app that includes a button labeled Add to create a new calculation. Each calculation consists of two input fields for thickness and surface, as well as an output field for Volume. There is also a button labelled "X" to rem ...

picking out a particular set of data from a JSON document

I have a map of Europe along with a JSON file that displays the unemployment rate for each country in the year 2011. The JSON file also includes x and y elements, allowing me to place a blue circle on top of each country on the map. My goal is to be able ...

Using JavaScript, you can add an article and section to your webpage

Currently, I am utilizing AJAX to showcase posts. My objective is to extract each property from a JSON object that is returned and generate an <article> for the title followed by a subsequent <section> for the content. While I can successfully ...

When the image is scrolled into position, the parallax animation experiences a delay

I am experiencing a delay in the parallax animated effect of 3 images. This issue was correctly pointed out by @Roko C. Buljan. Is there a way to fix this? My code is visible here - but the effect only works under 670px (without going into full screen mo ...

Is it possible for Node.js to not automatically restart the server when modifying .js files?

Right now I have node-supervisor set up to detect changes in .js files, and while it works well, I've realized that it restarts the server every time a js file is saved. Is there a way to save a server-side .js file without triggering a server restart ...