mirror of
https://github.com/patriciogonzalezvivo/thebookofshaders
synced 2024-11-19 15:25:41 +00:00
91 lines
2.7 KiB
HTML
91 lines
2.7 KiB
HTML
|
<!-- Copyright 2015 Patricio Gonzalez Vivo (http://patriciogonzalezvivo.com) -->
|
||
|
<body>
|
||
|
<div id="container"></div>
|
||
|
<script src="http://threejs.org/build/three.min.js"></script>
|
||
|
|
||
|
<script id="vertexShader" type="x-shader/x-vertex">
|
||
|
void main() {
|
||
|
gl_Position = vec4( position, 1.0 );
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<script id="fragmentShader" type="x-shader/x-fragment">
|
||
|
uniform vec2 u_resolution;
|
||
|
uniform vec2 u_mouse;
|
||
|
uniform float u_time;
|
||
|
|
||
|
void main() {
|
||
|
vec2 st = gl_FragCoord.xy/u_resolution.xy;
|
||
|
gl_FragColor=vec4(st.x,st.y,0.0,1.0);
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<script>
|
||
|
var container;
|
||
|
var camera, scene, renderer;
|
||
|
var uniforms;
|
||
|
var mouse = {x:0, y:0};
|
||
|
|
||
|
document.onmousemove = getMouseXY;
|
||
|
|
||
|
init();
|
||
|
animate();
|
||
|
|
||
|
function getMouseXY(e) {
|
||
|
mouse.x = e.pageX;
|
||
|
mouse.y = e.pageY;
|
||
|
}
|
||
|
|
||
|
function init() {
|
||
|
container = document.getElementById( 'container' );
|
||
|
|
||
|
camera = new THREE.Camera();
|
||
|
camera.position.z = 1;
|
||
|
|
||
|
scene = new THREE.Scene();
|
||
|
|
||
|
var geometry = new THREE.PlaneBufferGeometry( 2, 2 );
|
||
|
|
||
|
uniforms = {
|
||
|
u_time: { type: "f", value: 1.0 },
|
||
|
u_mouse: { type: "v2", value: new THREE.Vector2() },
|
||
|
u_resolution: { type: "v2", value: new THREE.Vector2() }
|
||
|
};
|
||
|
|
||
|
var material = new THREE.ShaderMaterial( {
|
||
|
uniforms: uniforms,
|
||
|
vertexShader: document.getElementById( 'vertexShader' ).textContent,
|
||
|
fragmentShader: document.getElementById( 'fragmentShader' ).textContent
|
||
|
} );
|
||
|
|
||
|
var mesh = new THREE.Mesh( geometry, material );
|
||
|
scene.add( mesh );
|
||
|
|
||
|
renderer = new THREE.WebGLRenderer();
|
||
|
renderer.setPixelRatio( window.devicePixelRatio );
|
||
|
|
||
|
container.appendChild( renderer.domElement );
|
||
|
|
||
|
onWindowResize();
|
||
|
window.addEventListener( 'resize', onWindowResize, false );
|
||
|
}
|
||
|
|
||
|
function onWindowResize( event ) {
|
||
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
||
|
uniforms.u_resolution.value.x = renderer.domElement.width;
|
||
|
uniforms.u_resolution.value.y = renderer.domElement.height;
|
||
|
uniforms.u_mouse.value.x = mouse.x;
|
||
|
uniforms.u_mouse.value.y = mouse.y;
|
||
|
}
|
||
|
|
||
|
function animate() {
|
||
|
requestAnimationFrame( animate );
|
||
|
render();
|
||
|
}
|
||
|
|
||
|
function render() {
|
||
|
uniforms.u_time.value += 0.05;
|
||
|
renderer.render( scene, camera );
|
||
|
}
|
||
|
</script>
|
||
|
</body>
|