یک بسته کوچک و ساده برای نمایش شکل های دو بعدی بر پایه WebGL
-
اگر میخواهید مجموعه ای از شکل ها با رنگ ها و Texture های گوناگون را رسم کنید این برنامه برای شما مناسب است.
-
اگر میخواهید قابلیت بزرگنمایی/کوچکنمایی و حرکت روی شکل های رسم شده را به کاربر بدهید، این امکان برای شما فراهم شده.
-
هدف اصلی این برنامه نمایش حجم بزرگی از شکل هایی است که با یکدیگر همپوشانی ندارند. اگر برخی از داده های شما دارای همپوشانی باشند ممکن است در نمایش زمان بزرگنمایی/کوچکنمایی و حرکت با مشکل مواجه شوید. البته در صورتی که از این قابلیت ها استفاده نکنید مشکلی پیش نخواهد آمد.
این برنامه برای اجرا به کتابخانه های زیر نیاز دارد:
مستندات مربوط به توابع داخل هر فایل که از روی JSDoc ساخته شده است هم از طریق لینک های زیر قابل دسترسی است:
برای تولید این فایل ها باید از jsdoc-to-markdown ممنون باشیم.
همیشه اولین کار افزودن اسکریپت نهایی به برنامه است ولی پیش از آن از اینکه پیشنیاز هارا اضافه کرده اید اطمینان حاصل کنید:
<script src="../node_modules/jquery/dist/jquery.min.js"></script>
<script src="../node_modules/earcut/src/earcut.js"></script>
حالا که پیشنیاز ها را اضافه کردیم میتوانید به سراغ برنامه خودمان برویم:
<script src="../dist/CanvasDrawer.min.js"></script>
حالا ما به یک <canvas>
برای رسم نیاز داریم. پس آنرا اضافه میکنیم:
<canvas id="myCanvas" width="1000" height="700"></canvas>
var cd = new CanvasDrawer({
'id': 'myCanvas',
'errorFunction': ()=>alert("امکان بارگذاری WebGL برای شما وجود ندارد"),
'cartographer': true
});
برای اطلاع دقیق تر از نحوه وارد کردن اطلاعات می توانید به فایل مستندات مربوط به CanvasDrawer رجوع کنید. ولی به صورت خلاصه به بعضی از موارد مهمتر اشاره میکنیم.
مقدار id
نشان دهنده شناسه Canvas ما است.
مقدار errorFunction
یک تابع را مشخص میکند که در صورت به مشکل خوردن بارگذاری اجرا میشود.
یکی از قسمت های جذاب این برنامه همان چیزی است که مقدار cartographer
مشخص میکند. این کلید یک مقدار boolean
گرفته و مشخص میکند که آیا میخواهید تا کاربر بتواند با استفاده از موس خود روی Canvas برگنمایی/کوچکنمایی و یا حرکت کند با نه.
برای توضیح بهتر به قطعه کد زیر توجه کنید:
cd.loadTextures(textures, (data) => {
cd.drawer.setTextureEnable();
cd.drawer.setTextureResolution(512, 512);
cd.drawer.setUseTexture(data['images/a.jpg']);
cd.addPolygon([0,0, 256,0, 256,256, 0,256]);
cd.justDraw();
cd.drawer.setTextureUserTranslation(128, 128);
cd.drawer.setTextureResolution(768, 768);
cd.drawer.setUseTexture(data['images/b.jpg']);
cd.addPolygon([128,128, 512,128, 512,512, 128,512]);
cd.justDraw();
cd.drawer.setColorEnable();
cd.addCircle(250,250,50,15);
cd.draw(1,0,0,1);
});
ابتدا به چند مورد مهم اشاره میکنیم:
cd.drawer
یکObject
است که وظیفه ارتباط با WebGL را دارد.- اگر بخواهیم از یک Texture استفاده کنیم باید ابتدا در یکی از واحد های Texture بارگذاری شوند. هر واحد با یک عدد صحیح غیر منفی مشخص میشود.
تابع cd.loadTextures
دو مقدار را برای ورودی میگیرد. اولی شامل لیستی از آدرس های مربوط به تصاویری است که میخواهیم به عنوان Texture از آنها استفاده کنیم. دومی هم یک تابع Callback است که پس از اینکه تمام تصاویر در واحد ها بارگذاری شدند فراخوانی میشود و یک آرایه انجمنی نیز به آن پاس داده میشود (data
)
cd.drawer.setTextureEnable
مشخص کننده این است که شکلی که حالا میکشم قرار است یک Texture داشته باشد. به مشابه همین موضوع cd.drawer.setColorEnable
بیان کننده این است که قرار است از یک رنگ برای شکل استفاده کنیم.
cd.drawer.setTextureResolution
مشخص میکند که اندازه این عکس به ۵۱۲x۵۱۲ تنظیم شود.
cd.drawer.setUseTexture
مشخص میکند که میخواهیم کدام یک از Texture هایی که بارگذاری شده اند را استفاده کنیم. data
یک نگاشت است از آدرس فایل به شماره واحدی که آن فایل در آن بارگذاری شده است.
cd.addPolygon
یک مربع با مختصات مشخص شده را مثلث بندی کرده و مختصات آن را در خافطه نگه میدارد.
cd.justDraw
تمام مثلث هایی را که تا این لحظه در حافظه هستند را رسم میکند.
cd.draw
مشابه cd.justDraw
است با این تفاوت که میگوییم آن چیزی که میخواهیم رسم شود به رنگ قرمز باشد. چرا که چهار پارامتر ورودی این تابع مشخص کننده مقادیر r، g، b و a هستند.
اگر شما قصد توسعه این برنامه را دارید لازم است برای راحتی کار شما چند نکته را از پیش مطرح کنم.
احتمالا تغییراتی را در برنامه ایجاد کرده اید و میخواهید از آن فایل های نهایی و قابل انتشار (distribution) را تولید کنید. یا لازم است تا مستندات تولید شده از روی JSDoc ها بروز رسانی شوند.
کافی است تا اسکریپت compile را اجرا کنید!
npm run compile
این بسته تحت مجوز Apache license 2.0 منتشر شده است.