Find us on Google+ سییتم های تعاملی - رسانه های تعاملی - پیور دیتا: 11/13/12

۲۳ آبان ۱۳۹۱

GEM،PD و مفاهیم ابتدایی ان

GEM library :

GEM یک کتابخانه ای از تصاویر و ویدئوها و اشیا ۳ بعدی  مبتنی بر OpenGL است .
GEM میتواند در ان واحد (ریل تایم)  در تصاویر،ویدئوها،متن ها،مدل های۳ بعدی واشیا دست کاری کند یا آنها را ترکیب کند یا بین آنها ارتباط برقرار کند و کم وبیش این کار را همانند روش پردازش Audio وMIDI انجام می دهد.
GEM library در نسخه Pd extended وجود دارد و نیاز به دانلود این کتابخانه به صورت جداگانه نیست.
میتوانید مطالب زیادی را از طریق آدرس زیر داخل برنامه puredata بیابید :
Help → Browser... 
برای مثال  :
 • Gem / examples / 
 • Pure data / manuals / 2.Image /
 • Gem / manual / html / index.html


Gemwin :

برای ایجاد و کنترل کردن پنجره گرافیکی تنها راه استفاده کردن از Gemwin است.
در اینجا لیستی از پیام هایی که gemwin شامل میشود را میاوریم :
(برای تنظیم کردن پنجره گرافیکی قبل از ایجاد ان)
Gemwin
Gemwin
create
-ازاین دستور برای ایجاد بستری ( پنجره گرافیکی ) جهت رندر کردن یک محتوای OpenGL استفاده میشود.
destroy
-پنجره گرافیکی و محتوای OpenGL ان را میبندد.
 " ۱ "-رندرینگ را شروع می کند.
" ۰ " -رندرینگ را متوقف کند.
bang
-
Frame $1
-
cursor 0/1
- نمایش مکان نما (۱) و یا مخفی کردن آن (۰)
border 0/1
-کشیدن یک حاشیه به دور پنجره (۱) و یا نداشتن حاشیه (۰)
offset x y
-تعیین موقعیتی که پنجره در ان کشیده میشود.مختصات صفحه از گوشه ی سمت چپ بالا. و واحد ان پیکسل میباشد.
dimen x y
-تعیین اندازه طول و عرض پنجره گرافیکی در واحد پیکسل
fullscreen 0/1
- باز کردن پنجره گرافیکی(Gemwin) به صورت تمام صفحه .
'Title 'Name
-تعیین عنوان پنجره گرافیکی (Gemwin)
colore RGB
-تعیین رنگ پس زمینه با استفاده از ۳گانه ی RGB،که در ان  رنگ مشکی معادل (۰۰۰) است و رنگ سفید معادل (۱۱۱)


Gemhead & render chain :

یک render chain درواقع یک واحد بصری را به ما معرفی میکند .برای مثال یک مربع در یک Gemwin تعریف شده از یک render chain در PD  است.
یک render chain همیشه با یک gemhead شروع میشود و اغلب با یک رندر کردن یک شکل هندسی (دایره، مربع،مکعب ،...) به پایان میرسد.و بین این آغاز و پایان Object هایی که ان واحد بصری را بر اساس الگوی PD پردازش میکنند،از بالا به پایین  قرار میگیرند.
همچین ممکن است که هم زمان چند  render chain وجود داشته باشد بنا براین زنجیرهای بیشتری هم هستند که با gemhead شروع میشوند.
render chain در gemwin قابل مشاهده میباشد.
gemhead وظیفه فعال/غیر فعال کردن Render chain را از طریق اتصال به یک پیغام ۰/۱ (یا به یکtoggle) را  دارد.




ویرایش کردن :

حرکت دادن و تغیر مکان اشکال گرافیکی به ترتیب زیرامکان پذیر است :

   -[colorRGB]         تنظیم رنگ با چهار پارامتر  RGB                   (واحد اندازه گیری هر رنگ ۰ تا ۱)
   -[rotate XYZ]       چرخ با استفاده از ۳ پارامتر Xو Yو Z              (واحد اندازه گیری درجه)
   -[scaleXYZ]         تغییر اندازه با استفاده از ۳ پارامتر Xو Yو Z      (واحد اندازه گیری GEM)
   -[translateXYZ]    حرکت دادن با استفاده از ۳ پارامتر Xو Yو Z      (واحد اندازه گیری GEM)

