JSFiddle - React, Tailwind, and code Playground
HTML
<div class="calls"></div>
CSS
body {
margin: 0;
}
.calls {
position: fixed; top: 0; left: 0; color: white;
}
JavaScript
import * as THREE from 'https://cdn.skypack.dev/three'
let camera, scene, renderer;
let geometry, material, mesh;
let calls = document.querySelector(".calls");
init();
function init() {
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
camera.position.z = 1;
scene = new THREE.Scene();
geometry = new THREE.PlaneGeometry( 1, 1 );
material = new THREE.MeshNormalMaterial();
mesh = new THREE.Mesh( geometry, material );
mesh.position.z = -1;
scene.add( mesh );
geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );
material = new THREE.MeshNormalMaterial({
opacity: 0.5, side: THREE.DoubleSide, transparent: true
});
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
// hacky-hacky
let hack = true;
mesh.onBeforeRender = function() {
hack = false;
};
Object.defineProperty(material, 'transparent', {
get: function() {
let t = hack; hack = true; return t
}
});
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setAnimationLoop( animation );
document.body.appendChild( renderer.domElement );
}
function animation( time ) {
mesh.rotation.x = time / 2000;
mesh.rotation.y = time / 1000;
renderer.render( scene, camera );
calls.textContent = renderer.info.render.calls;
}