JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://rawgit.com/mrdoob/three.js/master/build/three.js"></script>
<script src="https://rawgit.com/mrdoob/three.js/master/examples/js/loaders/VTKLoader.js"></script>
<script type="x-shader/x-vertex" id="vertexShader">
attribute vec3 center;
varying vec3 vCenter;
void main() {
vCenter = center;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<script type="x-shader/x-fragment" id="fragmentShader">
#extension GL_OES_standard_derivatives: enable
varying vec3 vCenter;
float edgeFactorTri() {
vec3 d = fwidth(vCenter.xyz);
vec3 a3 = smoothstep(vec3(0.0), d * 1.5, vCenter.xyz);
return min(min(a3.x, a3.y), a3.z);
}
void main() {
gl_FragColor.rgb = mix(vec3(1.0), vec3(0.2), edgeFactorTri());
gl_FragColor.a = 1.0;
}
</script>
JavaScript
function BufferEdgesHelper(geometry) {
var positions = geometry.attributes.position.array;
// Build new attribute storing barycentric coordinates
// for each vertex
var centers = new THREE.BufferAttribute(new Float32Array( 3 * positions.length ), 3);
for( var f = 0; f < positions.length; f += 9 ) {
centers.array[ f + 0 ] = 1;
centers.array[ f + 1 ] = 0;
centers.array[ f + 2 ] = 0;
centers.array[ f + 3 ] = 0;
centers.array[ f + 4 ] = 1;
centers.array[ f + 5 ] = 0;
centers.array[ f + 6 ] = 0;
centers.array[ f + 7 ] = 0;
centers.array[ f + 8 ] = 1;
}
geometry.addAttribute( 'center', centers );
}
// Build shader
var vertexShader = document.getElementById( 'vertexShader' ).textContent;
var fragmentShader = document.getElementById( 'fragmentShader' ).textContent;
var material = new THREE.ShaderMaterial( {
uniforms: {},
attributes: {
'center': { type: 'v3', value: null, boundTo: 'faceVertices' }
},
vertexShader: vertexShader,
fragmentShader: fragmentShader
} );
// ------------------------------------------------------------------------
// (Boilerplate)
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75,
window.innerWidth /
window.innerHeight,
0.01, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// load vtk file
var loader = new THREE.VTKLoader();
var mesh; loader.load("https://gist.githubusercontent.com/colinbrownec/c72a3a18da6ef920e754/raw/dade28318a86042d0972569f76b5912ed5f5b785/gistfile1.txt",...