JSFiddle - React, Tailwind, and code Playground
by Paul West
CSS
body{
overflow: hidden;
margin: 0;
}
JavaScript
console.clear();
import * as THREE from "https://cdn.jsdelivr.net/npm/[email protected]/build/three.module.js";
import {OrbitControls} from "https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/controls/OrbitControls.js";
let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 1000);
camera.position.set(0, 0, 10);
let renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(innerWidth, innerHeight);
renderer.setClearColor(0x404040);
document.body.appendChild(renderer.domElement);
let controls = new OrbitControls(camera, renderer.domElement);
let g = new THREE.PlaneGeometry(10, 10, 100, 100);
let m = new THREE.PointsMaterial({
map: new THREE.TextureLoader().load("https://threejs.org/examples/textures/758px-Canestra_di_frutta_(Caravaggio).jpg"),
size: 0.1,
onBeforeCompile: shader => {
shader.vertexShader = `
varying vec2 vUv;
${shader.vertexShader}
`.replace(
`#include <begin_vertex>`,
`#include <begin_vertex>
vUv = uv;
`
);
console.log(shader.vertexShader);
shader.fragmentShader = `
varying vec2 vUv;
${shader.fragmentShader}
`.replace(
`#include <map_particle_fragment>`,
`
vec4 mapTexel = texture2D( map, vUv );
diffuseColor *= mapTexelToLinear( mapTexel );
`
);
console.log(shader.fragmentShader);
}
});
g.defines = {
"USE_UV": ""
}
let p = new THREE.Points(g, m);
scene.add(p);
renderer.setAnimationLoop( _ => {
renderer.render(scene, camera);
})