JSFiddle - React, Tailwind, and code Playground
by Paul West
HTML
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
CSS
body {
overflow: hidden;
margin: 0;
}
JavaScript
var renderer, controls, scene, camera;
init();
function init() {
// Scene
scene = new THREE.Scene();
scene.background = new THREE.Color(0xb0b0b0);
// Camera
camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 0, 200);
camera.up.set(0, 0, 1);
// Light
var ambientLight = new THREE.AmbientLight(0xcccccc, 0.2);
scene.add(ambientLight);
// Helpers
var helpers = new THREE.Group();
var grid = new THREE.GridHelper(200, 10);
grid.rotation.x = Math.PI / 2;
var axis = new THREE.AxesHelper(100);
helpers.add(grid);
helpers.add(axis);
scene.add(helpers);
// Renderer
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Controls
controls = new THREE.OrbitControls(camera, renderer.domElement);
// Event listeners
controls.addEventListener("change", render, false);
// Draw projected mesh
var pts = [
new THREE.Vector2(-20, 0),
new THREE.Vector2(-20, -20),
new THREE.Vector2(20, -20),
new THREE.Vector2(20, 20),
new THREE.Vector2(0, 20),
new THREE.Vector2(0, 0)
].reverse();
// helper
var pHelper = new THREE.Points(new THREE.BufferGeometry().setFromPoints(pts), new THREE.PointsMaterial({color: 0xff0000, size: 10}));
scene.add(pHelper);
var plane = new THREE.Plane().setFromNormalAndCoplanarPoint(
new THREE.Vector3(0.5, 0, 0.5).normalize(),
new THREE.Vector3(0, 0, 30)
);
var ptsProj = getProjectedPoints(pts, plane);
var p2Helper = new THREE.Points(new THREE.BufferGeometry().setFromPoints(ptsProj), new THREE.PointsMaterial({color: "orange", size: 10}));
scene.add(p2Helper);
var capGeom = new THREE.ShapeBufferGeometry(new...