Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/erkaman/glsl-gradient-palette
Module for creating gradient palettes for usage in glsl.
https://github.com/erkaman/glsl-gradient-palette
demo gradient gradient-palette javascript noise palette procedural procedural-generation webgl
Last synced: 3 days ago
JSON representation
Module for creating gradient palettes for usage in glsl.
- Host: GitHub
- URL: https://github.com/erkaman/glsl-gradient-palette
- Owner: Erkaman
- License: other
- Created: 2016-05-05T17:41:28.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-05-05T18:01:23.000Z (over 8 years ago)
- Last Synced: 2024-11-09T15:45:51.440Z (6 days ago)
- Topics: demo, gradient, gradient-palette, javascript, noise, palette, procedural, procedural-generation, webgl
- Language: JavaScript
- Homepage: http://erkaman.github.io/glsl-gradient-palette/
- Size: 760 KB
- Stars: 21
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# glsl-gradient-palette
[![NPM](https://nodei.co/npm/glsl-gradient-palette.png)](https://www.npmjs.com/package/glsl-gradient-palette)
This module can be used to create gradient color palettes. These can be used to colorize noise functions and procedurally
generate textures in shaders. Below is an example of such a procedural texture.More examples can be found in the provided [demo](http://erkaman.github.io/glsl-gradient-palette/)
## Usage
To create a gradient palette, you basically give the API a sequential list of colors. The API will then create a
palette, by linearly interpolating between these colors. It is very easy to create a palette:```javascript
var simple = [
[0.0, [1.0,0.0,0.0]],
[0.5, [0.0,0.0,0.0]],
[1.0, [0.0,0.0,1.0]],
];simplePaletteTexture = createGradientPalette(gl,simple);
```above, we create a palette where we first interpolate from red to black, and then from black to red. To be more specific,
From `0.0` to `0.5` we interpolate between the RGB colors `[1.0,0.0,0.0]` and `[0.0,0.0,0.0]`, and from
`0.5` to `1.0` we interpolate from `[0.0,0.0,0.0]` to `[0.0,0.0,1.0]`. The palette we just have created will
look like this:in the upper parts of the image, we can see the palette, and below, we see what happens if we use the palette to
colorize a noise function.It is easy to use the created palette in a shader. `createGradientPalette` will return the created palette as a
texture(as a `gl-texture2d`), and this texture can be sent to a shader by doing```javascript
sphereShader.uniforms.uPalette = simplePaletteTexture.bind()
```now we can use it to colorize a noise function by sampling from it, based on the noise value:
```glsl
float t = noise(vPosition);
vec3 tex = texture2D(uPalette, vec2(t, 0.0) ).xyz;
```and that results in the textured sphere seen above.
By specifying more colors, we can create more advanced textures. For instance, the palette
```javascript
var fireball = [
[0.0, [0.4,0.4,0.4]],
[0.55, [0.0,0.0,0.0]],
[0.60, [1.0,0.0, 0.0]],
[0.70, [1.0,1.0, 0.0]],
[1.0, [0.4,0.4, 0.0]]
];
```results in
## API
### `function createGradientPalette(gl, gradientList[, opts])`
Creates a gradient palette, and returns the created palette stored as a `gl-texture2d`, with a default size of
`1024x1`.* `gl` your WebGL context.
* `gradientList` the list of colors to use when creating the palette. See the previous section for more details.
* `opts` optional arguments objects. Can currently only contain the property `opts.size`, which specifies the width
of the created palette texture. Defaults to `1024`.### `paletteDrawer = new PaletteDrawer(gl, position, size)`
Creates a palette drawer, that can be used for drawing a palette texture on the screen. Useful for visualising a palette.
* `gl` your WebGL context.
* `position` the pixel position where your palette drawer will be drawn. Stored as an array `[x,y]`.
* `size` the pixel size of your palette drawer. Stored as an array`[x_size,y_size]`.### `paletteDrawer.draw(paletteTexture, canvasWidth, canvasHeight)`
Draws a palette texture as a simple quad.
* `paletteTexture` the palette texture to draw.
* `canvasWidth` the width of the canvas.
* `canvasHeight` the height of the canvas.