Perpustakaan Fungsi Gelombang Tunggal Collapse di C, ditambah alat baris perintah
Ini adalah versi awal yang mendukung metode WFC yang tumpang tindih. Metode ini mengambil gambar input kecil dan menghasilkan gambar output yang lebih besar yang secara lokal mirip dengan gambar input. Beberapa contoh pasangan input/output:

WFC sering digunakan untuk pembuatan peta prosedural, tetapi tidak terbatas pada kasus penggunaan ini.
Perpustakaan sangat berkinerja dan mencakup sejumlah optimisasi yang tidak ditemukan dalam implementasi lain. Sebagai contoh, generasi gambar 128x128 di atas (dari pola 3x3, dibalik, dan diputar), pada MacBook Air M1 (2020) mengambil: 1,35, 0,92, 0,31, 7,7, 1,74, dan 0,67 detik masing -masing. Ini termasuk waktu pemuatan/penghematan gambar.
Satu file dalam proyek Anda harus menyertakan wfc.h seperti ini:
#define WFC_IMPLEMENTATION
#include "wfc.h" File lain juga dapat mencakup dan menggunakan wfc.h tetapi mereka tidak boleh mendefinisikan makro WFC_IMPLEMENTATION .
Atau, Anda dapat membangun file .o tradisional dengan make wfc.o dan menggunakan wfc.h sebagai file header biasa.
Penggunaan:
struct wfc * wfc = wfc_overlapping (
128 , // Output image width in pixels
128 , // Output image height in pixels
input_image , // Input image that will be cut into tiles
3 , // Tile width in pixels
3 , // Tile height in pixels
1 , // Expand input image on the right and bottom
1 , // Add horizontal flips of all tiles
1 , // Add vertical flips of all tiles
1 // Add n*90deg rotations of all tiles
);
wfc_run ( wfc , -1 ); // Run Wave Function Collapse
// -1 means no limit on iterations
struct wfc_image * output_image = wfc_output_image ( wfc );
wfc_destroy ( wfc );
// use output_image->data
// wfc_img_destroy(output_image); Secara default Anda bekerja dengan struct wfc_image untuk input dan output.
struct wfc_image {
unsigned char * data ;
int component_cnt ;
int width ;
int height ;
} data dikemas dengan ketat tanpa bantalan. Setiap piksel terdiri dari komponen component_cnt (misalnya, empat komponen untuk format RGBA). Gambar output akan memiliki jumlah komponen yang sama dengan gambar input.
wfc_run mengembalikan 0 jika tidak dapat menemukan solusi. Anda dapat mencoba lagi seperti itu:
wfc_init ( wfc );
wfc_run ( wfc , -1 );WFC secara opsional dapat menggunakan stb_image.h dan stb_image_write.h untuk menyediakan fungsi kenyamanan untuk bekerja secara langsung dengan file gambar.
Anda biasanya akan menempatkan stb_image.h dan stb_image_write.h di direktori yang sama dengan wfc.h dan memasukkan implementasinya dalam salah satu file proyek:
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image.h"
#include "stb_image_write.h" Selanjutnya, Anda akan menginstruksikan wfc.h untuk menggunakan STB:
#define WFC_IMPLEMENTATION
#define WFC_USE_STB
#include "wfc.h"Penggunaan:
struct wfc_image * input_image = wfc_img_load ( "input.png" );
struct wfc * wfc = wfc_overlapping (
...
input_image ,
...
);
wfc_run ( wfc , -1 ); // Run Wave Function Collapse
// -1 means no restriction on number of iterations
wfc_export ( wfc , "output.png" );
wfc_img_destroy ( input_image );
wfc_destroy ( wfc );Fungsi tambahan diaktifkan dengan dimasukkannya STB:
struct wfc_image * image = wfc_img_load ( "image.png" )
wfc_img_save ( image , "image.png" )
wfc_export ( wfc , "output.png" )
wfc_export_tiles ( wfc , "directory" )
// don't forget to wfc_img_destroy(image) loaded images Alat baris perintah menggunakan pustaka dan memungkinkan untuk menghasilkan gambar WFC. Alat ini tergantung pada stb_image.h dan stb_image_write.h. Tempatkan kedua file di direktori yang sama dengan wfctool.c .
make
./wfc
Jalankan ./wfc untuk melihat opsi yang tersedia
Penggunaan Dasar:
./wfc -m overlapping samples/wrinkles.png output.png
Terima kasih telah menggunakan WFC. Jika Anda menemukan bug, punya pertanyaan, atau umpan balik, beri tahu saya. Juga, jika Anda ingin membagikan karya Anda, itu sangat dihargai.
Samp. Krystian di gmail.com