ฟังก์ชั่นคลื่นเดียวกับการล่มสลายของไลบรารีใน C รวมถึงเครื่องมือบรรทัดคำสั่ง
นี่เป็นเวอร์ชันแรก ๆ ที่รองรับวิธี WFC ที่ทับซ้อนกัน วิธีการใช้อิมเมจอินพุตขนาดเล็กและสร้างภาพเอาต์พุตที่ใหญ่กว่าซึ่งคล้ายกับภาพอินพุต ตัวอย่างของคู่อินพุต/เอาต์พุต:

WFC มักใช้สำหรับการสร้างแผนที่ขั้นตอน แต่ไม่ จำกัด เฉพาะกรณีการใช้งานนี้
ห้องสมุดมีประสิทธิภาพมากและรวมถึงการเพิ่มประสิทธิภาพจำนวนมากที่ไม่พบในการใช้งานอื่น ๆ ตัวอย่างการสร้างภาพ 128x128 ข้างต้น (จากรูปแบบ 3x3 พลิกและหมุน) บน MacBook Air M1 (2020) ใช้: 1.35, 0.92, 0.31, 7.7, 1.74 และ 0.67 วินาทีตามลำดับ ซึ่งรวมถึงเวลาในการโหลด/บันทึกภาพ
ไฟล์หนึ่งไฟล์ในโครงการของคุณควรมี wfc.h เช่นนี้:
#define WFC_IMPLEMENTATION
#include "wfc.h" ไฟล์อื่น ๆ ยังสามารถรวมและใช้ wfc.h แต่ไม่ควรกำหนด Macro WFC_IMPLEMENTATION
หรือคุณสามารถสร้างไฟล์. O แบบดั้งเดิมด้วย make wfc.o และใช้ wfc.h เป็นไฟล์ส่วนหัวปกติ
การใช้งาน:
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); โดยค่าเริ่มต้นคุณทำงานกับ struct wfc_image สำหรับอินพุตและเอาต์พุต
struct wfc_image {
unsigned char * data ;
int component_cnt ;
int width ;
int height ;
} data ถูกบรรจุอย่างแน่นหนาโดยไม่มีช่องว่างภายใน แต่ละพิกเซลประกอบด้วยส่วนประกอบ component_cnt (เช่นสี่องค์ประกอบสำหรับรูปแบบ RGBA) ภาพเอาต์พุตจะมีจำนวนส่วนประกอบเท่ากันกับภาพอินพุต
wfc_run ส่งคืน 0 หากไม่พบวิธีแก้ปัญหา คุณสามารถลองอีกครั้งเช่นนั้น:
wfc_init ( wfc );
wfc_run ( wfc , -1 );WFC สามารถเลือกใช้ STB_IMAGE.H และ STB_IMAGE_WRITE.H เพื่อให้ฟังก์ชั่นความสะดวกสบายสำหรับการทำงานโดยตรงกับไฟล์รูปภาพ
โดยปกติคุณจะวาง stb_image.h และ stb_image_write.h ในไดเรกทอรีเดียวกับ wfc.h และรวมการใช้งานของพวกเขาในไฟล์โครงการใดไฟล์หนึ่ง:
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image.h"
#include "stb_image_write.h" นอกจากนี้คุณจะสั่งให้ wfc.h ใช้ STB:
#define WFC_IMPLEMENTATION
#define WFC_USE_STB
#include "wfc.h"การใช้งาน:
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 );ฟังก์ชั่นพิเศษที่เปิดใช้งานโดยการรวม 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 เครื่องมือบรรทัดคำสั่งใช้ไลบรารีและอนุญาตให้สร้างภาพ WFC เครื่องมือขึ้นอยู่กับ stb_image.h และ stb_image_write.h วางไฟล์ทั้งสองไว้ในไดเรกทอรีเดียวกับ wfctool.c
make
./wfc
run ./wfc เพื่อดูตัวเลือกที่มีอยู่
การใช้งานขั้นพื้นฐาน:
./wfc -m overlapping samples/wrinkles.png output.png
ขอบคุณที่ใช้ WFC หากคุณพบข้อบกพร่องใด ๆ มีคำถามหรือข้อเสนอแนะโปรดแจ้งให้เราทราบ นอกจากนี้หากคุณต้องการแบ่งปันผลงานของคุณมันก็ชื่นชมมาก
samp.krystian ที่ gmail.com