"Exploring One Direction: A bright spotlight on navigating with PointerLockControls in Threejs

My goal is to attach a directional flashlight to the camera (controls object) so that the beam always points towards the center of the screen. Here's the code I'm currently using:

controls = new PointerLockControls( camera, document.body );
var flashlight = new THREE.SpotLight(0xffffff, 7, 50, 0.8*Math.PI);
controls.getObject().add(flashlight);
controls.getObject().add(flashlight.target);

However, instead of a straight beam, the result is light around the camera as shown in the image below.

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

So, how can I achieve a directional beam?

//edit, added Group.

controls = new PointerLockControls( camera, document.body );
var flashlight = new THREE.SpotLight(0xffffff, 7, 50, 0.8*Math.PI);
// camera.add(flashlight);
// camera.add(flashlight.target);
const group = new THREE.Group();
group.add(camera);
group.add(flashlight);  
scene.add(group);

Answer №1

A helpful way to organize objects in your WebGL scene is by using a THREE.Group container

const group = new THREE.Group();
group.add(camera);
group.add(flashlight);

// To control the group as a whole, you can use PointerLockControls
controls = new PointerLockControls( group, document.body );

This allows you to manage and manipulate multiple objects together in your scene. The camera and flashlight will move and rotate in unison when added to the group.

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

What are the issues with using AJAX in conjunction with a for-loop?

I'm currently developing a small application that needs to create work schedules and calculate hours: . I've written the function kalkulacja() to calculate the inputs for each row and output the results through ajax. However, I'm facing an i ...

Is it possible to nest a React component within a state?

Is it permissible to use any of the three options below, but I can't find recent official information regarding this? constructor(props) { this.state = { item: <SomeItem />, item1: () => <SomeItem />, item2: Some ...

Overlapping background images of flex elements in Safari

This webpage is designed as a single-page layout using Gatsby: <div className='mainContent'> <section className='contentSection'> <h1 className='header'>Heading</h1> <div c ...

Tips for interpreting JSONP objects

After setting up this HTML file to send a GET request to the random word API (wordnik) server, I received a response that looked like this: [{"id":2998982,"word":"failproof"}] My goal is to extract the "word" part from the response, but I'm struggli ...

Tips for saving the recently assigned IP address from Terraform?

My current project involves cloud provisioning with Terraform on an EC2 instance, where the process is automated to begin when a request is sent from the front end to the back end. In the backend, I am using Node.js and implementing shell scripts to execu ...

Tips on ensuring that the Google Maps marker remains in the center as you drag the map with the AGM component

I've implemented AGM (Angular Google Maps) in my Ionic Project to showcase Google Maps, and I'm looking to have the marker stay centered on the map even when it is dragged. Is there a way to achieve this with AGM? Please let me know if I have mad ...

Error encountered: Unable to locate module 'psl'

I'm encountering an issue when trying to execute a pre-existing project. The error message I keep receiving can be viewed in the following error logs image Whenever I attempt to run "npm i", this error arises and I would greatly appreciate it if some ...

Execute the JQUERY keyup function only if the mouse is not currently hovering over the input field

I'm struggling with the keyup function issue. My ordering form contains a certain number of items, some of which are grouped as follows: Item 1 - Group1 Item 2 - Group1 The grouped items have two input fields each, one hidden and one visible. I am ...

Verifying the scrollHeight of an element may occasionally result in a return value of 0

While working on a project, I encountered an issue with the scrollHeight of dynamically generated content. In some cases, the function to determine whether or not to include a "more" button in the content would return a value of 0 for scrollHeight, causing ...

Embracing the beauty of incorporating nested quotations

I've been experimenting with jquery's append functions lately. I'm adding a substantial amount of html, specifically a button with an onclick event function. It might sound complicated, but due to some technical restrictions, this is my onl ...

The utilization of the jquery.form.js plugin is resulting in my form being submitted twice

In order to enable Ajax file uploads in my ASP.Net MVC project, I am utilizing the jquery plugin known as "jquery.form.js" (http://malsup.com/jquery/form/#getting-started). However, I am encountering an issue where the controller action responsible for han ...

What is the best way to incorporate an immediately invoked function expression (IIFE) within the return statement of a React

I currently have a modal that pops up when the user clicks a button on my page and it's functioning perfectly: render() { return ( <div> <section> <button onClick={() => this.refs.simpleDialog.show()}> ...

Determine if two arrays share the same keys

Looking to compare two arrays and update them with matching keys while adding 0 for non-matching keys. For example: let obj1 = [ {"type": "Riesenslalom","total": 2862}, {"type": "Slalom", "total" ...

NodeJS instructs open(html) to execute first before any other code is executed

I am evaluating whether nodeJS is a suitable solution for a project I am working on during my internship. To summarize: I need the basicNode.js file to wait until the open('./basic.html') command has completely opened the browser and loaded its c ...

Issue with Vue.js: Textarea not functioning properly within a v-for loop

The v-model value within the v-for loop is not unique. Here is the provided template: <template> <div id="FAQ" v-for="(question, index) in questions.slice().reverse()" :key="index" ...

Observing a peculiar discrepancy in how various versions of JSON.stringify are implemented

Imagine having a deeply nested JS object like the example below that needs to be JSON-encoded: var foo = { "totA": -1, "totB": -1, "totC": "13,052.00", "totHours": 154, "groups": [ {"id": 1, "name": "Name A", " ...

The copy to clipboard feature is malfunctioning when used with a hidden input field in a React application

To implement the copy to clipboard feature, I have successfully achieved it by using the button type as text with type="text". However, the functionality does not work when the button type is set to hidden. Here is the link to the code on CodeSandbox: htt ...

Leveraging Components within Components in Vue 2

Here is the code snippet I am working with: import './menu-item'; import ItemImage from "./item-image"; Vue.component('quest-card', { props: { title: String, isFree: Boolean, points: Number, ...

The nodemailer module in Node.js encountered an issue while trying to send an email, resulting

Looking to confirm registration, I want to send an email from my server (kimsufi). To accomplish this, I am utilizing nodemailer which can be found at https://github.com/andris9/Nodemailer Encountering the following error: Error occurred Sendmail exited ...

What is the method for extracting only TypeScript types from the threeJs package?

I am in the process of developing a front-end application using Webpack with threeJs functionality integrated. Previously, I would refrain from bundling threeJs to keep the size small by utilizing the threeJs UMD from a CDN link in my index.html file. Desp ...