Ocean
How do I make an ocean?
What is a ocean? How do you make a ocean? This script and codes were developed by Nathan Gordon on 31 July 2022, Sunday.
Ocean - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Ocean</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
</head>
<body> <script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.min.js'></script>
<script src='https://threejs.org/examples/js/controls/OrbitControls.js'></script> <script src="js/index.js"></script>
</body>
</html>
Ocean - Script Codes JS Codes
var vertexShader = `
#define SCALE 10.0
varying vec2 vUv;
uniform float uTime;
float calculateSurface(float x, float z) { float y = 0.0; y += (sin(x * 1.0 / SCALE + uTime * 1.0) + sin(x * 2.3 / SCALE + uTime * 1.5) + sin(x * 3.3 / SCALE + uTime * 0.4)) / 3.0; y += (sin(z * 0.2 / SCALE + uTime * 1.8) + sin(z * 1.8 / SCALE + uTime * 1.8) + sin(z * 2.8 / SCALE + uTime * 0.8)) / 3.0; return y;
}
void main() { vUv = uv; vec3 pos = position; float strength = 1.0; pos.y += strength * calculateSurface(pos.x, pos.z); pos.y -= strength * calculateSurface(0.0, 0.0); gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}
`;
var fragmentShader = `
varying vec2 vUv;
uniform sampler2D uMap;
uniform float uTime;
uniform vec3 uColor;
void main() { vec2 uv = vUv * 10.0 + vec2(uTime * -0.05); uv.y += 0.01 * (sin(uv.x * 3.5 + uTime * 0.35) + sin(uv.x * 4.8 + uTime * 1.05) + sin(uv.x * 7.3 + uTime * 0.45)) / 3.0; uv.x += 0.12 * (sin(uv.y * 4.0 + uTime * 0.5) + sin(uv.y * 6.8 + uTime * 0.75) + sin(uv.y * 11.3 + uTime * 0.2)) / 3.0; uv.y += 0.12 * (sin(uv.x * 4.2 + uTime * 0.64) + sin(uv.x * 6.3 + uTime * 1.65) + sin(uv.x * 8.2 + uTime * 0.45)) / 3.0; vec4 tex1 = texture2D(uMap, uv * 1.0); vec4 tex2 = texture2D(uMap, uv * 1.0 + vec2(0.2)); vec3 blue = uColor; gl_FragColor = vec4(blue + vec3(tex1.a * 0.9 - tex2.a * 0.02), 1.0);
}
`;
(function() { var _renderer, _scene, _camera, _controls; var _geometry, _shader, _mesh; window.onload = init; function init() { initWorld(); initScene(); } //=====// World //========================================// function initWorld() { _renderer = new THREE.WebGLRenderer(); _renderer.setPixelRatio(2); _renderer.setSize(window.innerWidth, window.innerHeight); _renderer.setClearColor(0xffffff); document.body.appendChild(_renderer.domElement); _scene = new THREE.Scene(); _camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000); _camera.position.set(-20, 10, 21); _camera.target = new THREE.Vector3(0, -5, 0); _camera.lookAt(_camera.target); _controls = new THREE.OrbitControls(_camera); _controls.target = _camera.target; _controls.enableDamping = true; _controls.dampingFactor = 0.1; _controls.rotateSpeed = 0.1; window.addEventListener('resize', resize, false); resize(); requestAnimationFrame(render); } function resize() { _renderer.setSize(window.innerWidth, window.innerHeight); _camera.aspect = window.innerWidth / window.innerHeight; _camera.updateProjectionMatrix(); } function render() { requestAnimationFrame(render); if (_controls) _controls.update(); _renderer.render(_scene, _camera); } //=====// Scene //========================================// function initScene() { initGeometry(); initShader(); initMesh(); requestAnimationFrame(loop); } function initGeometry() { _geometry = new THREE.PlaneBufferGeometry(50, 50, 20, 20); _geometry.rotateX(-Math.PI / 2); } function initShader() { var uniforms = { uMap: {type: 't', value: null}, uTime: {type: 'f', value: 0}, uColor: {type: 'f', value: new THREE.Color('#0051da')}, }; _shader = new THREE.ShaderMaterial({ uniforms: uniforms, vertexShader: vertexShader, fragmentShader: fragmentShader, side: THREE.DoubleSide, }); var textureLoader = new THREE.TextureLoader(); textureLoader.load('https://cinemont.com/tutorials/zelda/water.png', function (texture) { _shader.uniforms.uMap.value = texture; texture.wrapS = texture.wrapT = THREE.REPEAT_WRAPPING; }); } function initMesh() { _mesh = new THREE.Mesh(_geometry, _shader); _scene.add(_mesh); } function loop(e) { requestAnimationFrame(loop); _shader.uniforms.uTime.value = e * 0.001; }
})();
Developer | Nathan Gordon |
Username | gordonnl |
Uploaded | July 31, 2022 |
Rating | 4.5 |
Size | 2,817 Kb |
Views | 32,384 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
SVG Mask Animation | 2,201 Kb |
Pablo the Flamingo physics | 2,775 Kb |
Dynamic Fire and Haze | 5,183 Kb |
ThreeJS Template | 2,306 Kb |
Static Fire and Haze | 4,873 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Header | Er40 | 1,542 Kb |
Wavy Road with Dashes | Jonobr1 | 2,679 Kb |
Hc first draft | Stepfray | 5,104 Kb |
Fullscreen Parallax | Bassta | 3,313 Kb |
Animated Slide Hamburger Mobile Menu | BJack | 2,247 Kb |
Fluid Layout with Float | Jxqr97 | 1,785 Kb |
The Fly | GianlucaGuarini | 3,405 Kb |
A Pen by Oliver Schafeld | Schafeld | 1,720 Kb |
SVG Hover Animations | Kjbrum | 10,557 Kb |
Weather App 2 | MightyJoeW | 2,877 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!