polygon offset
pavement & marking
by jmcjc5u
HTML
<div id="info">polygon offset</div>
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js">
</script>
<script src="https://raw.githack.com/mrdoob/three.js/master/examples/js/utils/SceneUtils.js"></script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var camera, scene, renderer, geometry, material, light, controls;
init();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 500;
scene.add(camera);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
controls = new THREE.OrbitControls(camera, renderer.domElement);
document.body.appendChild(renderer.domElement);
/////// CENTER: blue pushed back /////////
var mesh1 = new THREE.Mesh(new THREE.BoxGeometry(40, 50, 50),
new THREE.MeshBasicMaterial({
color: 0xff0000,
}));
var mesh0 = new THREE.Mesh(new THREE.BoxGeometry(50, 50, 50),
new THREE.MeshBasicMaterial({
color: 0x0000ff,
polygonOffset: true,
polygonOffsetFactor: 1.0,
polygonOffsetUnits: 4.0
}));
scene.add(mesh1);
scene.add(mesh0);
////////// BLUE FILL+LINE //////////////
var mesh2 = new THREE.Mesh(new THREE.BoxGeometry(50, 50, 50),
new THREE.MeshBasicMaterial({
color: 0x0000ff,
polygonOffset: false,
polygonOffsetFactor: 1.0,
polygonOffsetUnits: 4.0
}));
mesh2.position.set(100, 0, 0);
scene.add(mesh2);
var mesh2Line = new THREE.Mesh(new THREE.BoxGeometry(50, 50, 50),
new THREE.MeshBasicMaterial({
color: 0xffffff,
wireframe: true
}));
mesh2Line.position.set(100, 0, 0);
scene.add(mesh2Line);
///////////////////////////////////////////////////////////////
// createMultiMaterialObject does not solve the z-fighting problem
// This is mostly useful for object that need a material and a wireframe implementation.
// (it simply superimposes them)
//
var mesh3geom = new THREE.BoxGeometry(50, 50, 50);
var mat = new THREE.MeshBasicMaterial({
color: 0x00ff00,
polygonOffset: true,
polygonOffsetFactor: 1.0,
polygonOffsetUnits: 4.0
});
var mat2 = new...