PDA

نسخه کامل مشاهده نسخه کامل : مباحث اختصاصی آموزشی سه بعدی (فلش)



عــــلی
18-07-2007, 14:44
با سلام خدمت عزيزان:

اين هم آموزش سه بعدي فلش اميدوارم خوشتون بياد.


سه بعدی چیست ؟
یعنی صفحه افقی . محورX سه بعد در اصل یعنی سه محور یا سه صفحه .معمولا محور
یعنی صفحه عمق . اگر چیزی را بالا یا Zیعنی صفحه عمودی ومحور Y
Yپائین کرده یا به گونه ای تغییر مقیاس دهید که درازتر به نظر برسد از محور
استفاده می کنید .اگر چیزی را چپ و راست کرده یا به گونه ای تغییر مقیاس استفاده می کنیدXدهید که عریض تر به نظر برسد از محور
سه بعدی سازی در فلش
و غیره نیست Swift 3D , Maya ,3D Studio Max فلش یک برنامه سه بعدی ساز مانند
ولی راههای مختلفی برای شبیه سازی در فلش وجود دارد . موضوع مهم در شبیه سازی تصاویر سه بعدی در فلش ، استفاده از ترفندهاست



ادامه دارد...

عــــلی
18-07-2007, 14:45
و محاسبات سه بعدی Drawing API




مقدمه


محتویات فیلمهای سه بعدی که در فلیمهای فلش از آنها استفاده می شود ، معمولا پیش از انتشار فیلم ساخته می شوند. طراحان می توانند موضوعات گرافیکی را از منابع بیرونی وارد فلش کرده و یا از ابزارهای ترسیمی فلش برای ترسیم استفاده کنند. سپس در امده و ثابت و بدون تغییر می شوندSWFاین موضوعات در زمان انتشار فایل در قالب

از طرفی وقتی موضوعاتی در هنگام پخش فیلم فلش ایجاد می شوند می گوئیم این موضوعات گرافیکی در زمان اجرا بطور پویا ایجاد شده اند

برای رسم موضوعات Drawing API در فلش این کار را انجام میدهد . از Drawing API
گرافیکی واکنش گرا استفاده می شود
در فلش Drawing API










سه روال مهم در Drawing API براي ترسيم خط ، منحني و نقطه و يكي براي پاك كردن وجود دارد:

روال ترسیمی :

1.moveTO(x,y): مكان جاري ترسيم را به مختصات X , y منتقل مي كند.
2.lineTo(x,y):یک خط از مکان ترسیم قبلی به ترسیم مختصات x,y ميكند.سپس مکان ترسم جدید را در تعریف مختصات x, y می كند.
3.curveTo(contorl_x,control_y,x,y):یک منحنی از مکان ترسیم قبلی به مختصات x,y ترسيم ميكند.سپس مكان ترسيم جديد را در مختصات x,y تعريف مي كند.

clear():تمام ترسیمات انجام شده در فیلم را پاک می کند.

عــــلی
18-07-2007, 15:00
چون فلش در اصل برای کارهای سه بعدی سازی طراحی نشده است ، نمی توانیم از شتاب دهنده سه بعدی کمک بگیریم . یعنی در هنگام سه بعدی سازی در فلش باید توازنی بین پیچیدگی و سرعت برقرار کنیم . به عبارت دیگر برای برخورداری از سرعت باید ترسیمات را ساده کنیم
در ادامه یک مکعب ساده رسم می کنیم . یک مکعب از هشت راس ( که نطقه نامیده می شود ) و شش وجه تشکیل شده است
برای 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] ); }};
فیلم خود را امتحان کنید
اولین گام به دنیای سه بعدی موفقیت آمیز بود ، ولی مطالبی را هنوز مطرح نکرده ایم . اول اینکه مثال قبل یک فریم ساده سیمی بود . اگر وجوه را رنگ امیزی کنیم این مثال عملی نخواهد بود بود . زیرا همیشه یک وجه مکعب ، در حال چرخش روی وجوه دیگر خواهد بود. دوم اینکه تغییر در چرخش به خوبی نمایش داده می شود ، ولی تعقیب ان کمی سحت است . سوم این که هنوز نحوه اثر نور بر وجوه مکعب را بررسی نکرده ایم

عــــلی
18-07-2007, 15:10
موتور سه بعدی ساز چهار نوع تغییر شکل را تعریف می کند : تغییر مکان ، تغییر مقیاس ، چرخش و پرسپکتیو . حال هر عمل را کمی شرح می دهیم
تغییر مکان
تغییر مکان را می توان با عمل حجمع انجام داد . در اکشن اسکریپت می توان مکان نقطه
تغییر داد . مثلا tz, , ty . tx را با افزودن P

p[0] += tx;

p[1] += ty;

p[2] += tz;


جا به جا میشود tz , ty , tx به اندازه z , y ,x پس از این تغییر در طول محورهای p نقطه

تغییر مقیاس
sz , sy ,sx را با استفاده از p تغییر مقیاس یعنی عمل اکشن اسکریپت می توان نقطه
بدین صورت تغییر مقیاس داد

p[0] *= sx;

p[1] *= sy;

p[2] *= sz;



چرخش
چرخش را می توان با تغییر اندازه حول یک محور اندازه گیری کرد . چرخش در موتور سه z x را بدین صورت حول محور p تعریف شده است . نقطه z , y , x بعدی ساز ما حول محور
می چرخانیم

y = p[1] *Math.cos ( theta ) - p[2] *Math.sin ( theta ) ;

z = p[1] *Math.sin ( theta ) + p[2] *Math.cos ( theta ) ;

p[1] = y;

p[2] = z;


می چرخانیم y را بدین صورت حول محور p نقطه

z = p[2] *Math.cos ( theta ) - p[0] *Math.sin ( theta ) ;

x = p[2] *Math.sin ( theta ) + p[0] *Math.sin ( theta ) ;

p[2] = z;

p[0] = x;


می چرخانیم z را بدین صورت حول محور p نقطه

x = p[0] *Math.cos ( theta ) - p[1] *Math.sin ( theta ) ;

y = p[0] *Math.sin ( theta ) + p[1] *Math.cos ( theta ) ;

p[0] = x;

p[1] = y;
پرسپکتیو یا تغییرنما
هنگامی که به نقشه دو بعدی یک خانه نگاه میکنیم چیزی را می بینیم که اصطلاحا یک x صفحه منطبق با محورx , yترسیم موازی نامیده می شود . در ترسیم موازی محورهای
صحنه هستند x , y های
x , yکه در مقدار perspective برای یافتن مقدار perspective =c/(c+z) از فرمول ساده
بیشتر باشد اثر پرسپکتیو کمتر c نقطه ضرب خواهد شد استفاده میکنیم . هرچه مقدار
تغییر می دهند عبارتند از c را با ثابت p میشود . دستوراتی که به نقطه

if ( c-p[2] == 0 ) perspective = 1;

else p = perspective / p [2] + perspective;

if (c <= 0) perspective = 1;

p [0] *= perspective;

p[1] *= perspective;


تمام شد.
قربان شما علي.:11: .

flashman
19-07-2007, 02:12
سلام دوسته من


Thnaks Man. Very Nice