What is the method for displaying objects as 'icons' in three.js?

Imagine having a sleek spaceship visualized in your scene. As you zoom out, the ship shrinks proportionally, which is a fairly simple task. However, at some point, you may want to swap the detailed spaceship model with a basic triangle that symbolizes the ship. In this scenario, the triangle representation should follow the ship's movements and camera adjustments accurately. It must maintain its orientation regardless of any rotations or camera rolls applied. While achieving this on a canvas might seem straightforward by plotting the x and y coordinates of the 3D object to draw the triangle, the challenge lies in drawing directly on the WebGL canvas itself. Is it even possible? If not, are there alternative strategies or techniques you can suggest to accomplish this task effectively? Any guidance would be greatly appreciated as I navigate my way through this issue. Thank you in advance.

Update: After careful consideration, I have decided to adopt the orthographic camera overlay method as recommended below and in various other sources.

Answer №1

Utilize a Sprite object to display the icon. Then position the icon between the spaceship and camera at a specific distance from the camera, either by utilizing a Raycaster or simple calculations.

Another option is to utilize an orthographic overlay as suggested by @WestLangley. In this scenario, you would need to determine the ship's position relative to your canvas. You could potentially create an HTML overlay using a DIV element and place the icon inside it as an IMG object.

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

Provide JSON data on a designated pathway

I'm currently working on setting up a basic API that will respond with JSON data when accessed at the path /json The goal is to send back the object {"message": "Hello json"} in JSON format whenever a GET request is made to the /j ...

Creating a PHP form with multiple buttons

I'm facing a problem with my form that contains 2 buttons. Depending on which button is selected, the data in the database should be either deleted or edited. I have separate pages for editing and deleting using SQL statements (questionedit and questi ...

Setting up Supertest and Express together is leading to a timeout error

In my server.test.js file, I have a straightforward setup: import 'regenerator-runtime/runtime'; const request = require('supertest'); const express = require("express") const app = express(); app.get('/user', func ...

Adjusting the transparency of the object's interior

I used the side property to give my object an interior, but it also reflects the exterior: let material = new THREE.MeshStandardMaterial({side: THREE.DoubleSide}); https://i.sstatic.net/oikad.png https://i.sstatic.net/Vb03K.png Is there a way to red ...

Issue with ion-content on Ionic app not scrolling down when keyboard is displayed on an Android device

Currently, I am facing an issue with a basic view that contains a login form. When the keyboard pops up on Android devices, the content does not scroll up to ensure it remains visible above the keyboard. I have diligently followed the Keyboard instruction ...

Is there a way to activate and change the color of a Radio Button when it is clicked?

Is there a way to change the background-color of a clicked Radio Button so it appears highlighted? For example, when the first choice is clicked, I want it to stand out visually. This is the current UI displaying the choices: https://i.stack.imgur.com/a7 ...

What are the different ways to utilize the Angular Loading Bar for specific waiting scenarios?

In the project I am currently working on, navigation is primarily done through Ajax loading of HTML templates. The Angular Loading Bar feature is proving to be quite effective in this setup, as it employs interceptors to keep track of most $http requests. ...

The scrolling feature induces a contraction to the left side

Recently, I implemented the code below to fix my menu when scrolling the page: var num = 5; $(window).bind('scroll', function () { if ($(window).scrollTop() > num) { $('.scroll').css({'position':'fixed&apo ...

What could be the reason for the malfunctioning of the "subscribe" button?

Whenever the subscribe button is clicked, it should send an email to the "subscriptions" section of the database. Unfortunately, when I click the button, nothing seems to happen. My understanding of this is very limited and I can't seem to troubleshoo ...

How to update a <table> in AngularJS or JavaScript to keep it current

I've been trying for hours to figure out how to refresh the <table> with random values when a button is clicked. I've assigned id="myTable" to the <table> and tried using the .reload() function, but it's not working. Any suggesti ...

What are some other options besides object-fit?

Currently seeking a replacement for the css object-fit property that functions properly in Firefox and IE. While it works well in Chrome and Opera, it is not compatible with Firefox and IE. Experimented with the imgLiquid Plugin, but encountered issues w ...

To activate two separate click events, one for an absolute element and another for the element positioned behind it, simply click on the desired absolute element to trigger both actions

Is it possible to trigger click events for both of these elements? position: relative container ELEMENT 1: standard div ELEMENT 2: position: absolute div In real life, element 2 is a transparent backdrop designed to capture clicks on top of the header ...

Encountering a hiccup while trying to inject $filter in AngularJS

I am attempting to utilize the code snippet found at http://jsfiddle.net/phaas/8jFpV/, but I keep encountering an issue with injecting $filter // Custom directive for converting dates between different formats app.directive('DateConverter', func ...

Occasional TypeError when receiving JSONP response using jQuery .ajax()

Occasionally, I encounter an error message stating Uncaught TypeError: undefined is not a function when processing the JSONP response from my jQuery .ajax() call. The JSON is returned successfully, but sometimes this error occurs during the reading process ...

Connecting NGINX to a Node.js cluster with proxy_pass

After setting up both a NGINX server and a node.js process, the node.js code structure is as follows: function initiateCluster() { var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i ...

Change the blue line to a crisp, clean white

Is it possible to customize the color of the blue line that appears when clicked? class Greetings extends React.Component { render() { return <div>Greetings {this.props.name}</div>; } } ReactDOM.render( <div> <p tabInde ...

Unable to show messages of urgency

Currently, I am diving into new concepts in Express and my focus is on displaying express messages. I have included flash and express-messages as dependencies and set up messages as a locals variable. (require('express-messages')(req, res)). Fo ...

Leveraging JavaScript and PHP for fetching image files and generating a downloadable zip folder

Currently, I am in the process of creating a Safari extension specifically designed for imageboard-style websites. One of the key features that I am eager to incorporate is the ability to download all images that have been posted on the site (not including ...

When was Chrome first updated to include timezone offset support for Intl.DateTimeFormat()?

My experience with Chromium 121 has been positive using the Intl.DateTimeFormat as shown below: new Intl.DateTimeFormat('en', { dateStyle: 'long', timeStyle: 'long', timeZone: '+0500', }).format ...

Tired of the premium content on Medium.com. How can I conceal premium posts that are aimed at a specific class within a parent element?

I have noticed that all Premium posts contain an element with the class ="svgIcon-use" <svg class="svgIcon-use" width="15" height="15" viewBox="0 0 15 15" style=""><path d="M7.438 2.324c.034-.099.090 123 0l1.2 3.53a.29.29 0 0 0 .26.19h3.884c.11 0 ...