مكتبة وظيفة موجة الواحد في C في C ، بالإضافة إلى أداة سطر الأوامر
هذا إصدار مبكر يدعم طريقة WFC المتداخلة. تأخذ الطريقة صورة إدخال صغيرة وتنشئ صورة إخراج أكبر تشبه محليًا صورة الإدخال. أمثلة قليلة من أزواج الإدخال/الإخراج:

غالبًا ما يتم استخدام WFC لتوليد الخرائط الإجرائية ، ولكن لا يقتصر على حالة الاستخدام هذه.
المكتبة مؤدية للغاية وتتضمن عددًا من التحسينات غير الموجودة في التطبيقات الأخرى. As an example, the generation of the above 128x128 images (from 3x3 patterns, flipped, and rotated), on a MacBook Air M1 (2020) took: 1.35, 0.92, 0.31, 7.7, 1.74, and 0.67 seconds respectively. وهذا يشمل وقت تحميل/توفير الصورة.
يجب أن يتضمن ملف واحد في مشروعك 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 لتوفير وظائف الراحة للعمل مباشرة مع ملفات الصور.
You will normally place stb_image.h and stb_image_write.h in the same directory as wfc.h and include their implementations in one of the project files:
#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
قم بتشغيل ./wfc لمعرفة الخيارات المتاحة
الاستخدام الأساسي:
./wfc -m overlapping samples/wrinkles.png output.png
شكرا لاستخدام WFC. إذا وجدت أي أخطاء أو لديك أسئلة أو تعليقات ، فيرجى إخبارنا بذلك. أيضًا ، إذا كنت ترغب في مشاركة أعمالك ، فسيكون موضع تقدير كبير.
samp.krystian في gmail.com