هر کدام از این Object ها ۴ ورودی (Inlet) دارند،اولین ورودی مربوط به render chain و ۳ تای دیگر مقدار X،Y،Z یا R،G،B برای ویرایش اشکال گرافیکی میباشند .
 واحد اندازه گیریGEM مطلق  و تقسیم بندی شده در فضای GEM است .

فضای ۳ بعدی GEM :

فضای GEM با اندازه ی طول ۸ ،عرض ۸ و ارتفاع ۲۰ و به مرکز (۰،۰) میباشد.
Gem
Gem 
Gem
Gem

GEM یک فضای ۳ بعدی است,بنابراین میتوان با تغییر مختصات X,Y,Z شکل گرافیکی را ویرایش کرد.

gem space
Gem Space
 چرخش،جابه جایی وgemhead  :

هر گونه چرخش وجابه جایی هنگام رندر اعمال میشود،بنابرین اگر قصد دارید چند نوع چرخش متفاوت ایجاد کنید لازم است  زنجیر های جداگانه  بسازید و هر کدام از این زنجیرها باید با  [gemhead] آغاز شود.
برای درک بهتراین موضوع به تصویر زیر دقت فرمایید  :
چرخش،جابجایی و Gemahead
چرخش،جابجایی و Gemhead
Object های Geos :

Object های اصلی Geos :
[square]-   یک مربع رندر میکند
[circle] -    یک دایره  رندر میکند

[triangle]-  یک مثلث  رندر میکند
[cube]-      یک مکعب  رندر میکند
[sphere]-   یک کره  رندر میکند
[cone]-      یک مخروط  رندر میکند

Object ها یک ورودی در سمت راست دارند که اندازه ی شکل را که به صورت پیش فرض ۱ است تعیین میکند.
مخروط و کره اشکالی هستند که از تعداد پولیگان های بیشتری تشکیل شده اند،به همین جهت کاملا گرد رندر نمیشوند برای حل این موضوع ورودی مرکزی اندازه را  تعیین میکند و ورودی سمت راست تعداد پولیگان ها را مشخص میکند.هرچه تعداد پولیگان ها بیشتر باشد شکل نرم تر خواهد بود.


Lightning :

OpenGLدارای  یک سیستم ۳ بعدی نورپردازی "رأس گرا" است که با  GEM قابل استفاده میباشد.
نورپردازی یک عملیات پر مصرف است بهعلاوه پیچیدگی صحنه و سرعت پی سی (کاپیوتر) و کارت گرافیکی روی framerate بسیار تاثیر را میگذارند.
GEM میتواند تا ۸ نور را هم زمان رندر کند ،بیشتر ازان پیغام خطا میدهد.
فعال/غیر فعال کردن نور : با یک messagge  که شامل ۰ یا ۱ باشد امکان پذیر است.

حالت نور می تواند فعال باقی می ماند حتی زمانی که gemwin را میبندیم.
همچنین اگر در صحنه بیش از یک نور داشته باشیم میتوانیم نور ها را بصورت تکی با قرار دادن پیغام ۰ یا ۱در درون hot-inlet ، خاموش یا روشن کنیم.


world_light :

[world_light] نوری است که تا فاصله ی بی نهایت ادامه پیدا میکند.
همه ی پرتو های نوری ان به صورت موازی میباشند.
رم یا به عبارتی منابع سیستم را کمتر مصرف میکند بنابرین سرعت بیشتری دارد.
این نور قابل چرخش است اما نمیتوان ان را جابه جا کرد.
میتوان از طریق inlet راست رنگ ان را تغییر داد.
یک مخروط است که نشان دهنده ی  جهت نور است.
اولین Object است که در Gemhead رندر میشود.
world_light
world_light
Point_light :

