JSFiddle - React, Tailwind, and code Playground
by realhunts
HTML
<script src="http://threejs.org/build/three.min.js"></script>
<script src="http://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script id="vertexShaderSun" type="x-shader/x-vertex">
uniform vec3 viewVector;
varying float intensity;
varying vec2 vUV;
void main() {
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4( position, 1.0 );
vec3 actual_normal = vec3(modelMatrix * vec4(normal, 0.0));
intensity = pow( dot(normalize(viewVector), actual_normal), 6.0 );
vUV = uv;
}
</script>
<script id="fragmentShaderSun" type="x-shader/x-vertex">
varying float intensity;
void main() {
/*vec3 col = vec3(1.0);
vec3 glow = vec3(1, 1, 1) * intensity;
if(intensity >.5){
col = vec3(10., 0., 0.);
gl_FragColor = vec4( col, 1.0 );
}else{
gl_FragColor = vec4( glow, 1.0 );
}
//gl_FragColor = vec4( glow, 1.0 );*/
vec3 glow = vec3(.8, .8, .8) * intensity;
gl_FragColor = vec4( glow, 1.0 );
}
</script>
<script id="fragmentShaderBlur" type="x-shader/x-vertex">
precision highp float;
varying vec2 vUV;
uniform sampler2D textureSampler;
uniform sampler2D refSampler;
void main(void) {
vec4 color = vec4(0.);
vec4 lumConst = vec4(0.2126, 0.7152, 1.0722, .0);
float threshold = .21;
vec4 inputSample = texture2D(refSampler, vUV);
vec4 result;
if (dot (inputSample, lumConst) < threshold)
{
// result = vec4(0.);
result.g *= 100.;
}
else
{
result = inputSample;
}
color = result;
if(color.r < 1.){
// color.r *= 4.;
// color.g *= 4.;
// color.b *= 4.;
// color.a *= 4.0;
color *= 6.0;
}
vec4 initial = texture2D(refSampler, vUV);
gl_FragColor = vec4(initial.rgb * (color.rgb), 1.);
}
</script>
JavaScript
// a basic three.js scene
var container, renderer, scene, camera, controls;
init();
animate();
function init() {
// renderer
renderer = new THREE.WebGLRenderer({
antialias: false
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0xccccff);
container = document.createElement('div');
document.body.appendChild(container);
container.appendChild(renderer.domElement);
// scene
scene = new THREE.Scene();
// camera
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.set(0, 200, 800);
camera.lookAt(scene.position);
// (camera) controls
// mouse controls: left button to rotate,
// mouse wheel to zoom, right button to pan
controls = new THREE.OrbitControls(camera, renderer.domElement);
// light
var light = new THREE.PointLight(0xffffff);
light.position.set(100, 250, 250);
scene.add(light);
// mesh
var sphereGeometry = new THREE.SphereGeometry(100, 32, 16);
var sphere = new THREE.Mesh(sphereGeometry);
sphere.position.y = 100;
scene.add(sphere);
var sphere2 = new THREE.Mesh(new THREE.SphereGeometry(120, 32, 16));
sphere2.position.y = 100;
scene.add(sphere2);
THREE.TextureLoader.crossOrigin = '';
THREE.ImageUtils.crossOrigin = '';
var mtcp = THREE.ImageUtils.loadTexture('https://cdn.glitch.com/936ab9e3-541f-4e60-bab4-b2b5d163d73f%2F12719.jpg?1556847569879')
var texture2 = THREE.ImageUtils.loadTexture("https://cdn.glitch.com/6b59148a-de9f-4829-98fe-67e50d7ee457%2Fbrick.jpg?v=1592403441437")
let blurMaterial = new THREE.ShaderMaterial({
uniforms: {
viewVector: {
type: "v3",
value: camera.position
},
refSampler: {
type: "texture",
value: texture2
}
},
vertexShader: document.getElementById('vertexShaderSun').textContent,
fragmentShader:...