[+] Cursor dot

This commit is contained in:
Hykilpikonna
2021-12-10 14:34:15 -05:00
parent 9f59e2cabb
commit 79f0f18376
2 changed files with 21 additions and 9 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ export function box(width: number, height: number, depth: number): THREE.BufferG
* @param r * @param r
* @param hollow * @param hollow
*/ */
export function circle(color: number, z: number, r: number, hollow = false): THREE.Object3D export function circle(color: THREE.Color | number | string, z: number, r: number, hollow = false): THREE.Object3D
{ {
const geometry = new THREE.CircleGeometry(r, 32) const geometry = new THREE.CircleGeometry(r, 32)
const material = new THREE.MeshBasicMaterial({color}) const material = new THREE.MeshBasicMaterial({color})
+20 -8
View File
@@ -3,22 +3,41 @@ import {BufferGeometry, Color} from "three";
import {MeshLine, MeshLineMaterial} from 'meshline'; import {MeshLine, MeshLineMaterial} from 'meshline';
import IUpdatable from "@/animation/components/IUpdatable"; import IUpdatable from "@/animation/components/IUpdatable";
import {moused} from "@/animation/Trackers"; import {moused} from "@/animation/Trackers";
import {circle} from "@/animation/Helpers";
type CursorConfig = {radius: number, color: Color, width: number} type CursorConfig = {radius: number, color: Color, width: number}
export default class Cursor implements IUpdatable export default class Cursor implements IUpdatable
{ {
camera: THREE.Camera
circle: CursorCircle circle: CursorCircle
dot: THREE.Object3D
constructor(scene: THREE.Scene, conf: CursorConfig, camera: THREE.Camera) constructor(scene: THREE.Scene, conf: CursorConfig, camera: THREE.Camera)
{ {
this.camera = camera
this.circle = new CursorCircle(conf, camera) this.circle = new CursorCircle(conf, camera)
scene.add(this.circle) scene.add(this.circle)
this.dot = circle('#000', 0, 0.3)
scene.add(this.dot)
this.circle.visible = false
} }
update(dt: number): void update(dt: number): void
{ {
this.circle.update(dt) this.circle.update(dt)
// Move cursor https://www.reddit.com/r/threejs/comments/eba9l3/3d_cursor_using_threejs_html_css/
// https://jsfiddle.net/atwfxdpd/10/
const vector = new THREE.Vector3(moused.x, moused.y, 0.5)
vector.unproject(this.camera)
const dir = vector.sub(this.camera.position).normalize()
const distance = -this.camera.position.z / dir.z
const pos = this.camera.position.clone().add(dir.multiplyScalar(distance))
this.dot.position.copy(pos)
this.circle.position.copy(pos)
} }
} }
@@ -49,13 +68,6 @@ export class CursorCircle extends THREE.Mesh implements IUpdatable
update(dt: number): void update(dt: number): void
{ {
// Move cursor https://www.reddit.com/r/threejs/comments/eba9l3/3d_cursor_using_threejs_html_css/ return
// https://jsfiddle.net/atwfxdpd/10/
const vector = new THREE.Vector3(moused.x, moused.y, 0.5)
vector.unproject(this.camera)
const dir = vector.sub(this.camera.position).normalize()
const distance = -this.camera.position.z / dir.z
const pos = this.camera.position.clone().add(dir.multiplyScalar(distance))
this.position.copy(pos)
} }
} }