[light] نوری است دارای مختصات در فضای بی نهایت .
قابل جا بجایی و چرخش است.
دارای مختصات است.
از طریق ورودی سمت راست میتوان رنگ ان را تغیر داد.
از طریق  message debug برابر ۰ یا ۱ میتوان مختصات نقطه مولد نور را دید.

Point_light
Point_light
Moving lights :

پتچ 03.lighting/03.controlLights.pd امکان جا به جایی [light]و [world_light] را در یک صحنه،برای دیدن تفاوت بین این ۲  ابجکت را میدهد.
پتچ patch 03.lighting/04.moveSpheres.pd یک مثال از تغیر مکان ۲ کره در صفحه بی نهایت است.با خاموش و روشن کردن هر یک از نورها میتوان نمایش نور لوکال را در یک فضای بی نهایت داشت.
پتچ patch 03.lighting/05.materials.pd با استفاده از متریال ابجکت ها،به صورت انتخابی رنگ ابجکت را مشخص میکند.
توجه داشته باشد که یک شی diffuse رنگ اولیه را منعکس و یک جسم specular منعکس کننده ی نوری که در ان ناحیه میدرخشد است .


images : 

[pix_image] یک عکس با فرمت های (tiff, jpg, sgi,..) را از فایل لود میکند.
میتوان با استفاده از  message open یک عکس مشخص را بارگزاری کرد.
open_image
open_image





با [openpanel] میتوان پنجره انتخاب عکس را باز کرد.


open_image
open_image

توجه داشته باشد [pix_draw] بسیار کند میباشد و از ان فقط در مثال های ابتدایی استفاده میکنیم.در ادامه بجای ان از [pix_texure] استفاده خواهیم کرد چون قابل اجرایی تر و سریع تر است .

[pix_multiimage] لیستی از عکس ها با فیلتری مشخص را نمایش میدهد،و یک خروجی عکس از عکس مشخص شده یا اولین عکس در ان لیست می دهد.
      --(temp*.jpg  ----->   لیستی از عکس هایی که با temp شروع میشوند را در اختیارمان قرار میدهد.)

[pix_ImageInPlace]یک جایگزین برای [pix_multiimage] است که عکس های موجود در ویدئو را با سرعت بیشترثبت میکند   ،اما دیگر امکان ادیت عکس ها یا کار کردن روی آنها وجود ندارد.

برای درک بیشتر موضوع به مثال های موجود در برنامه رجوع کنید :
Gem/Examples/04.pix/

pix_multiimage
pix_multiimage
Texture mapping :

عملیات تبدیل داده های پیکسلی به یک شی هندسی میباشد. و با [pix_texture] قابل اجرا میباشد.عملیات رندر را انجام نمیدهد و شی Geos کار رندر را بر عهده دارد.


برای درک بیشتر موضوع به مثال های موجود در برنامه رجوع کنید :
07.texture/01.texture.pd
Texture mapping
Texture mapping
یک عکس (که از هر منبعی اعم از :فایل تصویری،فایل ویدیویی،وب کم ،...) میتواند روی هرشی از Geos رندر شود.

Video :

[pix_movie] و [pix_film] یک فایل ویدیویی را باز میکنند.
[pix_movie] به طور مستقیم ویدئو را روی یک شی Geos رندر میکند،بنا براین نیازی به وارد کردن بلوک [pix_texture] نیست اما امکان تغییر دادن و کار کردن روی عکس ها وجود ندارد .برای اینکه بتوان روی عکسها  کار کرد و تغیر ایجاد کرد باید از بلوک [pix_film] استفاده کنیم.
ورودی سمت راست تعداد فریم ها را مشخص میکند.
برای باز کردن یک فیلم از open استفاده میکنیم.
دستور auto برابر با ۰ یا ۱ دوباره نمایش دادن فیلم به صورت اتوماتیک را فعال یا غیر فعال میکند.
زمانی که فیلم به فریم آخر میرسد، سومین خروجی یک bang را اجرا میکند
 
 به مثال های زیر رجوع کنید :
       Gem/Examples/04.pix/
       Gem/Examples/05.pix/

