JSFiddle - React, Tailwind, and code Playground
HTML
<!-- <script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r124/three.min.js'></script> -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r125/three.min.js'></script>
CSS
body, html {
margin: 0;
padding: 0;
background: #000;
}
JavaScript
const scene = new THREE.Scene();
const aspect = window.innerWidth / window.innerHeight;
const camera = new THREE.PerspectiveCamera(75, aspect, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({
antialias: true
});
document.body.appendChild(renderer.domElement);
function animate(cb) {
requestAnimationFrame(() => animate(cb));
renderer.render(scene, camera);
cb();
}
renderer.render(scene, camera);
camera.position.set(5, 5, 5);
const crossMesh = (cubeSize, material) => {
const geometry = new THREE.BoxGeometry(...cubeSize);
const cube = new THREE.Mesh(geometry, material);
cube.rotateX(Math.PI / 2);
cube.updateMatrix();
const geometry1 = geometry;
geometry1.merge(cube.geometry, cube.matrix);
const cube2 = new THREE.Mesh(geometry1, material);
cube2.rotateZ(Math.PI / 2);
const geometry2 = geometry;
cube2.updateMatrix();
geometry2.merge(cube2.geometry, cube2.matrix);
const cube3 = new THREE.Mesh(geometry2, material);
return cube3;
};
const mat = new THREE.MeshPhongMaterial({
color: 0xf2f2f2,
shininess: 100,
side: THREE.DoubleSide
});
const cross = crossMesh([1, 7, 1], mat);
cross.position.set(0, 0, 0);
scene.add(cross);
camera.lookAt(cross.position);
const ambientLight = new THREE.AmbientLight(0xffffff);
scene.add(ambientLight);
let c = 0;
animate(() => {
c += 0.005;
cross.rotation.setFromVector3(new THREE.Vector3(c, 0, c));
});