JSFiddle - React, Tailwind, and code Playground
JavaScript
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.119.1/build/three.module.js";
import {
CSS2DRenderer,
CSS2DObject
} from 'https://cdn.jsdelivr.net/npm/three@0.119.1/examples/jsm/renderers/CSS2DRenderer.js';
var camera, scene, renderer, labelRenderer;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
camera.position.z = 5;
scene = new THREE.Scene();
InitTooltip();
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
labelRenderer = new CSS2DRenderer();
labelRenderer.setSize(window.innerWidth, window.innerHeight);
labelRenderer.domElement.style.position = 'absolute';
labelRenderer.domElement.style.top = '0px';
document.body.appendChild(labelRenderer.domElement);
}
function InitTooltip() {
// cube mesh
var geometry = new THREE.BoxBufferGeometry();
var material = new THREE.MeshBasicMaterial({
color: 0xff0000
});
var cube = new THREE.Mesh(geometry, material);
cube.visible = false;
scene.add(cube);
// label
var cubeDiv = document.createElement('div');
cubeDiv.className = 'label';
cubeDiv.textContent = "PC";
cubeDiv.style.marginTop = '-1em';
cubeDiv.style.color = "white";
var cubeLabel = new CSS2DObject(cubeDiv);
// cubeLabel.visible = false; FIX
cubeLabel.position.set(0, 1, 0);
cube.add(cubeLabel);
}
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
labelRenderer.render( scene, camera );
}