بسته به نوع سیستم عامل میتواند تفاوت های در اجرای صحیح فیلم با توجه به کدک های نسب شده وجود داشته باشد .اما به صورت کلی باید فیلم را به فرمت های Avi, Mov, Mpeg تبدیل کرد.

[pix_video] یک منبع ویدیویی متصل و مپینگ شده روی کامپیتر مثل وب کم یا دروبین فیلم برداری باز میکند.

 به مثال  زیر رجوع کنید :
        Gem/examples/04.video/


نکات اولیه در puredata


نحوه ذخیره سازی پچ ها (patch) در Puredata :

در Puredata برای باز کردن و ذخیره کردن یک پچ ( patch) از منوی معمول File زیرمنوی Save ( جهت ذخیره سازی پتچ ) و یا زیر منوی Open را (جهت باز کردن یک پتچ) استفاده میکنیم .

 بهتر است بخاطر داشته باشیم که از پتچ در حال اجرا چند نسخه ی متفاوت داشته باشیم و با پیشرفت کار روی نسخه قبلی ان  را ذخیره نکنیم .این کار را به ۲ دلیل توصیه میکنیم :
۱-مسیر پیشرفت پروژه را ذخیره خواهید کرد و در صورت وقوع هرگونه اشتباه در مراحل پیشرفت کارو کار نکردن پتچ (Patch) مجبور به بازگشت به نقطه صفر نخواهید شد. (اما اگر فقط یک نسخه ذخیره شده از کل پروژه داشته باشد برگشت به یک مرحله عقب تر غیر ممکن خواهد بود )
۲-اگر به هر دلیل هنگام کار روی پروژه  کامپیوتر شما قفل شود کل پروژه را از دست خواهید داد،اما با داشتن چند نسخه ذخیره شده از مراحل پروژه حداقل میتوان به یک مرحله قبل از قفل شدن کامپیوتر برگشت.
پس با ذخیره کردن Patch  به صورت زیر از وقوع چنین مشکلاتی جلو گیری میکنیم :
versione: “_v1”, “_v2”,...

اتصال ها و خطا ها در Puredata :

به خاطر داشته باشد که لزوما همه ی  خروجی ها،نمیتوانند به ورودی هایی از  هرنوع جعبه ای وصل شوند و در این صورت در پنجره اصلی Pure data با پیغام خطا روبرو خواهید شد.


اتصال ها و خطا ها در Puredata
اتصال ها و خطا ها در Puredata
همیشه پنجره اصلی برنامه را کنترل کنید تا از وجود هر گونه خطا به سرعت مطلع شوید و ان را بررسی کنید.

ارایه (Array) :

یک ساختاری از داده ها از اندازه N با ویژگی های زیر است :
   -دنباله ای از N تعداد Float
   -۴ byte  ضرب در عدد،۱ ثانیه از صوت ضبط شده از ۴۴.۱KHzبرابر است با  ۴۴.۱ *۴ =۱۷۶KB  
   -شاخص از۰ تا n-۱   
برای ذخیره کردن اعداد و صدا ها لازم است.
        [tabread <arrayname>] [tabwrite <arrayname>]

Array را میتوانید از منوی Put انتخاب کرده و مشخصه های ان را تنظیم کنید:
Name: نام ارایه 
Size: اندازه 
Save contents [ ]:اگر درست(TRUE) بود محتوا را در فایل pd ذخیره کند،
                          اگر غلط (FALSE) بود هر بار از صفر مقدار دهی کند 
Delete me [ ]:  پاک کردن ارایه (Array)
   -نمونه های صوتی را بهتر است در یک فایل جداگانه ذخیره کنید


ارایه Array
ارایه
نمایش گرافی
نمایش گرافی  

زیر پتچ Subpatch :

یک زیر پتچ (Subpatch)  در یک جعبه گنجانیده میشود و در واقع امکان ساختن یک مجموعه از مولفه های هوشمند را دارد.
برای ایجاد یک Subpatch  دو راه وجود دارد و در هر۲ راه Subpatch مثل یک آبجکت ظاهر میشود :


     ۱-ONE-OFF SUPATCH
     -با نوشتن عبارت pd ( بدون هرگونه فاصله یا حروف خاص ) در درون یک جعبه از نوع Object  و قرار دادن ان در پتچ     
      مادر میتوانیم یک Subpatch داشته باشیم .
 ONE_OFF SUBPATCH
