Skip to content

kchapelier/wavefunctioncollapse

Repository files navigation

wavefunctioncollapse

Javascript port of https://github.com/mxgmn/WaveFunctionCollapse

Installing

With npm do:

npm install wavefunctioncollapse --production

Public API

OverlappingModel Constructor

new OverlappingModel(data, dataWidth, dataHeight, N, width, height, periodicInput, periodicOutput, symmetry[, ground])

  • data : The RGBA data of the source image.
  • dataWidth : The width of the source image.
  • dataHeight : The height of the source image.
  • N : Size of the patterns.
  • width : The width of the generation (in pixels).
  • height : The height of the generation (in pixels).
  • periodicInput : Whether the source image is to be considered as periodic / as a repeatable texture.
  • periodicOutput : Whether the generation should be periodic / a repeatable texture.
  • symmetry : Allowed symmetries from 1 (no symmetry) to 8 (all mirrored / rotated variations)
  • ground : Id of the specific pattern to use as the bottom of the generation (learn more)
var wfc = require('wavefunctioncollapse');

var imgData = ... // let's pretend this is an ImageData retrieved from a canvas context in the browser

var model = new wfc.OverlappingModel(imgData.data, imgData.width, imgData.height, 3, 48, 48, true, true, 4);

OverlappingModel Methods

model.graphics([array])

Retrieve the RGBA data of the generation.

  • array : Array to write the RGBA data into (must already be set to the correct size), if not set a new Uint8Array will be created and returned. It is recommended to use Uint8Array or Uint8ClampedArray.
// create a blank ImageData
var imgData = canvasContext.createImageData(48, 48);

// write the RGBA data directly in the ImageData
model.graphics(imgData.data);

// print the ImageData in the canvas
canvasContext.putImageData(imgData, 0, 0);

SimpleTiledModel Constructor

new SimpleTiledModel(data, subsetName, width, height, periodicOutput)

  • data : Tiles, subset and constraints definitions. The proper doc on this matter is yet to be written, check the example in the meantime.
  • subsbetName : Name of the subset to use from the data. If falsy, use all tiles.
  • width : The width of the generation (in tiles).
  • height : The height of the generation (in tiles).
  • periodicOutput : Whether the generation should be periodic / a repeatable texture.
var wfc = require('wavefunctioncollapse');

var data = ... // object with tiles, subsets and constraints definitions

var model = new wfc.SimpleTiledModel(data, null, 48, 48, false);

SimpleTiledModel Methods

model.graphics([array[, defaultColor]])

Retrieve the RGBA data of the generation.

  • array : Array to write the RGBA data into (must already be set to the correct size), if not set a new Uint8Array will be created and returned. It is recommended to use Uint8Array or Uint8ClampedArray.
  • defaultColor : RGBA data of the default color to use on untouched tiles.
// create a blank ImageData
var imgData = canvasContext.createImageData(48, 48);

// write the RGBA data directly in the ImageData, use an opaque blue as the default color
model.graphics(imgData.data, [0, 0, 255, 255]);

// print the ImageData in the canvas
canvasContext.putImageData(imgData, 0, 0);

Common Methods

model.generate([rng])

Execute a complete new generation. Returns whether the generation was successful.

model.generate(Math.random); // return true or false
  • rng : A function to use as random number generator, defaults to Math.random.

model.iterate(iterations[, rng])

Execute a fixed number of iterations. Stop when the generation is successful or reaches a contradiction. Returns whether the iterations ran without reaching a contradiction.

  • iterations : Maximum number of iterations to execute (0 = infinite).
  • rng : A function to use as random number generator, defaults to Math.random.
model.iterate(30, Math.random); // return true or false

model.isGenerationComplete()

Returns whether the previous generation completed successfully.

model.clear()

Clear the internal state to start a new generation.

Changelog

2.1.0 (2021-03-27)

  • Port of the latest changes (trivial symmetry support in SimpleTiledModel).
  • Update dev dependencies.

2.0.0 (2019-07-06)

  • Port of the newer, faster, implementation.
  • This port is now written in ES6 instead of ES5 [breaking change].

1.0.0 (2016-10-14)

  • Change and freeze the public API (with iteration support).
  • First publication on NPM.

License

MIT

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy