مباحث اختصاصی آموزشی سه بعدی (فلش)
با سلام خدمت عزيزان:
اين هم آموزش سه بعدي فلش اميدوارم خوشتون بياد.
سه بعدی چیست ؟
یعنی صفحه افقی . محورX سه بعد در اصل یعنی سه محور یا سه صفحه .معمولا محور
یعنی صفحه عمق . اگر چیزی را بالا یا Zیعنی صفحه عمودی ومحور Y
Yپائین کرده یا به گونه ای تغییر مقیاس دهید که درازتر به نظر برسد از محور
استفاده می کنید .اگر چیزی را چپ و راست کرده یا به گونه ای تغییر مقیاس استفاده می کنیدXدهید که عریض تر به نظر برسد از محور
سه بعدی سازی در فلش
و غیره نیست Swift 3D , Maya ,3D Studio Max فلش یک برنامه سه بعدی ساز مانند
ولی راههای مختلفی برای شبیه سازی در فلش وجود دارد . موضوع مهم در شبیه سازی تصاویر سه بعدی در فلش ، استفاده از ترفندهاست
ادامه دارد...
حرکت از شکل دوبعدی به شکل سه بعدی
چون فلش در اصل برای کارهای سه بعدی سازی طراحی نشده است ، نمی توانیم از شتاب دهنده سه بعدی کمک بگیریم . یعنی در هنگام سه بعدی سازی در فلش باید توازنی بین پیچیدگی و سرعت برقرار کنیم . به عبارت دیگر برای برخورداری از سرعت باید ترسیمات را ساده کنیم
در ادامه یک مکعب ساده رسم می کنیم . یک مکعب از هشت راس ( که نطقه نامیده می شود ) و شش وجه تشکیل شده است
برای Drawing API در فلش از آرایه های چند بعدی برای ذخیره هر راس و سپس از روال
ترسیم وجوه استفاده کنیم
یک سند جدید فلش را ایجاد کنید و ابعاد آن را روی 400×400پیکسل تنظیم می کنیم . فریم یک از خط زمان اصلی را انتخاب کنید و دستورات زیر را وارد کنید. این کدها یک آرایه از نقاط مکعب ایجاد می کنند
points = new Array (8) ;
points [0] = new Array (100,100,-100) ;
points [1] = new Array (100,-100,-100) ;
points [2] = new Array (-100,-100,-100) ;
points [3] = new Array (-100,100,-100) ;
points [4] = new Array (100,100,100) ;
points [5] = new Array (100,-100,100) ;
points [6] = new Array (-100,-100,100) ;
points [7] = new Array (-100,100,100) ;
در هر فریم انیمیشن باید مختصات تغییر یافته را دانسته ودر یک آرایه دیگر ذخیره کنیم
xpoints = new Array ();for (i=0; i<8; i++) xpoints [i] = new Array ();
بچرخانیم .کمی بعد ، عمل چرخاندن و دیگر Yهمچنین می خواهیم نقاط را حول محور
تغییرات با جزئیات شرح داده خواهند شد
theta = 0;
createEmptyMovieClip ( "cube" , 1);
this.onEnterFrame = function () {
theta += 0.01;
if (theta > 6.28) theta -= 6.28;
// transform the points
for (i=0; i<8; i++) {
xpoints [i] [0] = points [1] [2] *Math.sin (theta) +
points [i] [0] *Math.cos ( thera );
xpoints [i] [1] = points [i] [1];
xpoints [i] [2] = points [i] [2] *Match.cos (theta) -
points [i] [0] *Math.sin ( theta) ;
p = 500 / ( xpoints [i] [2] + 500 ) ;
xpoints [i] [0] *= p;
xpoints [i] [1] *= p;
xpoints [i] [0] += 200;
xpoints [i] [0] +=200;
}
برای ایجاد وجوه استفادهDrawing API پس از تغییر شکل نقاط اصلی مکعب از روال های
می کنیم
with (cube) {
clear ();
lineStyle (4) ;
// draw face 1
moveTO (xpoints [0] [0] , xpoints [0] [1] ) ;
lineTO (xpoints [1] [0] , xpoints [1] [1] ) ;
lineTO (xpoints [2] [0] , xpoints [2] [1] ) ;
lineTO (xpoints [3] [0] , xpoints [3] [1] ) ;
lineTO (xpoints [0] [0] , xpoints [0] [1] ) ;
// draw face 2
moveTO (xpoints [4] [0] , xpoints [4] [1] ) ;
lineTO (xpoints [7] [0] , xpoints [7] [1] ) ;
lineTO (xpoints [6] [0] , xpoints [6] [1] ) ;
lineTO (xpoints [5] [0] , xpoints [5] [1] ) ;
lineTO (xpoints [4] [0] , xpoints [4] [1] ) ;
// draw face 3
moveTO (xpoints [0] [0] , xpoints [0] [1] ) ;
lineTO (xpoints [4] [0] , xpoints [4] [1] ) ;
lineTO (xpoints [5] [0] , xpoints [5] [1] ) ;
lineTO (xpoints [1] [0] , xpoints [1] [1] ) ;
lineTO (xpoints [1] [0] , xpoints [0] [1] ) ;
// draw face 4
moveTO (xpoints [1] [0] , xpoints [1] [1] ) ;
lineTO (xpoints [5] [0] , xpoints [5] [1] ) ;
lineTO (xpoints [6] [0] , xpoints [6] [1] ) ;
lineTO (xpoints [2] [0] , xpoints [2] [1] ) ;
lineTO (xpoints [1] [0] , xpoints [1] [1] ) ;
// draw face 5
moveTO (xpoints [2] [0] , xpoints [2] [1] ) ;
lineTO (xpoints [6] [0] , xpoints [6] [1] ) ;
lineTO (xpoints [7] [0] , xpoints [7] [1] ) ;
lineTO (xpoints [3] [0] , xpoints [3] [1] ) ;
lineTO (xpoints [2] [0] , xpoints [2] [1] ) ;
// draw face 6
moveTO (xpoints [4] [0] ,
xpoints [4] [0] );
lineTO (xpoints [0] [0] ,
xpoints [0] [1] );
lineTO (xpoints [3] [0] ,
xpoints [3] [1] );
lineTO (xpoints [7] [0] ,
xpoints [7] [1] );
lineTO (xpoints [4] [0] ,
xpoints [4] [1] ); }};فیلم خود را امتحان کنید
اولین گام به دنیای سه بعدی موفقیت آمیز بود ، ولی مطالبی را هنوز مطرح نکرده ایم . اول اینکه مثال قبل یک فریم ساده سیمی بود . اگر وجوه را رنگ امیزی کنیم این مثال عملی نخواهد بود بود . زیرا همیشه یک وجه مکعب ، در حال چرخش روی وجوه دیگر خواهد بود. دوم اینکه تغییر در چرخش به خوبی نمایش داده می شود ، ولی تعقیب ان کمی سحت است . سوم این که هنوز نحوه اثر نور بر وجوه مکعب را بررسی نکرده ایم