Subpatch


      *در صورت کپی شدن Subpatch، هر یک از نسخه های کپی شده  مستقل از دیگران میباشد و تغییرات اعمال شده روی         
         سایر نسخه های کپی شده  Subpatch تاثیر نمی گذارد.*

      ۲-ABSTRACTION
      - فراخواندن یک  پتچی که از قبل ایجاد شده ،زمانی که Object ای را با نام پتچ موجود، پیدا میکند.
ABSTRACTION
Subpatch

      *به عنوان مثال  با ذخیره کردن یک پتچ با نام abstraction1.pd و ایجاد یک
       شی با نام  [Abstraction1].پچ  با این نام  لود خواهد شد.*
      *تغیرات اعمال شده روی Subpatch روی سایر نسخه های کپی شده یا Object  های با همان اسم اعمال میشود  اما برای
        این کار لازم است یک بارذخیره،سپس بسته و دوباره باز شود.*

      *برای کنترل کردن GUI پتچ مادر  :
       Right Click → open → open subpatch  properties →  [ ] graph on parent 


Subpatch
Subpatch

Subpatch In/Out :

-اشیاء "ورودی"، "ورودی ~" "خروجی" و "خروجی ~" هنگامی که در یک Subpatch قرار داده میشوند ، "ورودی" و "خروجی" برای box ای که subpatch در ان قرار دارد، ایجاد میکنند.
                     
        * ورودی = inlet
           خروجی = outlet
           ورودی ~ = ~ inlet
           خروجی ~ = ~ outlet*
                       
-شامل هر دو  subpatcheها یعنی  one-off subpatches وAbstraction  است.
-ورودی و خروجی ها به همراه علامت " ~ " ،ورودی و خروجی ها یی برای سیگنال های صوتی به شمار می آیند .

-ادغام کردن  ورودی و خروجی  message ها با audio درsubpatch امکان پذیر نیست و باید همه از یک نوع باشند.
-ترتیب ورودی و خروجی ها در جعبه subpatch از چپ به راست است.

Object های مربوط به زمان :

<delay<n
-وقفه زمانی  بین هردستورbang در هر n هزارم ثانیه .
timer
-فاصله زمانی بین ورودی راست و چپ .
<pipe<n
-تاخیر بین یک message در هر n هزارم ثانیه .
<metro <n
-اتفاق افتادن یک bang در هر n هزارم ثانیه .
line[~]
-ایجاد یک شیب صوتی .
qlist
-یک ترتیب سنج (sequencer) ساده ایجاد میکند . 


برای درک بیشتر مفاهیم فوق نگاهی به مثال های موجود  دربرنامه puredata  بیاندازید  :

•Pure Data/ → 2.Control.examples/ → 07.time,09.send_receive, 13.locality
14.dollarsigns, 18.conditional, 19.random, 20.weighted-random, 
23.sequencing, 24.loops

Object های مشروط (conditional objects) :

select
-ورودی ها را با آرگومان ها مقایسه میکند؛تعداد خروجی های ان با تعداد آرگومان ها متفاوت است ،اگر ورودی با آرگومان مقارن
وهم زمان بود یک دستور bang رو روی خروجی مرتبط اعمال میکند.
route
-شبیه select است،با این تفاوت که در این مورد داده ها( نه یک bang ) روی خروجی مرتبط مشاهده می شوند. و در واقع messagge ها را بر اساس  اولین المان اشان مسیر دهی میکند.
spigot
-messagge را در ورودی  بر اساس اینکه ورودی دوم مقداری برابر ۰ یا ۱ داشته باشد، جلو و عقب میکند. در واقع کار ان    تصویب و یا مسدود کردن پیام ها است .
moses
-moses ها اعداد را میگیرند و خروجی چپ میدهند،اگر مقدارشان از یک مقدار کنترل شده کمتر باشد و اگر بزرگتر یا مساوی ان مقدار کنترل شده باشند خروجی راست میدهند.