JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://threejs.org/build/three.min.js"></script>
CSS
body {
background-color: #000;
margin: 0px;
overflow: hidden;
}
JavaScript
// Work-around to render a Cabinet Oblique Projection
// Use an orthographic camera, and apply a shear matrix to the geometry before rendering
// dom
var container = document.createElement( 'div' );
document.body.appendChild( container );
// renderer
var renderer = new THREE.WebGLRenderer( );
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
// scene
var scene = new THREE.Scene();
// camera
var d = window.innerWidth / window.innerHeight;
var camera = new THREE.OrthographicCamera( -10 * d, 10 * d, 10, -10, 1, 1000 );
camera.position.set( 0, 0, 20 ); // looking down the z-axis
camera.lookAt( scene.position );
// material
var material = new THREE.MeshNormalMaterial( { overdraw: 0.5 } );
// geometry
var geometry = new THREE.BoxGeometry( 5, 5, 5 );
// mesh
var mesh = new THREE.Mesh( geometry, material ); // centered at the origin
scene.add( mesh );
// shear matrix
// ref: http://www.flipcode.com/documents/matrfaq.html#Q43
// | 1 Syx Szx 0 |
// | |
// | Sxy 1 Szy 0 |
// M = | |
// | Sxz Syz 1 0 |
// | |
// | 0 0 0 1 |
// | |
var alpha = Math.PI / 6; // or Math.PI / 4
var Syx = 0,
Szx = - 0.5 * Math.cos( alpha ),
Sxy = 0,
Szy = - 0.5 * Math.sin( alpha ),
Sxz = 0,
Syz = 0;
var matrix = new THREE.Matrix4();
matrix.set( 1, Syx, Szx, 0,
Sxy, 1, Szy, 0,
Sxz, Syz, 1, 0,
0, 0, 0, 1 );
// apply shear matrix to geometry
mesh.geometry.applyMatrix( matrix ); // this is the work-around hack <======================
// render
renderer.render( scene, camera );