JSFiddle - React, Tailwind, and code Playground
by KgomDr
JavaScript
/*
* From https://www.redblobgames.com/x/1843-planet-generation/
* Copyright 2018 Red Blob Games <[email protected]>
* License: Apache v2.0 <http://www.apache.org/licenses/LICENSE-2.0.html>
*/
'use strict';
/* global Delaunator, createREGL, vec3, mat4 */
const regl = createREGL({
canvas: "#output",
extensions: ['OES_element_index_uint']
});
const renderPoints = regl({
frag: `
precision mediump float;
varying vec3 v_rgb;
void main() {
gl_FragColor = vec4(v_rgb, 1);
}
`,
vert: `
precision mediump float;
uniform mat4 u_projection;
uniform float u_pointsize;
uniform float u_brightness;
attribute vec3 a_xyz;
varying vec3 v_rgb;
void main() {
v_rgb = (a_xyz + 1.0) / 2.0 * vec3(1.0, 0.8, 0.9) * u_brightness;
gl_Position = u_projection * vec4(a_xyz, 1);
gl_PointSize = gl_Position.z > 0.0? 0.0 : u_pointsize;
}
`,
depth: {
enable: false,
},
uniforms: {
u_projection: regl.prop('u_projection'),
u_pointsize: regl.prop('u_pointsize'),
u_brightness: regl.prop('u_brightness'),
},
primitive: 'points',
count: regl.prop('count'),
attributes: {
a_xyz: regl.prop('a_xyz'),
},
});
const renderTriangles = regl({
frag: `
precision mediump float;
varying vec3 v_rgb;
void main() {
gl_FragColor = vec4(v_rgb, 1);
}
`,
vert: `
precision mediump float;
uniform mat4 u_projection;
attribute vec3 a_xyz;
attribute vec3 a_rgb;
varying vec3 v_rgb;
void main() {
v_rgb = mix((a_xyz + 1.0) / 2.0 * vec3(1.5, 1.0, 1.3), a_rgb, 0.33);
gl_Position = u_projection * vec4(a_xyz, 1);
}
`,
uniforms: {
u_projection: regl.prop('u_projection'),
},
count: regl.prop('count'),
attributes: {
a_xyz: regl.prop('a_xyz'),
a_rgb: regl.prop('a_rgb'),
},
});
let _randomLat = [], _randomLon = [];
function generateFibonacciSphere1(N, jitter) {
let a_latlong = [];
// First algorithm from...