What methods can be used to adjust the rotation origin (pivot point) of a Three.js object without making changes to the scene tree structure or geometry?

Is there a way to achieve the desired result mathematically without changing the object's parent or geometry? What modifications would need to be made to its transform matrix, rotation, position, quaternion, etc, in order to accomplish this while adhering to those constraints?

Answer №1

  1. To start, take the pivot matrix and invert it. This inverted matrix will move the pivot to the world origin while keeping your object in place relative to the pivot point [0,0,0].

  2. Next, apply any transformations that you want to be relative to the pivot point.

  3. Finally, reapply the initial pivot matrix (not inverted!) to return the object to its original position.

This example breaks down each step for clarity, but all steps can be combined into a single formula:

object.matrix = inverse(pivot.matrix) * someTransformationMatrix * pivot.matrix

For a demonstration, check out this working demo: https://jsfiddle.net/mmalex/hd8ex0ok/

https://i.sstatic.net/OkQ1R.png

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

Nightwatch execute() function not technique following anticipate

After reviewing the documentation, I am confident that this code should work correctly. However, I am encountering an issue where something needs to run once the expect has finished, but it doesn't seem to be functioning as expected. Functioning Code ...

Guide to creating nested collapsing rows in AngularJS

My attempt to implement expand and collapse functionality in AngularJS for a section is not yielding the desired result. To demonstrate, I created a simple demo of collapsible/expandable sections in AngularJS which works fine. You can view it here. The ex ...

What could be the reason for the lack of styling on the select element when using PaperProps in the MenuProps of my Select component?

I've been struggling to remove the white padding in this select box for a while now. I've tried countless variations and places to tweak the CSS with no success. Any suggestions on how to make it disappear? The project is using MUI 5, and I even ...

Pass along computed style data to the parent component in Vue.js

I am relatively new to VueJS and currently in the process of exploring its features. One specific issue I am facing on my website involves a TopBar component that includes both the logo and the menu. <template> <div id="topBar"> <div ...

Tips for accessing external JSON data and implementing it in a JavaScript navbar

Starting with this as a reference point, I am looking to modify it to read data from an external data.json file. My familiarity with JQuery is limited, but I have been able to achieve the desired outcome by using var JSON = {...same structure as from da ...

The latest pathway fails to refresh in NextJs

I've implemented a search bar at the top of my app which directs to /search/[searchId].js page: <Link href={`/search/${search}`}> <button type='submit' className='btn-cta btn-3'>SEARCH</button> < ...

Retrieving API Data in React Using the MERN Stack

Can anyone help me understand why I'm logging an empty array [] in my console even though I'm getting results from my API? This is my Node.js code: app.get("/todos", async (req, res) => { const todos = await todo.find() res.json(todos ...

Stop Bootstrap Modal from displaying with the help of an ajax error

Is there a way to prevent the Modal from appearing when an ajax call returns an error? I've tried using the code snippet below, but it didn't work for me. Here's how my ajax call is set up: $.ajax({ url: url, data: data, dataTyp ...

Increasing size of one div when clicked while reorganizing the others

Hey there! I was thinking about creating a container with 2 rows of 3 cards inside. I am using Bootstrap 4 for my grid and layout. If you need some card examples, check out here. <div class="container"> <div class="row"> <card-elemen ...

JavaScript: Choosing between explicit imports and the * sign

Why do this in one way: import * as copy from 'copy-to-clipboard'; instead of the other way: import { someMethod } from 'copy-to-clipboard'; Does it impact performance or bundle size? Personally, I find the second option cleaner. ...

Fully responsive header designed for optimal experience at any screen height

I am facing issues with the header and cannot seem to find a solution. My goal is to make the header span 100% of the window screen height. I need a responsive header that adjusts to 100% height, and when resizing for a smaller viewport, nothing should sho ...

Ways to verify the existence of a user in the browser's local storage

I have a project task to create a user registration and login form that utilizes local storage to store data. The functionality is working correctly when a new user registers by saving their email address and password in localStorage. However, I am facing ...

Disallow Zooming and Panning Chart Beyond the Viewport Bounds in d3 v2

I've been scouring through various examples trying to implement this feature in my chart, but with no luck so far. While I have managed to enable panning and zooming on the chart, the issue arises when I can pan and zoom beyond the intended viewport ...

Efficiently process 100 tasks per minute using a microservice architecture

I have a node.js application that needs to perform the following tasks: Retrieve zip files, extract them (containing JS module files with key-value pairs - usually 5-8 files per request) Analyze these files, create new ones from the analysis, and ...

I am currently developing a project using vue-cli, and I have noticed that it takes a significant amount of time to build every time it refreshes. I am looking for a solution to prevent this delay

Working with the vue-cli2.9+ version of my project, I found that every time I started the project or made changes to the code, it would take a considerable amount of time for the modules to build before running the project again. I was looking for ways t ...

Ways to troubleshoot and resolve the jQuery error with the message "TypeError: 'click' called"

I am currently developing a project for managing Minecraft servers, focusing on a configuration panel. I have set up a form that users need to fill out in order to configure the settings and send the values using Ajax. However, I encountered an error: Type ...

Express-Postgres encounters an issue with applying array filtering: error message indicates that the operator for comparing integer arrays and text arrays does not exist

I'm facing an issue where the same query that works on the terminal is now giving me an error: operator does not exist: integer[] && text[] It seems that pg.query is having trouble processing the expression path && Array[$1]. You can ...

Include a script tag in a React component in NextJS without relying on props or context

Currently, I am trying to include a library in my React component using a script tag. My approach involves calling an API in an _app.tsx file and then accessing the result in a _document.tsx file. In the _document.tsx file, I add the script tag to the docu ...

Exploring the functionalities of ng-value and ng-model in text input form fields

As I create a form to update information in a database, everything seems to be functioning properly. The selected data is being retrieved correctly; however, it is not displaying in the text inputs on the webpage. Although the information appears correct ...

Save data from localStorage to clipboard with a click of a button

Imagine you have a total of 25 different names stored in localStorage. How can you easily copy and paste this data from localStorage to clipboard by simply clicking buttons? Take a look at the button code that is designed to copy the localStorage data: & ...