آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
دو شنبه 16 ارديبهشت 1392برچسب:, :: 2:41 ::  نويسنده : ابوالفضل

 نماد های مقایسه ای

استفاده از نماد های مقایسه ای زمانی است که عملگر های منطقی ( که به شرح هر یک خواهیم پرداخت ) از آن برای عملیات مقایسه ای بین اعداد و متغیر ها استفاده کنند . این علائم به شرح زیر می باشد :

 

 نمونه    

A بزرگتر از B باشد                A > B

A کوچکتر از B باشد              A < B

A بزرگتر یا مساوی  A >= B          B

A کوچکتر یا مساوی            A <= B                         

A مساوی A = B                         B        

A نامساوی   A <> B                   B

 

2 - عملگر های منطقی ( Boolean )

این عملگر ها به بررسی درستی و نادرستی معادلات عددی و کاراکتری و همچنین ترکیب ساختار عبارات می پردازند که حاصل آن عددی است شامل صفر که False در نظر گرفته می شود و یا یک که True در نظر گرفته می شود . یعنی اگر عبارت درست و منطقی باشد ، حاصل True و اگر عبارت مورد بررسی نادرست باشد ، حاصل False خواهد بود .

 

مفهوم واقعی استفاده از عملگر های منطقی :

هنگام نوشتن برنامه با متغیرها و اعداد زیادی سر و کار خواهیم داشت تا برای رسیدن به هدف دلخواهمان به بررسی موقعت های ایجاد شده در برنامه بپردازیم . شرایط ایجاد شده متشکل از مقادیر اعداد و عبارات و متغیرهای موجود در برنامه شباهت زیادی به شرایط زندگی طبیعی ما دارد . هم اکنون به بررسی هر یک می پردازیم :

 

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

 

2 – الف : عملگر And ( وَ )

عملگر And به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل صفر و یک و متغییر ها می باشد . تعداد عبارات می تواند 2 و یا بیشتر باشد .  کافی است بین هر عبارت از کلمه ی And استفاده شود . عملگر And عبارات را بررسی می کند . اگر هر عبارت منطقی باشد آن را True و اگر غیر منطقی باشد آن را False در نظر می گیرد . در آخر اگر تمای عبارات True شدند ، حاصل True می شود و اگر حتی یک عبارت هم False باشد ، حاصل کل False خواهد شد . مانند دستور العمل زیر .

 

Case1 And Case2

 

طبق این دستور العمل در مرحله ی اول Case1 بررسی می شود . اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در مرحله ی دوم Case2 بررسی شده اگر منطقی بود ،  True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در آخر اگر هر دو منطقی باشند ، Case1 And Case2 برابر True و اگر یکی از آنها و یا هر دو غیر منطقی باشند ، Case1 And Case2 برابر False خواهد بود .

 

زمانی Case1 And Case2 برابر True خواهد شد ، که Case1 و Case2 هر دو منطقی ( True ) باشند . مانند مثال های زیر :

 

A = 10

"Name$ = "Yes

"A > 5 And Name$ = "Yes

 

در این مثال چون A > 5 و "Name$ = "Yes هر دو منطقی و درست ( True ) هستند ،

در نتیجه کل عبارت "A > 5 And Name$ = "Yes منطقی و برابر True خواهد بود .

 

A = 78

"Name$ = "No

"A < 15 And Name$ = "Yes

 

در این مثال چون A < 15 و "Name$ = "Yes هر دو غیر منطقی و نادرست ( False ) هستند ،

در نتیجه کل عبارت "A < 15 And Name$ = "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 0

"Name$ = "Yes

"A >= 0 And Name$ <> "Yes

 

در این مثال چون A >= 0 منطقی ( True ) ولی "Name$ <> "Yes غیر منطقی و نادرست ( False ) است ، در نتیجه کل عبارت "A >= 0 And Name$ <> "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 12.74

"Name$ = "Yes

"A < 5 And Name$ = "Yes

 

در این مثال چون A < 5 نادرست ( False ) ولی "Name$ = "Yes منطقی و درست ( True ) است ،

در نتیجه کل عبارت "A < 5 And Name$ = "Yes غیر منطقی و برابر False خواهد بود .

 

2 – ب : عملگر Or ( یا )

عملگر Or به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل False و True و متغیر ها می باشد . تعداد عبارات می تواند 2 و یا بیشتر باشد .  کافی است بین هر عبارت از کلمه ی Or استفاده شود . عملگر Or عبارات را بررسی می کند . اگر هر عبارت منطقی باشد آن را True و اگر غیر منطقی باشد آن را False در نظر می گیرد . در آخر اگر تمای عبارات False شدند ، حاصل False می شود در غیر این صورت حاصل True خواهند شد . یعنی اگر تنها یک عبارت هم درست باشد ، در نتیجه کل عبارات True خواهد بود . مانند دستور العمل زیر .

 

Case1 Or Case2

 

طبق این دستور العمل در مرحله ی اول Case1 بررسی می شود . اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در مرحله ی دوم Case2 بررسی شده اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در آخر اگر هر دو غیر منتقی باشند Case1 Or Case2 برابر False و در غیر این صورت عبارت Case1 Or Case2 برابر True خواهد بود .

 

زمانی Case1 And Case2 برابر True خواهد شد ، که حداقل یکی از موارد Case1 و Case2 منطقی ( True ) باشد . مانند مثال های زیر :

 

A = 10

"Name$ = "Yes

"A > 5 Or Name$ = "Yes

 

در این مثال چون A > 5 و "Name$ = "Yes هر دو منطقی و درست ( True ) هستند ،

در نتیجه کل عبارت "A > 5 Or Name$ = "Yes منطقی و برابر True خواهد بود .

 

A = 78

"Name$ = "No

"A < 15 Or Name$ = "Yes

 

در این مثال چون A < 15 و "Name$ = "Yes هر دو غیر منطقی و نادرست ( False ) هستند ،

در نتیجه کل عبارت "A < 15 Or Name$ = "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 0

"Name$ = "Yes

"A >= 0 Or Name$ <> "Yes

 

در این مثال چون A >= 0 منطقی ( True ) ولی "Name$ <> "Yes غیر منطقی و نادرست ( False ) است ، در نتیجه کل عبارت "A >= 0 Or Name$ <> "Yes منطقی و برابر True خواهد بود .

 

A = 12.74

"Name$ = "Yes

"A < 5 Or Name$ = "Yes

 

در این مثال چون A < 5 نادرست ( False ) ولی "Name$ = "Yes منطقی و درست ( True ) است ،

در نتیجه کل عبارت "A < 5 Or Name$ = "Yes منطقی و برابر True خواهد بود .

 

2 – ج : عملگر Not ( نه منتقی )

عملگر Not به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل صفر و یک و متغییر ها می باشد . عملگر Not عبارات داخل پرانتز را بررسی می کند تا حاصل درستی یا نادرستی را معکوس در نظر بگیرد . یعنی اگر عبارت غیرمنطقی و نادرست باشد ، آن را True و اگر درست و منطقی باشد آن را False در نظر می گیرد . مانند دستورالعمل زیر .

 

(Not (Case

 

طبق این دستور العمل Case بررسی می شود . اگر منطقی بود False و اگر غیر منطقی بود True در نظر گرفته می شود . 

 

آرایه ها ( Arrays ) :

آرایه همان متغیر است . با این تفاوت که در هر متغیر تنها یک مقدار ( عدد یا عبارت متنی ) جا می گرفت . ولی هر آرایه می تواند بیشتر از یک مقدار را در خود جای دهد و تعداد مقادیر داخل آن را ما مشخص می کنیم .

 

تعریف آرایه :

برای ایجاد آرایه از دستورالعمل زیر استفاده کنیم :

 

Dim VariableName(NumIndex) As Type

 

طبق این دستورالعمل ابتدا عبارت Dim را تایپ می کنیم . سپس به جای عبارت VariableName نام آرایه ای را که می خواهیم ایجاد کنیم قرار می دهیم . سپس یک پرانتز باز می کنیم و به جای NumIndex به تعداد مورد نیازمان عضو در آرایه ایجاد می کنیم . سپس پرانتز را می بندیم . عبارت As جزء دستورات کلیدی DarkBasic می باشد که باید حتما نوشته شود . سپس به جای Type نوع متغری را که می خواهیم تعریف کنید همانند نوع متغیر ها ( از جدول متغیرها ) انتخاب و تایپ می کنیم ( بغیر از REAL ) . به مثال زیر توجه کنید .

 

Dim MyNumber(10) As Integer

 

در این مثال آرایه ای با نام MyNumber از نوع Integer و به تعداد 11 عضو ایجاد و معرفی شد . با نوشتن عدد 10 تعداد 11 عضو ایجاد شد دلیل آن این است بیشترین عدد 10 و کمترین آن صفر است و چون صفر هم جزء عضو ها حساب می شود ، پس ما 11 عضو در این آرایه ایجاد کردیم .

 

با استفاده از دستور UnDim می توانیم آرایه ی ایجاد شده ( برای مثال آرایه ی بالا با نام MyNumber ) را حذف کنیم مانند زیر :

 

()UnDim MyNumber

 

کاربرد آرایه ها :

برنامه ای می نویسیم که در آن معدل نمرات درس ریاضی چهل دانش آموز باید حساب شود . پس باید 40 متغیر تعریف کنیم مانند زیر :

 

Number1 = 17

Number2 = 12

Number3 = 20

تا آخر . . .

 

ما می توانیم با استفاده از دستور Dim آرایه ای از متغیرها با نام Number ایجاد کنیم . به جای استفاده از خطوط بالا مانند دستور زیر عمل می کنیم :

 

(Dim Number(40

Number(1) = 17

Number(2) = 12

Number(3) = 20

تا آخر . . .

 

در خط اول 40 متغیر با نام Number ایجاد و در خطوط بعدی آنها را مقدار دهی کردیم . سپس آن ها را چاپ می کنیم .

 

(Print Number(1

(Print Number(2

(Print Number(3

تا آخر . . .

 

ما می توانیم به جای دستورات بالا با استفاده از دستور زیر محتویات درون تمام 40 متغیر آرایه ای را چاپ کنیم :

 

For T = 1 To 40

(Print Number(T

Next T

 

ما با استفاده از دستور بالا به جای 40 خط تنها از 3 خط دستور استفاده کردیم .

دستور For دستورات بین عبارت ( For T = 1 To 40 ) تا ( Next T ) را چهل بار تکرار می کند و در این چهل بار مقدار متغیر T از 1 تا 40 شمرده می شود . برای یادگیری کامل عملکرد دستور For ... Next به فهرست مطالب واقع در ابتدای کتاب رجوع کنید .

 

همچنین میتوانیم با استفاده از برنامه ی زیر معدل درس ریاضی این 40 دانش آموز را حساب کنیم .

 

K = 0

For T = 1 To 40

(K = K + Number(T

Next T

Z = K / 40

Print Z

Wait Key

 

آرایه های چند بعدی :

لزومی ندارد آرایه ها تنها دارای یک بعد باشند . ما می توانیم هر مقدار بعد نیاز داشتیم ایجاد کنیم . مانند مثال های زیر .

 

مثال زیر آرایه ی یک بعدی را نشان می دهد

 

(Dim Adad(6

 

(Adad(6) Adad(5) Adad(4) Adad(3) Adad(2) Adad(1) Adad(0    

 

 

مثال زیر آرایه ی دو بعدی از نوع کاراکتری را نشان می دهد


(Dim Nm$(6,4


 

(Nm$(6,0) Nm$(5,0) Nm$(4,0) Nm$(3,0) Nm$(2,0) Nm$(1,0) Nm$(0,0

(Nm$(6,1) Nm$(5,1) Nm$(4,1) Nm$(3,1) Nm$(2,1) Nm$(1,1) Nm$(0,1

(Nm$(6,2) Nm$(5,2) Nm$(4,2) Nm$(3,2) Nm$(2,2) Nm$(1,2) Nm$(0,2

 (Nm$(6,3) Nm$(5,3) Nm$(4,3) Nm$(3,3) Nm$(2,3) Nm$(1,3) Nm$(0,3

 (Nm$(6,4) Nm$(5,4) Nm$(4,4) Nm$(3,4) Nm$(2,4) Nm$(1,4) Nm$(0,4

 

 

برای مثال ، چند نمونه از عضو های آرایه ی بالا بصورت زیر مقدار دهی شده بودند .

 

"Name$(0,0) = "Make

"Name$(0,2) = "Follow

"Name$(2,3) = "Matrix

"Name$(4,4) = "Move

"Name$(6,4) = "Texture

و غیره . . .

 

تصویر حقیقی داده های موجود در آرایه های یک بعدی و دو بعدی در اشکال بالا نشان داده شدند ، ما می توانیم آرایه هایی از نوع عدد صحیح Integer ، عدد طبیعی Real و یا عبارات رشته ای String با هر چند بعد که نیاز داشته باشیم ، ایجاد کنیم . با استفاده از آرایه ها می توانیم برنامه های سودمندی ایجاد کنیم فقط باید مواظب باشیم تا آرایه هایمان آن قدر بزرگ نشوند تا کل حافظه ی Ram اشغال شود . در این صورت با پیغام سرریز شدن حافظه مواجه خواهیم شد . 

 

User Defined Types :

تا کنون با انواع متغیر ها آشنا شدیم . با استفاده از آرایه ها توانستیم تعداد زیادی متغیر تحت یک نام ایجاد کنیم . 

دستور Type ... EndType به ما امکان ایجاد الگویی جدید از متغیر ها را می دهد . یعنی ما می توانیم خصوصیات مختلفی شامل اعداد و عبارات گوناگون را تحت یک نام ایجاد و سازماندهی کنیم . مانند دستورالعمل زیر .

 

TYPE MyType

    Fieldname1

    Fieldname2

    Fieldname3

ENDTYPE

 

طبق این دستور العمل با استفاده از دستور TYPE الگویی با نام MyType ایجاد کریدم . سپس متغیر های مورد نیازمان را مانند Fieldname1 و Fieldname2 و Fieldname3 ایجاد کردیم و در آخر با استفاده از دستور ENDTYPE به الگویمان خاتمه دادیم . در این دستور ما سه متغیر از نوع صحیح ( Integer ) تعریف کردیم . ما می توانیم به تعداد نیازتان متغیر ( عدد یا کاراکتر ) تعریف کنیم . دستور Type ... EndType را می توان در یک خط هم نوشت . مانند مثال زیر :

 

TYPE MyType Fieldname1 Fieldname2 Fieldname3 ENDTYPE

 

کاربرد دستور Type ... EndType

فرض کنید ما می خواهید مشخصات 100 دانش آموز را ذخیره کنیم . ابتدا الگویمان را تحت یک نام توسط دستور Type... EndType ایجاد می کنیم . سپس یک متغیر آرایه ای شامل 100 عضو از نوع الگویمان تعریف می کنیم مانند مثال زیر :

 

Type PeopleSpecification

   Name As String

   Family As String

   Weight As Byte

   Phone As Double Integer

EndType


Dim People(99) As PeopleSpecification


"People(1).Name = "Matin

"People(1).Family = "Heydari

People(1).Weight = 60

People(1).Phone = 02545


Print People(1).Name

Print People(1).Family

Print People(1).Weight

Print People(1).Phone

...

 

در این مثال الگویی با نام PeopleSpecification ایجاد کردیم و چهار متغیر جهت ذخیره ی نام و نام خانوادگی و وزن و تلفن دانش آموزان ایجاد کردیم . سپس متغیری آرایه ای شامل 100 عضو ( صفر هم حساب است ) از نوع نام الگوی ساختگی مان ( PeopleSpecification ) ایجاد کردیم  و در خطوط بعد آن را مقدار دهی  ، در آخر برای امتحان مشخصات نفر اول را که وارد کرده بودیم چاپ کردیم .

 

توجه ! زمانی که از دستور Type ... EndType استفاده می کنیم ، آن را در بالا ترین خط های برنامه قرار می دهیم ، تا قبل از استفاده به DarkBasic معرفی شده باشند .

 

می توانیم از متغیر هایی درون الگویمان استفاده کنیم ، که آن متغیر ها ، خود نیز از نوع الگوی دیگری الگوبرداری شده باشند . مانند مثال زیر :

 

Type SelectPhone

   Office As Double Integer

   Home As Double Integer

   Mobile As Double Integer

EndType


Type PeopleSpecification

   Name As String

   Family As String

   Weight As Byte

   Phone As SelectPhone

EndType


Dim People(99) As PeopleSpecification


"People(1).Name = "Matin

"People(1).Family = "Heydari

People(1).Weight = 60

People(1).Phone.Office = 02545

People(1).Phone.Home = 49859

People(1).Phone.Mobile = 08478


Print People(1).Name

Print People(1).Family

Print People(1).Weight

Print People(1).Phone.Office

Print People(1).Phone.Home

Print People(1).Phone.Mobile

...

 

در این مثال متغیر Phone در الگوی ( PeopleSpecification ) از نوع الگوی (SelectPhone  ) تعریف شده است .



دو شنبه 16 ارديبهشت 1392برچسب:, :: 1:54 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای برای ایجاد ذراتی متحرک با اشکال مختلفی از جمله برف ، آتش و یا هر شکلی که نیاز داشته باشیم ، می باشد . می توانیم شدت ، بزرگی ، جهت و سرعت پخش ذرات را هم تنظیم کنیم .

 
دستور MAKE PARTICLES
با این دستور می توانیم منبع پخش ذره ایجاد می کنیم . مانند دستورالعمل زیر :
 
MAKE PARTICLES ParticleNumber,ImageNumber,Frequency,Radius
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای ImageNumber شماره ی تصویر مورد نظر و به جای Frequency مقدار تراکم و به جای Radius شعاع ذرات ( اندازه ی درشتی هر ذره ) را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Particles 2,1,10,8
Do
Loop
 
در این مثال منبع ذره ای با شماره ی 2 و با تصویر شماره ی 1 و سرعت 10 و اندازه ی شعاع هر ذره 8 ایجاد و پخش می شود .
 
دستور MAKE SNOW PARTICLES
با این دستور می توانیم یک منبع پخش برف در فضا ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE SNOW PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات برف و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از ذرات برف ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع برف در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات فرف را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Do
Loop
 
دستور MAKE FIRE PARTICLES
با این دستور می توانیم یک منبع پخش ذرات با رفتار و حرکتی شبیه به آتش ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE FIRE PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات آتش و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از شراره های آتش ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع آتش در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات آتش را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp" , 1
make fire particles 5, 1, 1500,-5,5,5, 10,10,10
Position Camera -5,5,-5
Do
Loop
 
دستور DELETE PARTICLES
این دستور منبع پخش ذرات ( آتش ، برف یا ذره ) را حذف می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp",1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\snow.Bmp",2
make fire particles 5,1,1500,-5,5,5,10,10,10
make snow particles 10,2,1500,-5,5,5,10,10,10
Position Camera -5,5,-5
Wait 2000
Delete particles 5
Do
Loop
 
تابع PARTICLES EXIST
این تابع بررسی می کند که آیا منبع پخش مورد نظر وجود دارد را خیر .
اگر وجود داشته باشد تابع ()PARTICLES EXIST عدد یک و اگر وجود نداشته باشد ، عدد صفر را برمی گرداند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Particles 2,1,10,8
Do
(blnValue = PARTICLES EXIST(2
"If blnValue = 1 Then Text 10,10,"Exist
"If blnValue = 0 Then Text 10,30,"No Exist
Loop
 
در این مثال دو منبع پخش ذره ایجاد شد . یک منبع پخش ذره از نوع آتش با شماره ی 5 و یک منبع پخش ذره از نوع برف . سپس بعد از 2 ثانیه منبع پخش ذره شماره ی 5 حذف شد .
 
دستور HIDE PARTICLES
این دستور منبع پخش مورد نظر را بهمراه ذرات منتشر شده از آن را مخفی می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Wait 2000
Hide particles 5
Do
Loop
 
دستور SHOW PARTICLES
اگر منبع پخش مورد نظر را توسط دستور قبلی ( Hide particles ) مخفی کرده باشیم . با این دستور می توانیم آن را دوباره آشکار کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Wait 2000
Hide particles 5
Wait 2000
Show particles 5
Do
Loop
 
دستور POSITION PARTICLES
با این دستور موقعیت منبع پخش را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION PARTICLES ParticleNumber,X,Y,Z
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای X و Y و Z فاصله ی منبع پخش ذره تا محور X و Y و Z محور مختصات فضای سه بعدی را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Position Particles 5,-2,4,1
Wait Key
 
تابع PARTICLES POSITION X و تابع PARTICLES POSITION Y و 
تابع PARTICLES POSITION Z
تابع ()PARTICLES POSITION X فاصله ی منبع پخش مورد نظر تا محور X مختصات فضای سه بعدی و
تابع ()PARTICLES POSITION Y فاصله ی منبع پخش مورد نظر تا محور Y مختصات فضای سه بعدی و
تابع ()PARTICLES POSITION Z فاصله ی منبع پخش مورد نظر تا محور Z مختصات فضای سه بعدی را برمی گردانند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Position Particles 5,-2,4,1
Do
((Text 10,10,"X = "+Str$(PARTICLES POSITION X(5
((Text 10,30,"Y = "+Str$(PARTICLES POSITION Y(5
((Text 10,50,"Z = "+Str$(PARTICLES POSITION Z(5
Loop
 
دستور SET PARTICLE EMISSIONS
این دستور تراکم ذرات منبع را در حین اجرای برنامه تنظیم می کنید . مانند دستورالعمل زیر :
 
SET PARTICLE EMISSIONS ParticleNumber,Frequency
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش و به جای Frequency مقدار تراکم منبع را قرار می دهیم که اگر Frequency صفر باشد هیچ ذره ای پخش نخواهد شد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Set Particle Emissions 2,20
Wait Key
 
دستور POSITION PARTICLE EMISSIONS
این دستور موقعیت پخش ذرات را نسب به موقعیت منبع آن مشخص می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,10,-15
Wait 2000
POSITION PARTICLE EMISSIONS 2,0,10, 0
Wait Key
 
دستور COLOR PARTICLES
این دستور رنگ ذرات پخش شده از منبع را به رنگ دلخواهمان تغییر می دهد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Color Particles 2,255,0,0
Wait Key
 
دستور ROTATE PARTICLES
این دستور منبع پخش مورد نظر را حول محور های X و Y و Z فضای سه بعدی می چرخاند . همانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,10,-15
Wait 2000
POSITION PARTICLE EMISSIONS 2,0,10,0
ROTATE PARTICLES 2,0,0,90
Wait Key
 
دستور GHOST PARTICLES ON
این دستور ذرات پخش شده از منبع پخش ذرات را با 6 مدل مختلف بصورت نیمه شفاف در می آورد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
For N = 0 To 5
(Text 10,10,Str$(N
Wait 2000
GHOST PARTICLES ON 2,N
Next N
Wait Key
 
در این مثال N تعداد حالت های شفافیت می باشد ( از 1 تا 6 )
 
دستور GHOST PARTICLES OFF
این دستور ، دستور قبلی ( GHOST PARTICLES ON ) را خنثی می کند . یعنی ذرات پخش شده از منبع به حال عادی برمی گردد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
GHOST PARTICLES ON 2,4
Wait 2000
GHOST PARTICLES OFF 2
Wait Key
 
دستور SET PARTICLE VELOCITY
با این دستور می توانیم شدت پرتاب ذرات را از منبع آن را تنظیم کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
SET PARTICLE VELOCITY 2,10
Wait Key
 
دستور SET PARTICLE GRAVITY
با این دستور وزن ذرات پخش شده از منبع را تنظیم می کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
SET PARTICLE VELOCITY 2,10
Wait 2000
set particle gravity 2,1
Wait Key
 
دستور SET PARTICLE FLOOR
با این دستور می توانیم مشخص کنیم که ذرات با سطح ارتفاع منبع برخورد داشته باشند و یا بصورت آزاد به سمت پائین حرکت کنند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,10,1,10
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,-6,2,0
Position Particles 2,0,0,0
Position Camera 0,10,-100
POSITION PARTICLE EMISSIONS 2,0,1,0
Wait 2000
set particle floor 2,0
Wait 2000
set particle floor 2,1
Wait Key
 


یک شنبه 15 ارديبهشت 1392برچسب:, :: 1:49 ::  نويسنده : ابوالفضل

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

 
دستور MAKE MATRIX
با این دستور می توانیم صفحه ای مشبک بسازیم . مانند دستورالعمل زیر :
 
MAKE MATRIX MatrixNumber,Width,Height,XSegments,ZSegments
 
طبق این دستورالعمل به جای MatrixNumber شماره ی ماتریکس و به جای Width طول و به جای Height عرض ماتریک و به جای XSegments تعداد شبکه های تشکیل دهنده ی طولی و به جای ZSegments تعدا شبکه های تشکیل دهنده ی عرضی را قرار می دهیم . مانند مثال زیر :
 
Make Matrix 1,500,250,25,10
Position Camera 250,150,-300
Wait Key
 
در این مثال ماتریکسی با شماره ی یک ( نام 1 ) با طول 500 و عرض 250 و با تعداد 25 شبکه ی طولی و 10 شبکه ی عرضی ( 250=10*25 ) ، در مجموع 250 شبکه ی داخلی در آن ایجاد شد .
 
تابع MATRIX EXIST
این تابع بررسی می کند که آیا ماتریکس مورد نظر وجود دارد یا خیر .
اگر ماتریکس مورد نظر وجود داشت ، تابع ()Matrix Exist مقدار یک و اگر وجود نداشت تابع ()Matrix Exist مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Matrix 2,10,10,3,3
Do
(A = Matrix Exist(2
(Text 10,10,Str$(A
Loop
 
دستور DELETE MATRIX
این دستور ماتریکس مورد نظر را حذف می کند . مانند مثال زیر :
 
Make Matrix 2,1000,500,10,20
Make Matrix 4,250,350,7,8
Delete Matrix 2
Wait Key
 
در این مثال ماتریکس شماره ی 2 حذف شد .
 
دستور POSITION MATRIX
با این دستور می توانیم موقعیت مکانی ماتریکس مورد نظر را در فضای سه بعدی مشخص کنیم . مانند دستورالعمل زیر :
 
Make Matrix 7,500,250,25,10
Position Camera 250,150,-300
Wait 1500
Position Matrix 7,50,50,0
Wait Key
 
تابع MATRIX POSITION X و تابع MATRIX POSITION Y و تابع MATRIX POSITION Z
تابع ()MATRIX POSITION X فصله ی ماتریکس تا محور X مختصات و تابع ()MATRIX POSITION Y فاصله ی ماتریکس تا محور Y مختصات و تابع ()MATRIX POSITION Z فاصله ی ماتریکس تا محور Z مختصات فضای سه بعدی را برمی گرداند . مانند مثال زیر :
 
Make Matrix 5,500,250,25,10
Position Camera 250,150,-300
Position Matrix 5,10,50,70
(X = Matrix Position X(5
(Y = Matrix Position Y(5
(Z = Matrix Position Z(5
Do
(Text 10,10,Str$(X
(Text 10,30,Str$(Y
(Text 10,50,Str$(Z
Loop
 
نکته : زمانی که اشیاء ساده ی سه بعدی را ایجاد می کردیم .نقطه ی لولایی شیء به نام پایوت ( Pivot نقطه ای در جسم می باشد که موحور X و Y و Z  آن شیء در آن نقطه همدیگر را قطع می کنند ) معمولا در وسط جسم وجود داشت و پایوت اشیاء پیچیده ی سه بعدی بنا به طراحشان در موقعیت خاصی در فضای آن جسم گذاشته می شود و در ماتریکس نقطه ی پایوت در پائین و چپ جسم قرار دارد . ما در مثال زیر موقعت یک جعبه و یک ماتریکس را در نقطه ی X=0 و Y=0 و Z=0 قرار می دهیم تا پایوت هر دو در یک نقطه مشخص شود .
 
Make Matrix 4,500,500,25,25
Make Object Box 2,10,10,10
Position Matrix 4,0,0,0
Position Object 2,0,0,0
Position Camera 0,100,-250
Wait Key
 
دستور SET MATRIX HEIGHT
با این دستور می توانیم هر یک از گوشه های بین شبکه های موجود در ماتریکس را به تنهایی بالا و یا پائین بکشیم . مانند مثال زیر :
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
SET MATRIX HEIGHT MatrixNumber,1,2,20
Update Matrix MatrixNumber
Wait Key
 
در این مثال گوشه ای با مختصات 1و2 به مقدار 20 واحد بالا کشیده شد . یعنی اگر گوشه ها در طول ( از پائین و چپ ) به سمت راست با شماره ی صفر شروع ، و در عرض ( از پائین و چپ ) به سمت بالا با شماره ی صفر شروع شده باشند ( شمرده شوند ) . مختصات 1و2 یعنی گوشه ی دوم از چپ و سوم از پائین به مقدار 20 واحد به بالا کشیده شده . 
 
در مثال بالا از دستور Update Matrix هم استفاده کردیم تا تغیرات بوجود آمده در ماتریکس اعمال شود .
 
با اجرای مثال زیر و با استفاده از دکمه های جهت ، موقعت گوشه ی مورد نظر در ماتریکس را مشخص و با استفاده از دکمه های A و Z آن گوشه را بالا و یا پائین می کشیم .
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
Sync On : Sync Rate 30
Do
(Text 10,10,"X = "+Str$(X
(Text 10,30,"Y = "+Str$(Y
(Text 10,50,"Height = "+Str$(H
If Upkey()=1 Then Inc Y
If Downkey()=1 Then Dec Y
If Rightkey()=1 Then Inc X
If Leftkey()=1 Then Dec X
If X < 0 Then X = 0
If X > 25 Then X = 25
If Y < 0 Then Y = 0
If Y > 10 Then Y = 10
If Inkey$()="A" Or Inkey$()="a" Then Inc H
If Inkey$()="Z" Or Inkey$()="z" Then Dec H
If H<-300 Then H=-300
If H>300 Then H=300
SET MATRIX HEIGHT MatrixNumber,X,Y,H
Update Matrix MatrixNumber : Sync
Loop
 
دستور RANDOMIZE MATRIX
این دستور تمام گوشه های بین شبکه ماتریکس را به مقدار یک عدد تصادفی بالا می کشد . مانند دستورالعمل زیر :
 
RANDOMIZE MATRIX MatrixNumber,MaximumHeight
 
طبق این دستورالعمل به جای MatrixNumber نام ماتریکس مورد نظر و به جای MaximumHeight بیشترین بالا آمدن گوشه ها را قرار می دهیم . یعنی هر گوشه ای به اندازه ای بالا می آید و بیشترین مقدار بالا آمدن گوشه ها را مقدار MaximumHeight بصورت یک عدد تصادفی بیک یک تا MaximumHeight تعیین می کند . مانند مثال زیر :
 
Make Matrix 3,500,250,25,10
Position Camera 250,150,-300
Randomize MATRIX 3,20
Update Matrix 3
Do
Loop
 
تابع GET MATRIX HEIGHT
این تابع ارتفاع هر گوشه در ماتریکس را برمی گرداند . مانند مثال زیر :
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
SET MATRIX HEIGHT MatrixNumber,10,7,12
SET MATRIX HEIGHT MatrixNumber,0,0,-5
Update Matrix MatrixNumber
Do
X=10
Y=7
(H=Get Matrix Height(MatrixNumber,X,Y
(Text 10,10,"X= "+Str$(X)+" , Y = "+Str$(Y)+" And Height = "+Str$(H
Loop
 
دستور PREPARE MATRIX TEXTURE
با این دستور می توانیم بر روی تمامی شبکه های موجود در ماتریکس یک عکس بچسبانیم . مانند دستورالعمل زیر :
 
PREPARE MATRIX TEXTURE MatrixNumber,ImageNumber,Across,Down
 
طبق این دستورالعمل به جای MatrixNumber شماره ی ماتریکس مورد نظر و به جای ImageNumber شماره ی تصویر مورد نظر و به جای Across عدد یک و به جای Down عدد یک را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Matrix 3,500,250,5,2
Position Camera 250,70,-300
Randomize MATRIX 3,20
PREPARE MATRIX TEXTURE 3,1,1,1
Update Matrix 3
Do
Control Camera Using Arrowkeys 0,1,1
Loop
 
با استفاده از دکمه های جهت می توانیم حول ماتریکس گردش کنیم .


پنج شنبه 12 ارديبهشت 1392برچسب:, :: 22:51 ::  نويسنده : ابوالفضل

 با استفاده از دستورات این فصل می توانیم نور ایجاد کنیم . می توانیم رنگ آن ها ، جهت پخش ( جهتی که نور به آن سمت تابیده می شود ) و فاصله ای برد نورها ( مقدار فاصله ای که نور باید تا آن فاصله تابش داشته باشد ) و همچنین موقعیت مکانی آن ها را در فضای سه بعدی مشخص کنیم .

 
دستور MAKE LIGHT
با استفاده از این دستور می توانیم از 1 تا 7 نور جدید ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE LIGHT LightNumber
 
طبق این دستورالعمل به جای LightNumber شماره ای بین 1 تا هفت برای نام نورهای جدیدمان قرار می دهیم . یعنی تنها هشت نور می تواند در صحنه وجود داشته باشد . بعلاوه نور شماره ی صفر که نور پیش فرض صحنه است و همیشه وجود دارد . مانند مثال زیر :
 
Make Light 5
Wait Key
 
در این مثال نوری با شماره ی 5 ایجاد شد .
 
دستور DELETE LIGHT
این دستور نور ایجاد شده را از صحنه حذف می کند . مانند مثال زیر :
 
Make Light 1
Make Light 2
Delete Light 1
Wait Key
 
در این مثال نور هایی با شماره های 1 و 2 ایجاد و سپس نور شماره ی 1 حذف شد .
 
نکته : نور شماره ی صفر که نور پیش فرض صحنه است را نمی توانیم حذف کنیم .
 
دستور HIDE LIGHT
این دستور نور موجود در صحنه را غیر فعال می کند . یعنی با اجرای این دستور ، وجود نور مورد نظر هیچ تاثیری بر روی صحنه نخواهد داشت . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Cone 6,10
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,0
Wait 2000
Hide Light 0
Wait Key
 
در این مثال نور شماره ی صفر که نور پیش فرض صحنه است ، غیر فعال ( بی تاثیر ) می شود .
 
دستور SHOW LIGHT
اگر با دستور قبلی (HIDE LIGHT ) نوری را غیر غعال کرده بودیم . با این دستور می توانیم آن نور را دوباره فعال کنیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Cone 6,10
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,0
Hide Light 0
Wait 2000
Show Light 0
Wait Key
 
دستور POSITION LIGHT
با این دستور موقعت مکانی نور مورد نظرمان را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای X و Y و Z فاصله ی نور تا محور های X و Y و Z مختصات فضای سه بعدی را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Hide Light 0 : Make Light 1
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 1,X,Y,Z
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
در این مثال نور شماره یک با موقعت مکانی کره ( پا به پای کره ) حرکت می کند .
 
دستور SET LIGHT RANGE
این دستور مشخص می کند که نور مورد نظرمان تا چه مسافتی را روشن کند ( با چه شدتی پخش شود ) . مانند مثال زیر :
 
Make Object Sphere 1,10 : Position Object 1,0,-50,100
Make Object Sphere 2,10 : Position Object 2,0,150,150
Make Object Sphere 3,10 : Position Object 3,70,80,150
Make Object Sphere 4,10 : Position Object 4,-30,50,130
Make Object Sphere 5,10 : Position Object 5,10,100,120
Make Object Sphere 6,10 : Ghost Object On 6
Position Object 6,0,20,150
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,40,-50
Hide Light 0 : Make Light 1
Position Light 1,0,20,150
Sync On : Sync Rate 30
intRange As Integer = 0
Do
Inc intRange : If intRange > 1000 Then intRange = 0
Set Light Range 1,intRange
(Text 10,10,"Light Range ="+Str$(intRange
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
دستور COLOR LIGHT
این دستور رنگ نور مورد نظرمان را تعیین می کند . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Hide Light 0 : Make Light 1
(Color Light 1,Rgb(255,0,0
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 1,X,Y,Z
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
نورها در DarkBasic به دو دسته تقسیم می شوند .
1- نور نقطه ای یا همه سویه (POINT LIGHT )
نور نقطه ای نوری است که تمام اطراف خود را نورپردازی می کند . مانند خورشید و یا شمع .
2- نور جهت دار (SPOT LIGHT )
نور جهت دار تنها یک جهت را روشن می کند . مانند چراغ ماشین و یا پروژکتور ها که تنها به یک جهت نورپردازی دارند .
 
با ایجاد نور جدید توسط دستور Make Light نور از نوع Point Light یعنی نور نقطه ای ایجاد می شدند . مانند خورشید . می توانیم توسط دستورات Set Spot Light و Set Point Light نوع نور ها را عوض کنیم . مانند دستورات زیر :
 
دستور SET POINT LIGHT
با استفاده از این دستور نور مورد نظرمان را به نور نقطه ای ( Point Light ) تبدیل می کنیم . مانند دستورالعمل زیر :
 
SET POINT LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور و به جای X و Y و Z مختصات نور را در فضا مشخص می کنیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Set Point Light 0,0,0,0
(Color Light 0,Rgb(255,255,0
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 0,X,Y,Z
((Text 10,10,"X = "+Str$(Light Position X(0
((Text 10,30,"Y = "+Str$(Light Position Y(0
((Text 10,50,"Z = "+Str$(Light Position Z(0
Rotate Light 0,0,90,0
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
در این مثال نور پیش فرض را به نور نقطه ای تبدیل کردیم . سپس آن را در محیط می گردانیم .
 
دستور SET NORMALIZATION ON و دستور SET NORMALIZATION OFF
دستور Set Normalization On باعث می شود که نوردهی به اشیاء ، حالت نرمال و نرمی داشته باشد و دستور Set Normalization Off این حالت را خنثی می کند .
 
دستور SET SPOT LIGHT
این دستور نور مورد نظر را به نور جهت دارد تبدیل می کند . مانند دستورالعمل زیر :
 
SET SPOT LIGHT LightNumber,InnerAngle,OuterAngle
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای InnerAngle شعاع داخلی نوری که پخش می شد به شکل مخروط را قرار می دهیم و به جای OuterAngle شعاع خارجی نوری که پخش می شود بصورت تار و به شکل مخروط است ( نیمه شفاف است تا طبیعی به نظر برسد ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 :Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Sync
Loop
 
دستور POINT LIGHT
با این دستور می توانیم جهت نور را با استفاده از مختصات یک نقطه ی فرضی در فضا مشخص کنیم . مانند دستورالعمل زیر :
 
POINT LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای X و Y و Z مختصات یک نقطه ی فرضی در فضا را قرار می دهیم ، تا نور به آن نقطه نگاه کند . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 :Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Point Light 2,0,0,500
Sync
Loop
 
دستور ROTATE LIGHT
این دستور نور مورد نظر را حول محور های X و Y و Z خودش می چرخاند . البته تاثیر این دستور فقط برای نورهایی از نوع Spot Light می باشد ، چون نور همه سویه به همه ی اطراف نور پخش می کند و چرخش آن تاثیری بر محیط نخواهد داشت . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Point Light 2,0,0,500
Sync
Loop
 
دستور FOG ON
این دستور باعث ایجاد مه در صحنه می شود .
 
دستور FOG COLOR
با این دستور رنگ مه ایجاد شده در صحنه را مشخص می کنیم .
 
دستور FOG DISTANCE
این دستور میزان دید دوربین را در مه مشخص می کند ، که کمترین دید دوربین حالتی است که در آن ،Fog Distance  برابر صفر است ، که هیچ چیز جز مه دیده نمی شود و بیشترین دید دوربین حالتی است که در آن Fog Distance برابر 5000 باشد ، که همه چیز دیده می شود و مه تاثیر بسیار کمی دارد . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
fog on
fog distance 3500
(fog color rgb(128,128,255
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
دستور FOG OFF
این دستور باعث حذف مه از صحنه می شود .


چهار شنبه 11 ارديبهشت 1392برچسب:, :: 1:39 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای پخش فیلم با فرمت هایی چون AVI ، MPEG ، Quick Time ، WAV ، AIFF ، AU یا SND می باشد . همچنین می توانیم انیمیشن مورد نظرمان را بر روی اشیاء سه بعدی نمایش دهیم .

 
دستور LOAD ANIMATION
این دستور انیمیشنی را بر روی حافظه فراخوانی می کند . مانند دستورالعمل زیر :
 
LOAD ANIMATION Filename,AnimationNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل حاوی انیمیشن و به جای AnimationNumber شماره ای بین یک تا 32 به انیمیشن فراخوانده شده اختصاص می دهیم ، تا آن را کنترل کنیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
Wait Key
 
در این مثال انیمیشنی با شماره ی 1 به روی حافظه خوانده شد .
 
دستور DELETE ANIMATION
این دستور انیمیشن فراخوانده شده به حافظه را حذف می کند . مانند دستورالعمل زیر :
 
DELETE ANIMATION AnimationNumber
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیش فراخوانده شده را قرار می دهیم تا حذف شود . ( تنها از روی حافظه ی RAM حذف میشود . فایل بر روی HARD باقی خواهد ماند ) مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
DELETE ANIMATION 1
 
تابع ANIMATION EXIST
این تابع بررسی می کند که آیا انیمیشن مورد نظر بر روی حافظه فراخوانی شده یا نه . اگر انیمیشن مورد نظر بر روی حافظه موجود باشد ، تابع ()Animation Exist عدد یک و اگر موجود نباشد عدد صفر برگردانده خواهد شد . مانند دستورالعمل زیر :
 
(var = ANIMATION EXIST(AnimationNumber
 
طبق این دستورالعمل اگر انیمیشن مورد نظر با شماره ی AnimationNumber بر روی حافظه فراخوانی شده باشد ، تابع ()ANIMATION EXIST عدد یک را در متغیر var ذخیره خواهد کرد و اگر فراخوانی نشده باشد ، عدد صفر در متغیر var ذخیره خواهد شد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
"If ANIMATION EXIST(1)=1 Then Print "Animation 1 Exist
"If ANIMATION EXIST(1)=0 Then Print "Animation 1 Not Exist
(Var= ANIMATION EXIST(2
"If Var=1 Then Print "Animation 2 Exist
"If Var=0 Then Print "Animation 2 Not Exist
Wait Key
 
در این مثال چون انیمیشن با شماره ی 1 وجود داشت ، عبارت Animation 1 Exist چاپ و چون انیمیشنی با شماره ی 2 وجود نداشت عبارت Animation 2 Not Exist چاپ شد .
 
دستور PLAY ANIMATION
این دستور انیمیشن خوانده شده بر روی حافظه را بر روی صفحه ی نمایش یا بر روی Bitmap ( برای آشنایی با Bitmap به فصل نهم رجوع کنید ) نمایش خواهد داد . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن فراخوانده شده بر روی حافظه را قرار می دهیم تا پخش شود . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT KEY
 
در این مثال انیمیشنی با شماره ی 3 فراخوانی و بر روی صفحه ی نمایش پخش خواهد شد . با اضافه کردن دو عدد دیگر به ادامه ی این دستورالعمل ، می توانیم فاصله کادر نمایش انیمیشن از بالا و چپ صفحه نمایش را تنظیم کنیم . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber,X,Y
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن مورد نظر و به جای X فاصله ی کادر نمایش انیمیشن تا سمت چپ صفحه نمایشگر و به جای Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT 5000
PLAY ANIMATION 3,200,100
Wait Key
 
در این مثال انیمیشنی با شماره ی 3 فراخوانی و بر روی صفحه ی نمایش پخش می شود . و بعد از 5 ثانیه دوباره به فاصله ی 200 و 100 از چپ و بالای صفحه ی نمایشگر دوباره پخش خواهد شد . با اضافه کردن دو عدد دیگر به این دستورالعمل ، می توانیم طول و ارتفاع کادر نمایش انیمیشن را هم تنظیم کنیم . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber,X,Y,WIDTH,HEIGHT
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن فراخوانده شده بر روی حافظه و به جای X فاصله ی کادر نمایش انیمیشن تا سمت چپ صفحه نمایشگر و به جای Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر و به جای WIDTH طول کادر نمایش انیمیشن و به جای HEIGHT ارتفاع کادر نمایش انیمیشن را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT 5000
PLAY ANIMATION 3,200,100
Wait 5000
()PLAY ANIMATION 3,0,0,SCREEN WIDTH(),SCREEN HEIGHT
Wait Key
 
در این مثال انیمیشن شماره 3 سه بار پخش خواهد شد و در سومن بار تمام صفحه نمایش را دربر خواهد گرفت .
 
تابع ANIMATION PLAYING
این تابع بررسی می کند ، که آیا انیمیشن مورد نظرمان ( که بر روی حافظه فراخوانده شده ) در حال پخش است یا خیر . اگر در حال پخش باشد . تابع ()Animation Playing عدد یک و اگر در حال پخش نباشد ( مثلا متوقف شده باشد ) ، عدد صفر را برمی گرداند . مانند دستورالعمل زیر :
 
(Var = ANIMATION PLAYING(AnimationNumber
 
طبق این دستورالعمل اگر انیمیشن فراخوانده شده به حافظه با شماره ی AnimationNumber در حال پخش باشد تابع ()ANIMATION PLAYING مقدار یک و اگر در حال پخش نباشد ، عدد صفر را در متغیر Var ذخیره خواهد کرد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
Sync On : Sync Rate 30
Do
(Select Animation Playing(3
   Case 1
            "Text 10,10,"Animation 3 Playing
      EndCase
      Case 0
            "Text 10,10,"Animation 3 No Playing
      EndCase
EndSelect
Sync
Loop
 
تابع ANIMATION POSITION X و تابع ANIMATION POSITION Y
تابع ANIMATION POSITION X فاصله ی کادر نمایش انیمشن از چپ صفحه ی نمایشگر و تا بع ANIMATION POSITION Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر را برمی گردانند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3,200,100
" = Text 10,400,"Animation Position X
((Text 120,400,Str$(Animation Position X(3
" = Text 10,415,"Animation Position Y
((Text 120,415,Str$(Animation Position Y(3
Wait Key
 
دستور LOOP ANIMATION
این دستور انیمیشن فراخوانده شده به حافظه را دائما از اول تا آخر ، پخش خواهد کرد . یعنی تا زمانی که دستور توقف داده نشده باشد ، پخش آن بطور متوالی تا ابد ادامه خواهد داشت . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
LOOP ANIMATION 3
Wait Key
 
تابع ANIMATION LOOPING
این تابع بررسی می کند که آیا انیمیشن مورد نظر بصورت دائمی در حال پخش است یا خیر .
یعنی آیا از دستور Loop Animation برای پخش انیمیشن استفاده شده یا نه . اگر بصورت دائما پخش باشد ، تابع ()ANIMATION LOOPING مقدار یک و اگر دائما پخش نباشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
LOOP ANIMATION 3
((Text 300,300,Str$(Animation Looping(3
Wait Key
 
دستور PAUSE ANIMATION
این دستور انیمیش در حال پخش ( توسط دستور PLAY ANIMATION یا LOOP ANIMATION ) را موقتا متوق می کند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play ANIMATION 4
Wait 2000
Pause Animation 4
Wait Key
 
تابع ANIMATION PAUSED
این تابع بررسی می کند که آیا انیمیشن مورد نظر با دستور Pause Animation متوقف شده یا نه . اگر متوق شده باشد تابع ()Animation Paused مقدار یک و اگر متوق نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",2
Play ANIMATION 2
"If Animation Paused(2)=1 Then Text 10,450,"Animation Paused
Wait 2000
Pause Animation 2
If Animation Paused(2)=1
   Cls
   "Text 10,450,"Animation Paused
EndIf
Wait Key
 
دستور RESUME ANIMATION
اگر انیمیشن قبلا توسط دستور PAUSE ANIMATION متوفق شده باشد . می توانیم با این دستور پخش آن را از همان فریم متوفق شده دوباره شروع کنیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Loop ANIMATION 4
Do
If Inkey$()="P" Or Inkey$()="p" Then Pause ANIMATION 4
If Returnkey()=1 Then Resume ANIMATION 4
Loop
 
با اجرای این مثال با زدن دکمه ی P انیمیشن شماره 4 موقتا متوقف می شود ، و با زدن دکمه ی Enter پخش آن از همان زمان توقف ( همان فریمی که بر روی آن توقف شده بود ) ، پخش خواهد شد .
 
دستور STOP ANIMATION
این دستور انیمیش در حال پخش را متوفق خواهد کرد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play ANIMATION 4
Wait 2000
Stop ANIMATION 4
Wait Key
 
دستور SET ANIMATION SPEED
با این دستور سرعت پخش انیمیشن را تنظیم می کنیم . مانند دستورالعمل زیر :
 
SET ANIMATION SPEED AnimationNumber,Speed
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیشن مورد نظر و به جای Speed سرعت پخش انیمیشن را بصورت عددی بین صفر تا 100 که صفر کمترین سرعت و 100 بالا ترین سرعت پخش انیمیشن می باشد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play Animation 4
Set Animation Speed 4,50
Wait 2000
Set Animation Speed 4,100
Wait Key
 
با اجرای این مثال دو ثانیه از پخش انیمیشن با نصف سرعت ( 50 از 100 ) و بقیه ی انیمیشن با سرعت عادی پخش خواهد شد .
 
تابع ANIMATION WIDTH و تابع ANIMATION HEIGHT
تابع ()ANIMATION WIDTH طول انیمیشن و تابع ()ANIMATION HEIGHT ارتفاع انیمیشن را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",7
(Print "Animation Width = "; Animation Width(7
(Print "Animation Height = "; Animation Height(7
Wait Key
 
با اجرای این مثال طول و ارتفاع انیمیشن شماره ی 7 چاپ خواهد شد .
 
دستور PLAY ANIMATION TO IMAGE
با این دستور انیمیشن مورد نظر را بر روی شیئی از نوع Image پخش می کنیم . سپس Image مورد نظر را بر روی اشیاء سه بعدی می چسبانیم . با این کار انیمیشن مورد نظرمان بر روی اشیاء سه بعدی پخش خواهد شد . مانند دستورالعمل زیر :
 
PLAY ANIMATION TO IMAGE AnimationNumber,Image,Left,Top,Right,Bottom
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیشن مورد نظر بین 1 تا 32 و به جای Image شماره ی تصویر بین 1 تا 32 به جای Left فاصله ی انیمیشن تا سمت چپ تصویر و به جای Top فاصله ی انیمیشن تا بالای تصویر و به جای Right فاصله ی انیمیشن تا سمت راست تصویر و به جای Bottom فاصله ی انیمیشن تا پائین تصویر را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",7
Sync On:Sync Rate 30
Make Object Box 4,200,120,100 : Position Object 4,-150,0,0
Make Object Sphere 5,200 : Position Object 5,100,0,0
(Play Animation To Image 7,1,0,0,Animation Width(7),Animation Height(7
Loop Animation 7
Texture Object 4,1 : Texture Object 5,1
Position Camera -100,100,-600:Point Camera 0,0,0
Do:For I=1 To 369:YRotate Object 4,I
Sync:Next I:Loop
 
در این مثال تصویری با شماره ی 1 بطور خودکار ایجاد شد .
 


دو شنبه 9 ارديبهشت 1392برچسب:, :: 1:8 ::  نويسنده : ابوالفضل

این دسته از دستورات وظیفه ی کنترل برخورد اشاء سه بعدی با یکدیگر را دارند . یعنی با بکارگیری این دستورات می توانیم کنترل کنیم که هنگام برخورد هر شیء با شیء دیگر ، چه کاری انجام شود . برای مثال دستورات زیر را اجرا می کنیم .

 
sync on : sync rate 120 : hide mouse : color
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\fur.Bmp",2
make object box 1,400,10,400 : position object 1,0,-5,0
make object box 2,400,100,10 : position object 2,0,50,-200
make object box 3,400,100,10 : position object 3,0,50,200
make object box 4,10,100,400 : position object 4,-200,50,0
make object box 5,10,100,400 : position object 5, 200,50,0
Adam=6
make Object box Adam,10,10,10 : position object Adam,50,20,50
for t=1 to 5
 texture object t,1
next t
 texture object Adam,2
Do
if upkey()=1 Then move object Adam,2
if downkey()=1 Then move object Adam,-2
if leftkey()=1
   (yrotate object Adam,WrapValue(object angle y(Adam)-2
EndIf
if rightkey()=1
   (yrotate object Adam,WrapValue(object angle y(Adam)+2
EndIf
(xCm#=object position x(Adam):yCm#=object position y(Adam
(zCm#=object position z(Adam):aCm#=object Angle y(Adam
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Sync
Loop
 
در این مثال با استفاده از چند جعبه ، فضایی ایجاد کردیم . با زدن دکمه های جهت بالا ، جهت پائین ، جهت راست و جهت پائین جعبه ی کوچک به جلو ، عقب ، راست و چپ حرکت خواهد کرد . ولی زمانی که به موانع برخورد می کند از آنها عبور می کند . اگر بخواهیم موانع را واقعی جلوه دهیم ( مثل دیوار سخت شوند تا نتوانیم از آن عبور کنیم ) باید برای هر شیء ( چه دیوار و چه شیء شخصیت محرک ) فضای برخورد تعریف کنیم . مانند دستور زیر :
 
دستور MAKE OBJECT COLLISION BOX
 
MAKE OBJECT COLLISION BOX ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,CollisionFlag
 
طبق این دستورالعمل به جای ObjectNumber نام شییء سه بعدی و به جای (X1 و Y1 و Z1 ) و (X2 و Y2 و Z2 ) مختصات دو نقطه نسبت به مرکز شیء سه بعدی را قرار می دهیم و به جای CollisionFlag عدد صفر یا یک را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 70 ,10,10,10
Make Object Collision Box 70,-5,-5,-5,5,5,5,1
Wait Key
 
در این مثال ابتدا یک جعبه با شماره ی 70 ایجاد کردیم و در خط بعدی با استفاده از دستور Make Object Collision Box مختصات دو نقطه نسب به مرکز شیء یعنی ، نقطه ی اول با مختصات X1=-5 ( فاصله ی نقطه ی اول تا محور X شیء سه بعدی ) و Y1=-5 ( فاصله ی نقطه ی اول تا محور Y شیء سه بعدی ) و Z1=-5 ( فاصله ی نقطه ی اول تا محور Z شیء سه بعدی ) ، و نقطه ی دوم با مختصات X2=5 ( فاصله ی نقطه ی دوم تا محور X شیء سه بعدی ) و Y2=5 ( فاصله ی نقطه ی دوم تا محور Y شیء سه بعدی ) و Z2=5 ( فاصله ی نقطه ی دوم تا محور Z شیء سه بعدی ) را قرار می دهیم . این دستور این دو نقطه را بعنوان ابتدا و انتهای قطر یک مستطیل در فضای  شیء سه بعدی در نظر گرفته و فضای برخوردی به شکل جعبه ی سه بعدی در شیء سه بعدی ایجاد می کند و در عین حال این فضا را به شیء می چسباند . اگر به جای CollisionFlag عدد یک را قرار دهیم ، موقع دوران شیء سه بعدی فضای برخورد ایجاد شده هم چرخش خواهد کرد . در هر حالت با حرکت شیء سه بعدی فضای برخورد هم همراه با شیء حرکت خواهد کرد .
 
برای فهم بهتر فضای برخورد به شکل زیر دقت کنید .
 
 
همانطور که در شکل می بینید ، هر شیء خود نیز دارای محور X و Y و Z می باشد . می توانیم نقاطی را نسبت به شیء تصور کنیم . دستور Make Object Collision Box دو نقطه در شیء ایجاد می کند . مانند شکل زیر :
 
 
مختصات X و Y و Z دونقطه نسبت به مختصات شیء سه بعدی است . یعنی مختصات نقطه های فرضی ارتباط مستقیمی با مختصات فضای بازی ندارد . دستور فوق نقاط را ابتدا و انتهای قطر یک جعبه فرض می کند و جعبه ی فرضی را بعنوان فضای برخورد شیء سه بعدی در همان شیء ایجاد می کند . مانند شکل زیر :
 
 
در مثال بالا جعبه ی کوچک بعنوان فضای برخورد جعبه ی بزرگ می باشد .
 
دستور DELETE OBJECT COLLISION BOX
با این دستور می توان فضای برخورد شیء سه بعدی را حذف کرد . مانند مثال زیر :
 
Make Object Box 70 ,50,10,30
Make Object Collision Box 70 ,-25,-5,-15,25,5,15,1
Delete Object Collision Box 70
Wait Key
 
تابع OBJECT COLLISION
این تابع به بررسی برخورد همراه با فررفتگی دو شیء سه بعدی می پردازد . اگر دو شیء با هم برخورد همراه با فرو رفتگی داشته باشند ، تابع مقدار یک و اگر برخورد همراه با فرورفتگی در هم نداشته باشند ، عدد صفر را برمی گرداند . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object Collision(16,20)=1 Then Text 10,10,"Collision
   Sync
Next MyAngle
Loop
 
با اجرای این مثال زمانی که کره با جعبه برخورد همراه با فرورفتگی داشته باشد ، تابع مقدار یک را برمی گرداند و عبارت Collision چاپ خواهد شد .
 
تابع OBJECT HIT
این تابع تنها به بررسی برخورد دو شیء سه بعدی با یکدیگر خواهد پرداخت . اگر دو شیء با هم برخورد داشته باشند ، تابع مقدار یک و اگر برخورد نداشته باشند ، عدد صفر برگردانده می شود . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object HIT(16,20)=1 Then Text 10,10,"Hit
   Sync
Next MyAngle
Loop
 
با اجرای این مثال زمانی که کره با جعبه برخورد می کند ، تابع مقدار یک را برمی گرداند و عبارت Hit چاپ خواهد شد .
 
دستور SET OBJECT COLLISION OFF و دستور SET OBJECT COLLISION ON
دستور SET OBJECT COLLISION OFF فضای برخورد شیء سه بعدی را غیرفعال
و دستور SET OBJECT COLLISION ON فضای برخورد شیء سه بعدی را دوباره فعال می کند . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object Collision(16,20)=1 Then Text 10,10,"Collision
   "If Inkey$()="F" Or Inkey$()="f
   Set Object Collision Off 20
EndIf
   "If Inkey$()="N" Or Inkey$()="n
   Set Object Collision On 20
EndIf
   Sync
Next MyAngle
Loop
 
با اجرای این مثال با زدن دکمه ی F فضای برخورد کره غیرفعال شده و عبارت Collision چاپ نخواهد شد و اگر دکمه ی N را بزنیم فضای برخورد شیء کره فعال شده و موقع برخورد کره با جعبه ، عبارت Collision چاپ خواهد شد .
 
تابع GET OBJECT COLLISION X و تابع GET OBJECT COLLISION Y و
تابع GET OBJECT COLLISION Z
تابع ()GET OBJECT COLLISION X مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور X ها و تابع ()GET OBJECT COLLISION Y مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Y ها  و تابع ()GET OBJECT COLLISION Z مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Z ها را برمی گرداند . یعنی هر بار این توابع خوانده شود ، مقدار حرکتی که شیء ( سه بعدی ) با برخورد با شیء دیگر داشته را برمی گرداند . مانند مثال زیر :
 
Make Object Box 200,10,10,10 : Position Object 200,0,0,0
Make Object Collision Box 200,-5,-5,-5,5,5,5,1
(Make Object Sphere 1,10 : Color Object 1,Rgb(255,0,0
(Make Object Sphere 2,10 : Color Object 2,Rgb(0,255,0
(Make Object Sphere 3,10 : Color Object 3,Rgb(0,0,255
Make Object Collision Box 1,-5,-5,-5,5,5,5,1
Make Object Collision Box 2,-5,-5,-5,5,5,5,1
Make Object Collision Box 3,-5,-5,-5,5,5,5,1
Position Camera -10,10,-60 : Point Camera 0,0,0
Sync On : Sync Rate 30
Do
For MyAngle# = 0 To 359 Step 0.5
   Position Object 1 , Sin(WrapValue(MyAngle#))*30,0,0
   If Object Collision(1,200)=1
   "Text 10,10,"Collision Red Sphere
   (()Text 10,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 10,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 10,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Position Object 2 , 0,Sin(WrapValue(MyAngle#+45))*30,0
   If Object Collision(2,200)=1
"Text 210,10,"Collision Green Sphere
   (()Text 210,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 210,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 210,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Position Object 3 , 0,0,Sin(WrapValue(MyAngle#+90))*30
   If Object Collision(3,200)=1
"Text 410,10,"Collision Blue Sphere
   (()Text 410,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 410,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 410,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Sync
Next MyAngle
Loop
 
نکته : با توجه به مثال بالا برای استفاده از این توابع ، باید حتما برای هر برخورد یک IF تعریف کنیم ، تا مقدار برگشتی تابع مطابق با شرط مورد نظرمان باشد .
 
دستور SET OBJECT COLLISION TO SPHERES
این دستور فضای برخوردی به شکل کره در اطراف شیء ایجاد می کند . مانند دستورالعمل زیر :
 
SET OBJECT COLLISION TO SPHERES ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100
SET OBJECT COLLISION TO SPHERES 10
Do
Loop
 
دستور AUTOMATIC OBJECT COLLISION
این دستور فضایی با شعاع مشخص به دور شیء سه بعدی ایجاد می کند . مانند دستورالعمل زیر :
 
AUTOMATIC OBJECT COLLISION ObjectNumber,Radius,Response
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Radius شعاع برخورد دور شیء را قرار می دهیم . اگر Response صفر باشد ، وقتی شیء به مانع متحرک برخورد کرد ، خودش به کنار کشیده میشود و اگر به مانع ثابت برخورد کرد ، نمی تواند از آن مانع عبور کند ( موانعی مثل دیوار یا تانک ) ، یا آن را کنار بزند . ولی اگر Response برابر یک باشد ، زمانی که به مانع برخورد می کند ، یا از داخل آن عبور می کند و اگر مانع متحرک باشد ( خود مانع از دستور بالا استفاده کرده باشد ) ، مانع را کنار خواهد زد . مانند مثال زیر :
 
imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
   Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,0
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle# = 0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop
 
در این مثال زمانی که مکعب قرمز به موانع متحرک و یا ثابت برخورد می کند ( با کنترل ما توسط دکمه های جهت ) ، خود مکعب قرمز به کنار می رود . چون طبق دستورالعمل Response برابر صفر است . ولی در مثال زیر Response برابر یک شده ؛ خواهد دید موانع مقاومتی در برابر مکعب قرمز نخواهند داشت .
 
 imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
   Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,1
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle#=0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop


جمعه 6 ارديبهشت 1392برچسب:, :: 1:23 ::  نويسنده : ابوالفضل

 دستور TURN CAMERA LEFT و دستور TURN CAMERA RIGHT

دستور TURN CAMERA LEFT دوربین پیش فرض را حول محور Y خود ، به سمت چپ و دستورTURN CAMERA RIGHT دوربین پیش فرض را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
TURN CAMERA LEFT AngleValue
TURN CAMERA RIGHT AngleValue
 
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Turn Camera Left 1
   If RightKey()=1 Then Turn Camera Right 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست گردش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور Y خود به سمت چپ و راست ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If LeftKey()=1 Then Turn Camera Left 2,1
   If RightKey()=1 Then Turn Camera Right 2,1
Loop
 
دستور TURN OBJECT LEFT و دستور TURN OBJECT RIGHT
دستور TURN OBJECT LEFT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت چپ
و دستور TURN OBJECT RIGHT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
TURN OBJECT LEFT ObjectNumber,Value
TURN OBJECT RIGHT ObjectNumber,Value
 
طبق این دستورالعمل ها به جای ObjectNumber نام شیء و به جای Value مقدار چرخش شیء را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Turn Object Left 20,1
   If RightKey()=1 Then Turn Object Right 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، جعبه به چپ و اگر دکمه ی جهت راست را فشار دهیم ، جعبه به راست گردش خواهد کرد .
 
دستور PITCH CAMERA UP و دستور PITCH CAMERA Down
دستور PITCH CAMERA UP دوربین پیش فرض را حول محور X خود ، به سمت بالا و دستورPITCH CAMERA DOWN دوربین پیش فرض را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
 
PITCH CAMERA UP AngleValue
PITCH CAMERA DOWN AngleValue
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Pitch Camera Up 1
   If DownKey()=1 Then Pitch Camera Down 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، دوربین پیش فرض به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، دوربین پیش فرض به پائین گردش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If UpKey()=1 Then Pitch Camera Up 2,1
   If DownKey()=1 Then Pitch Camera Down 2,1
Loop
 
دستور PITCH OBJECT UP و دستور PITCH OBJECT DOWN
دستور PITCH OBJECT UP شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت بالا و دستورPITCH OBJECT DOWN شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
 
PITCH OBJECT UP Value
PITCH OBJECT DOWN Value
 
 
طبق این دستورالعمل ها به جای Value مقدار چرخش شیء ، را با یک عدد مشخص می کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Pitch Object Up 20,1
   If DownKey()=1 Then Pitch Object Down 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، شیء به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، شیء به پائین گردش خواهد کرد .
 
دستور ROLL CAMERA LEFT و دستور ROLL CAMERA RIGHT
دستور ROLL CAMERA LEFT دوربین پیش فرض را حول محور Z خود ، به سمت چپ و دستورROLL CAMERA RIGHT دوربین پیش فرض را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
ROOL CAMERA LEFT AngleValue
ROOL CAMERA RIGHT AngleValue
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Roll Camera Left 1
   If RightKey()=1 Then Roll Camera Right 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست چرخش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If LeftKey()=1 Then Roll Camera Left 2,1
   If RightKey()=1 Then Roll Camera Right 2,1
Loop
 
دستور ROLL OBJECT LEFT و دستور ROLL OBJECT RIGHT
دستور ROLL OBJECT LEFT شیء را حول محور Z خود ، به سمت چپ و دستورROLL OBJECT RIGHT شیء را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
ROOL OBJECT LEFT ObjectNumber,Value
ROOL OBJECT RIGHT ObjectNumber,Value
 
طبق این دستورالعمل ها به جای ObjectNumber شماره ی شیء سه بعدی و به جای Value مقدار چرخش شیء ، را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Roll Object Left 20,1
   If RightKey()=1 Then Roll Object Right 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، شیء به چپ و اگر دکمه ی جهت راست را فشار دهیم ، شیء به راست چرخش خواهد کرد .
 
دستور CONTROL CAMERA USING ARROWKEYS
این دستور کنترل حرکت دوربین را به دکمه های جهت بالا و پایین و چپ و راست می سپارد . مانند دستورالعمل زیر :
 
CONTROL CAMERA USING ARROWKEYS CameraNumber,MoveSpeed,TurnSpeed
 
طبق این دستورالعمل به جای CameraNumber شماره ی دوربین و به جای MoveSpeed سرعت حرکت دوربین به جلو و عقب و به جای TurnSpeed سرعت چرخش دوربین به راست و چپ را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 1 : Rotate Camera 1,0,0,0 : Set Current Camera 1
Do
CONTROL CAMERA USING ARROWKEYS 1,1,1
Loop
 
اگر بخواهیم دوربین پیش فرض را با دستورالعمل بالا تحت کنترل درآوریم ، به جای CameraNumber عدد صفر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
CONTROL CAMERA USING ARROWKEYS 0,0.5,0.1
Loop
 
دستور SET CAMERA RANGE
با این دستور می توانیم شعاعی را که دوربین پیش فرض تا آن مسافت ، اشیاء را نمایش می دهد ، از نو تنظیم کنیم . مانند دستورالعمل زیر :
 
SET CAMERA RANGE NearValue,FarValue
 
طبق این دستورالعمل ، دوربین پیش فرض ، اشیاء موجود بین فاصله ی NearValue تا FarValue از خود را نشان خواهد داد . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
FarValue = 75
NearValue = 10
Do
If UpKey() Then Inc FarValue
If DownKey() Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE NearValue,FarValue
Loop
 
با اجرای این مثال با زدن دکمه های جهت بالا و پائین ، مسافت نمایش داده شده در دوربین پیش فرض تغییر خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم مسافت نمایش داده شده توسط دوربین جدید را نیز از نو تنظیم کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
FarValue = 75
NearValue = 10
Do
If UpKey()=1 Then Inc FarValue
If DownKey()=1 Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE 2,NearValue,FarValue
Loop
 
دستور SET CAMERA TO FOLLOW
با این دستور ، دوربین پیش فرض بطور خودکار به دنبال نقطه ی مورد نظر خواهد رفت . همانند دستورالعمل زیر :
 
SET CAMERA TO FOLLOW X,Y,Z,Angle,Distance,Height,Smooth,Collision
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ی مورد نظر و به جای Angle زاویه ی دوربین نسبت به نقطه حول محور Y آن نقطه و به جای Distance فاصله ی دوربین تا نقطه و به جای Height ارتفاع دوربین تا نقطه و به جای Smooth شدت حرکت دوربین به سمت نقطه و به جای Collision رفتار دوربین نسبت به برخورد با اجسام سخت را قرار می دهیم ( 0 یا 1 ) . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCam#=object position x(2):yCam#=object position y(2
(zCam#=object position z(2):aCam#=object Angle y(2
hCam#=30:dCam#=50:sCam#=60
SET CAMERA TO FOLLOW xCam#,yCam#,zCam#,aCam#,dCam#,hCam#,sCam#,0
if upkey()=1 Then move object 2,1
if downkey()=1
   move object 2,-1
EndIf
if leftkey()=1
   (yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
 
با اجرای این مثال شیء جعبه توسط دکمه های جهت بالا ، جهت پائین ، جهت چپ و جهت راست حرکت خواهد کرد . و دوربین پیش فرض به دنبال شیء حرکت می کند . با این کار نیازی به تعیین موقعیت مکانی دوربین نمی باشد . چون این دستور بطور خودکار این کار را انجام می دهد .
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را هم به دنبال شیء مورد نظر حرکت دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Camera 4 : Set Current Camera 4
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCm#=object position x(2):yCm#=object position y(2
(zCm#=object position z(2):aCm#=object Angle y(2
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW 4,xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
if upkey()=1 Then move object 2,1
if downkey()=1 Then move object 2,-1
if leftkey()=1
   (yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
   (yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
 
دستور GHOST OBJECT ON
این دستور شیء سه بعدی را نیمه شفاف می کند . مانند دستورالعمل زیر :
 
GHOST OBJECT ON ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
Sync
Next MyAngle
Loop
 
دستور GHOST OBJECT OFF
اگر با استفاده از دستور قبل ( GHOST OBJECT ON ) شیء سه بعدی شفاف شده باشد ، با این دستور شیء سه بعدی به حالت اولش برمی گردد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15) , Object Position Y(15) , Object Position Z(15
Sync
If Inkey$()="f" Or Inkey$()="F" Then Ghost Object Off 15
If Inkey$()="n" Or Inkey$()="N" Then Ghost Object On 15
Next MyAngle
Loop
 
با اجرای این مثال با زدن دکمه ی N شیء به حالت نیمه شفاف و با زدن دکمه ی F شیء به حالت عادی برمی گردد.
 


دو شنبه 2 ارديبهشت 1392برچسب:, :: 2:40 ::  نويسنده : ابوالفضل
2- اشیاء پیچیده :
اشیاء پیچده به اشیائی گفته می شود که از چندین شیء مختلف تشکیل شده اند و هر قسمت آن رنگ و بافت خاصی را دارد . و هر قسمت می تواند نسبت به قسمت دیگر بصورت لولایی حرکت داشته باشد . مثلا هلیکوپتر ، ماشین ، آدم ، درخت ، کوه و ... دارای اجزاء مختلفی هستند که برای مثال آرنج یک انسان می تواند نسبت به بازویش چرخش داشته باشد . اشیاء پیچیده در دارک بیسیک توسط نرم افزار های مختلفی ایجاد می شوند و بصورت فایل نگهداری می شوند و برای استفاده باید آنها را از روی Hard صدا کنیم . از مهم ترین فرمت های اشیاء در دارک بیسیک می توان به DBO و X اشاره کرد . اشیاء با فرمت DBO جزء اشیاء استاندارد نرم افزار DarkBASIC محسوب می شوند . و به راحتی و با سرعت زیاد می توان آنها را از روی Hard صدا زد ( از روی فایل خواند ) . شیء بافرمت X نیز استاندارد موتور Direct X می باشد . اشیاء پیچیده به غیر از شکل و رنگ توانایی حرکت را هم دارند ؛ یعنی فریم هایی در این اشیاء وجود دارد که می توانیم با فرامینی مختف شیء را به حرکت درآوریم . بسته هایی به نام DarkMatter هم توسط این شرکت در سایت WWW.DarkBasicPro.Com معرفی شده که فرمتشان DBO و بسته هایی نیز در سایت وابسته به همین شرکت یعنی در سایت WWW.FpsCreator.Com شامل اشیاء سه بعدی با فرمت X قابل تهیه می باشد .
 
دستور LOAD OBJECT
با این دستور می توانیم یک شیء را از روی فایل صدا بزنیم . مانند مثال زیر :
 
LOAD OBJECT Filename,ObjectNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل و به جای ObjectNumber عددی طبیعی برای نام شیء قرار می دهیم تا بر روی شیء کنترل داشته باشیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
wait Key
 
در این مثال شیء ای با شکل آدمک نشان داده می شود . ولی چون شیء بصورت خوابیده طراحی شده از دستور XRotate استفاده می کنیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
نکته : تمامی فرامینی که به اشیاء ساده ی سه بعدی نسبت داده می شدند ، بر روی اشیاء پیچیده ی سه بعدی هم کاربرد دارد .
 
نکته : هر فایل شیء سه بعدی با فرمت X در کنار خود فایلی دارد که بافت و رنگ آن شیء را مشخص می کند که باید همیشه در پوشه ای که شیء در آن است ، حضور داشته باشد .
 
نکته : اگر شیء در پوشه ای باشد که فایل اجرایی در آن پوشه اجرا می شود . میتوانیم به جای کد بالا بصورت زیر عمل کنیم .
 
 
Load Object "ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
در این مثال فرض بر این است که فایل شیء سه بعدی ما همراه با فایل گرافیکی اش در پوشه ی است که فایل اجرایی در آن وجود دارد و هم اکنون در حال اجراست .
 
دستور PLAY OBJECT
با این دستور می توانیم اشیاء پیچیده ی سه بعدی را که در آن فریم هایی برای حرکت قرار داده شده به حرکت در آوریم . مانند دستورالعمل زیر :
 
PLAY OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
XRotate Object 6,-90
PLAY OBJECT 6
wait Key
 
دستور SET OBJECT SPEED
با این دستور سرعت حرکت شیء پیچیده را تنظیم می کنیم . مانند دستورالعمل زیر :
 
SET OBJECT SPEED ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء پیچیده ی سه بعدی و به جای Speed سرعت حرکت را بصورت یک عدد قرار می دهیم . ولی هر شیئی با سرعت خاص خود طراحی شده که باید آن را توسط Speed تنظیم کنیم . البته تنظیم سرعت شیء یا Speed آن شیء نسبت به سرعت دستور Sync باید توسط ما تنظیم شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
PLAY OBJECT 6
Set Object Speed 6,12000
Do
Sync
Loop
 
بدلیل اینکه شیء آدمک ما با سرعت بسیار کمی طراحی شده به خاطر همین سرعت معمولی آن را 1200 قرار دادیم . با اجرای این مثال تمامی فرم های شیء آدمک نشان داده شدند . یعنی در شیء تعدادی از فریم ها مثلا فریم 1 تا 6000 حرکت راه رفتن و 6000 تا 12000 پریدن و ... می باشد .
 
تابع TOTAL OBJECT FRAMES
این تابع تعداد کل فریم های شیء را برمی گرداند . مانند دستورالعمل زیر :
 
(varInteger = TOTAL OBJECT FRAMES(ObjectNumber
 
این تابع تعداد کل فریم های شیء شماره ی ObjectNumber را در متغیر varInteger ذخیره می کند . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
(HeroFrame# = Total Object Frames(6
(#Text 10,10,Str$(HeroFrame
Wait Key
 
در این مثال تعداد کل فریم های شیء شماره ی 6 توسط تابع ()Total Object Frames در متغیر #HeroFrame ذخیره و بعد چاپ می شود .
 
با اضافه کردن شماره ی شروع فریم به دستور PLAY OBJECT می توانیم حرکت شیء پیچیده را از همان فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع شد . با اضافه کردن شماره ی شروع و پایان به دستور PLAY OBJECT می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 حرکت می کند .
 
دستور LOOP OBJECT
این دستور همانند دستور PLAY OBJECT می باشد . با این تفاوت که حرکت شیء از فریم شروع تا فریم پایانی دائما ادامه خواهد داشت . مانند دستورالعمل زیر :
 
LOOP OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
Sync
Loop
 
با اضافه کردن شماره ی شروع فریم به دستور LOOP OBJECT می توانیم حرکت شیء پیچیده را از آن فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع و تا فریم آخر دائما در حال حرکت خواهد بود . با اضافه کردن شماره ی شروع و پایان به دستور Loop Object می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی دائما حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 دائما حرکت خواهد داشت .

دستور STOP OBJECT
این دستور باعث توقف حرکت شیء سه بعدی می شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
If ReturnKey()=1 Then Stop Object 6
Loop
 
با اجرای این مثال با زدن دکمه ی Enter حرکت شیء سه بعدی متوقف خواهد شد .

تابع OBJECT SPEED
این تابع سرعت حرکت شیء پیچیده ی سه بعدی را که آخرین بار تنظیم شده باشد ، حساب می کند . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Speed(6
Sync
Loop
 
تابع OBJECT FRAME
این تابع شماره ی فریم جاری حرکت شیء پیچیده را برمی گرداند . یعنی مشخص می کند که هم اکنون حرکت شیء در چه فریمی می باشد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Frame(6
Sync
Loop
 
دستور SET OBJECT FRAME
با این دستور شماره ی شروع حرکت شیء را از نو تنظیم می کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
If ReturnKey()=1 Then Set Object Frame 6,6000
Sync
Loop
 
تابع OBJECT EXIST
این تابع بررسی می کند که آیا شیء سه بعدی ( ساده یا پیچیده ) با شماره مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
Make Object Sphere 2,20
Delete Object 2
Do
"If Object Exist(1) Then Text 10,10,"Box Is Exist
"If Object Exist(2) Then Text 10,25,"Sphere Is Exist
Loop
 
دستور HIDE OBJECT
این دستور باعث نامرعی شدن شیء سه بعدی ( ساده یا پیچیده ) می شود . مانند مثال زیر :
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait Key
 
دستور SHOW OBJECT
اگر شیئ سه بعدی ( ساده یا پیچیده ) توسط دستور قبلی ( Hide Object ) نامرعی شده باشد ، می توانیم توسط دستور Show Object دوباره آن را آشکار کنیم . مانند مثال زیر .
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait 2000
Show Object 1
Wait Key
 
تابع OBJECT VISIBLE
این تابع بررسی می کند که آیا شیء سه بعدی مورد نظر ( ساده یا پیچیده ) مرعی است یا نامرعی . اگر مرعی بود ، عدد یک و اگر نامرعی بود ، عدد صفر توسط تابع برمی گردد . مانند مثال زیر :
 
Sync On:Sync Rate 30
Make Object Box 1,10,20,30
Do
   Sync
   If InKey$()="h" Or InKey$()="H" Then Hide Object 1
   If InKey$()="S" Or InKey$()="s" Then Show Object 1
   If Object Visible(1)=1
      "Text 10,10,"Object Is Show
   Else
      "Text 10,10,"Object Is Hide
   EndIf
Loop
 
با اجرای این مثال با زدن دکمه ی H جعبه نامرعی و با زدن دکمه ی S جعبه مرعی می شود . و تابع ()Object Visible مرعی یا نامرعی بودن جعبه را بررسی و نتیجه را توسط دستور Text چاپ می کند .
 
دستور FIX OBJECT PIVOT
با این دستور ، شیء ثابت و محور های X و Y و Z شیء مورد نظر ، موازی محور های X و Y و Z مختصات فضای سه بعدی خواهند شد . یعنی محور X شیء ، موازی محور X فضای سه بعدی و محور Y شیء ، موازی محور Y فضای سه بعدی و محور Z شیء ، موازی محور Z فضای سه بعدی خواهد شد و نسب به شیء ثابت هم می ماند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
ZRotate Object 1,45
Fix Object Pivot 1
Do
      YRotate Object 1,Object Angle Y(1)+0.1
Loop
Wait Key
 
دستور MOVE OBJECT
این دستور شیء را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود شیء ) حرکت می دهد . مانند دستورالعمل زیر :
 
MOVE OBJECT ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber مقدار حرکت شیء سه بعدی ( ساده یا پیچیده ) و به جای Speed سرعت حرکت شیء را توسط یک عدد مشخص می کنیم . یعنی اگر Speed بزرگتر از صفر باشد ، شیء به همان مقدار به جلو و اگر Speed کوچک تر از صفر باشد ، شیء به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
xrotate object 6,-90
fix object pivot 6
Rotate Camera 0,0,0 : Set Object Speed 6,12000
Loop Object 6
Do
   If UpKey()=1 Then Move Object 6,10
   If DownKey()=1 Then Move Object 6,-10
   Sync
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . شیء شماره ی 6 به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم ، شیء شماره ی 6 به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .


دو شنبه 2 ارديبهشت 1392برچسب:, :: 2:33 ::  نويسنده : ابوالفضل

 دوربین : با اجرای مثال های بالا ، راجع به ایجاد اشیاء ساده  و پیچیده ی سه بعدی ، اشیاء توسط دوربین پیش فرض DarkBasic نمایش داده می شدند . یعنی ما از دریچه ی دوربین پیش فرض به اشیاء نگاه می کردیم . می توانیم به غیر از دوربین پیش فرض ، خود نیز دوربین های دیگری هم ایجاد کنیم و از دید هر یک از آنها به صحنه نگاه کنیم .

 
دستور MAKE CAMERA
با این دستور می توانیم دوربین جدید ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE CAMERA CameraNumber
 
طبق این دستورالعمل به جای CameraNumber عددی طبیعی در محدوده ی مثبت متغیر Integer قرار می دهیم . این عدد به معنای نام دوربین می باشد . توسط همین عدد در خطوط بعدی برنامه بر روی دوربین کنترل خواهیم باشیم . مانند مثال زیر :
 
Make Camera 1
 
در این مثال دوربین جدیدی با شماره ی 1 ایجاد شد .
 
دستور DELETE CAMERA
با این دستور دوربین جدید ایجاد شده را حذف می کنیم . مانند مثال زیر :
 
Make Camera 1
Make Camera 2
Delete Camera 1
Wait Key
 
تابع CAMERA EXIST
این تابع بررسی می کند که آیا دوربین مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Camera 1
Make Camera 2
Delete Camera 1
Do
cls
"If Camera Exist(1) Then Print "Camera 1 Exist" Else Print "Camera 1 Not Exist
"If Camera Exist(2) Then Print "Camera 2 Exist" Else Print "Camera 2 Not Exist
Loop
 
دستور Set Current Camera
با این دستور دوربین مورد نظرمان را فعال می کنیم . مانند مثال زیر :
 
Make Camera 13
Make Camera 7
Make Camera 6
Set Current Camera 7
 
در این مثال سه دوربین با شماره های 13 و 7 و 6 ایجاد شدند و در آخر از بین این سه دوربین ، دوربین شماره ی 7 فعال شد . یعنی با اجرای دستور Set Current Camera ، صحنه ( تمام اشیاء ) از دید دوربین شماره ی 7 نشان داده خواهد شد .
 
دستور POSITION CAMERA
با این دستور موقعیت مکانی دوربین پیش فرض را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION CAMERA X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید دوربین پیش فرض را در فضای سه بعدی ، قرار می دهیم . مانند مثال زیر :
 
Make Object Box 5,10,10,10
Wait 2000
Position Camera 0,10,-20
Wait Key
 
با اجرای این مثال بعد از 2 ثانیه دوربین پیش فرض به موقعت مکانی ( مختصات 20-Z=  و 10Y= و 0X= ) پرش خواهد کرد ( تغییر مکان خواهد داد ) . و جسم ، سر جایش بی حرکت می ماند .
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل ، می توانیم موقعت مکانی دوربین جدید را نیز در فضای سه بعدی مشخص کنیم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5
Position Camera 5,0,10,-20
Set Current Camera 5
Wait Key
 
در این مثال دوربین جدیدی با شماره ی 5 ایجاد شد و در خط سوم موقعت مکانی جدید آن در فضای سه بعدی مشخص شد و در خط  چهارم ، توسط دستور Set Current Camera دوربین جدید که شماره اش 5 بود فعال شد و صحنه هم اکنون از دید دوربین جدید ( دوربین شماره 5 ) نشان داده می شود .
 
تابع CAMERA POSITION X و تابع CAMERA POSITION Y و تابع CAMERA POSITION Z
تابع ()CAMERA POSITION X موقعیت X دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور X ها ) و تابع ()CAMERA POSITION Y موقعیت Y دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Y ها ) و تابع ()CAMERA POSITION Z موقعیت Z دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
 
Position Camera 0,10,-20
()Print Camera Position X
()Print Camera Position Y
()Print Camera Position Z
Wait Key
 
تا قرار دادن شماره ی دوربین های جدید بعنوان ورودی در سه تابع بالا ، می توانیم موقعت X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5 : Position Camera 5,50,100,-20
Do
(X = Camera Position X(5
(Y = Camera Position Y(5
(Z = Camera Position Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
 
دستور POSITION OBJECT
با این دستور موقعیت مکانی اشیاء سه بعدی را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION OBJECT ObjectNumber,X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 5,10,10,10
Make Object Sphere 6,15
Wait 2000
Position Object 6,10,20,10
Wait Key
 
با اجرای این مثال ابتدا یک جعبه با شماره ی 5 و یک کره با شماره ی 6 ایجاد شدند و بعد از 2 ثانیه شیء کره با شماره ی 6 هر جا که بود هم اکنون به موقعت مکانی ( مختصات 10=Z و 20=Y و 10=X ) پرش کرد ( تغییر مکان داد ) .
 
تابع Object POSITION X و تابع Object POSITION Y و تابع Object POSITION Z
تابع ()Object POSITION X موقعیت X شیء ( فاصله ی شیء تا محور X ها )
و تابع ()Object POSITION Y موقعیت Y شیء ( فاصله ی شیء تا محور Y ها )
و تابع ()Object POSITION Z موقعیت Z شیء ( فاصله ی شیء تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
 
Make Object Cylinder 10,20
Position Object 10,-45,0,29
Do
(X = Object Position X(10
(Y = Object Position Y(10
(Z = Object Position Z(10
(Text 10,10,Str$(X
(Text 10,25,Str$(Y
(Text 10,40,Str$(Z
Loop
 
دستور POINT CAMERA
با این دستور دوربین پیش فرض هر کجا که باشد ، از همان جا به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
 
POINT CAMERA X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای ( منظور از نقطه ، مکانی در فضا می باشد ) را در فضای سه بعدی مشخص می کنیم ، تا دوربین پیش فرض به آن مکان نگاه کند . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10 , 10 , Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
      Sync
Next MyAngle
Loop
 
با اجرای این مثال ، کره دائما در حال حرکت است و دوربین پیش فرض هم دائما به آن نگاه می کند . با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدیدمان را به این کره خیره کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Make Camera 7
Set Current Camera 7 : Position Camera 7,0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera 7,Object Position X(15),Object Position Y(15), Object Position Z(15
      Sync
Next MyAngle
Loop
دستور POINT OBJECT
با این دستور شیء مورد نظر هر کجا که باشد ، به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
 
POINT Object objectnumber,X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای را در فضای سه بعدی مشخص می کنیم تا شیء مورد نظر به آن نقطه نگاه کند ( یعنی محور Z شیء ، نقطه را هدف قرار دهد ) . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Object 20,Object Position X(15),Object Position Y(15), Object Position Z(15
      Sync
Next MyAngle
Loop
 
با اجرای این مثال شیء جعبه به کره ( مختصات X و Y و Z کره ) خیره خواهد شد .
 
دستور XROTATE CAMERA
این دستور دوربین پیش فرض را حول محور X خود دوربین ، دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
XROTATE CAMERA XAngle
 
طبق این دستورالعمل به جای XAngle زاویه دوربین حول محور X خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Camera Xangle
Sync
Next Xangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور X خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 17
Set Current Camera 17
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Camera 17,Xangle
Sync
Next Xangle
Loop
 
 
دستور YROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Y خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
YROTATE CAMERA YAngle
 
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود دوربین را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
      Yrotate Camera Yangle
Sync
Next Yangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Y خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 1
Set Current Camera 1
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 0 To 360 Step 5
   Yrotate Camera 1,Yangle
Sync
Next Yangle
Loop
 
دستور ZROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Z خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
ZROTATE CAMERA ZAngle
 
طبق این دستورالعمل به جای ZAngle زاویه دوربین حول محور Z خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Camera Zangle
Sync
Next Zangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Z خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 11
Set Current Camera 11
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Camera 11,Zangle
Sync
Next Zangle
Loop
 
در این سه مثال جعبه ثابت بود و تنها دوربین در حال چرخش بود .
 
دستور ROTATE CAMERA
اگر بخواهیم به جای استفاده از دستورات قبلی جهت چرخش دوربین حول محور X و Y و Z خود دوربین ، تنها با یک دستور ، دوربین پیش فرض را حول محور X ها و Y ها و Z همان دوربین می چرخانیم ، پس از دستورالعمل زیر استفاده می کنیم .
 
ROTATE CAMERA Xangle,Yangle,ZAngle
 
طبق این دستورالعمل به جای Xangle مقدار چرخش دوربین حول محور X همان دوربین ، به جای Yangle مقدار چرخش دوربین حول محور Y همان دوربین ، و به جای ZAngle ، مقدار چرخش دوربین حول محور Z همان دوربین پیش فرض را قرار می دهیم . مانند مثال زیر :
 
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 10,50,30
Wait Key
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محورهای X و Y و Z همان دوربین جدید ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 6 : Set Current Camera 6
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 6,10,50,30
Wait Key
 
دستور XROTATE Object
این دستور شیء را حول محور X همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
XROTATE OBJECT XAngle
 
طبق این دستورالعمل به جای XAngle زاویه شیء حول محور X خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Object 20,Xangle
Sync
Next Xangle
Loop
 
دستور YROTATE OBJECT
این دستور شیء را حول محور Y همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
YROTATE OBJECT YAngle
 
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
      Yrotate Object 20,Yangle
Sync
Next Yangle
Loop
 
دستور ZROTATE OBJECT
این دستور شیء را حول محور Z همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
ZROTATE OBJECT ZAngle
 
طبق این دستورالعمل به جای ZAngle زاویه شیء حول محور Z خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Object 20,Zangle
Sync
Next Zangle
Loop
 
شکل های زیر به ترتیب از سمت چپ به راست ، چرخش دوربین و یا اشیاء سه بعدی را حول محور های X و Y و Z خودشان نشان می دهد .
 
 
دستور ROTATE OBJECT
اگر بخواهیم به جای استفاده از دستورات بالا ، تنها با یک دستور ، شیء را حول محور X و Y و Z همان شیء بچرخانیم ، از دستورالعمل زیر استفاده می کنیم .
 
ROTATE OBJECT ObjectNumber,Xangle,Yangle,ZAngle
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Xangle مقدار چرخش شیء حول محور X خود شیء ، به جای Yangle مقدار چرخش شیء حول محور Y خود شیء ، و به جای ZAngle ، مقدار چرخش شیء حول محور Z همان شیء را قرار می دهیم . مانند مثال زیر :
 
Make Object box 22,40,40,40
Wait 2000
Rotate Object 22,10,50,30
Wait Key
 
تابع CAMERA ANGLE X و تابع CAMERA ANGLE Y و تابع CAMERA ANGLE Z
تابع ()CAMERA ANGLE X زاویه ی محور X دوربین پیش فرض و تابع ()CAMERA ANGLE Y زاویه ی محور Y دوربین پیش فرض و تابع ()CAMERA ANGLE Z زاویه ی محور Z دوربین پیش فرض را حول محورهای خود دوربین بدست می آورند . مانند مثال زیر :
 
Position Camera 0,10,-20
Rotate Camera 20,30,-10
()Print CAMERA ANGLE X
()Print CAMERA ANGLE Y
()Print CAMERA ANGLE Z
Wait Key
 
تا قرار دادن شماره ی دوربین جدید بعنوان ورودی سه تابع بالا ، می توانیم زاویه ی محور هی  X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5 : Rotate Camera 5,50,100,-20
Do
(X = CAMERA ANGLE X(5
(Y = CAMERA ANGLE Y(5
(Z = CAMERA ANGLE Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
 
تابع OBJECT ANGLE X و تابع OBJECT ANGLE Y و تابع OBJECT ANGLE Z
تابع ()OBJECT ANGLE X زاویه ی محور X شیء و تابع ()OBJECT ANGLE Y زاویه ی محور Y شیء و تابع ()OBJECT ANGLE Z زاویه ی محور Z شیء را بدست می آورند . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Rotate Object 15,30,-10,0
(Print Object ANGLE X(15
(Print Object ANGLE Y(15
(Print Object ANGLE Z(15
Wait Key
 
دستور COLOR OBJECT
با این دستور می توانیم شیء سه بعدی را با رنگ دلخواه رنگ آمیزی کنیم . مانند دستورالعمل زیر :
 
COLOR OBJECT ObjectNumber,ColorValue
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی و به جای ColorValue شماره ی رنگ مورد نظرمان را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,10,50,70
Make Object Sphere 2,20 : Position Object 2,30,0,0
Make Object Cylinder 3,30 : Position Object 3,-30,0,0
(Color Object 1,Rgb(255,0,0
(Color Object 2,Rgb(0,255,0
(Color Object 3,Rgb(0,0,255
Wait Key
 
دستور LOAD IMAGE
این دستور فایل تصویری با فرمت Bmp ، Jpg ، Tga ، Dds ، Dib و یا Png را بر روی حافظه فراخوانی ( از فایل تصویری موجود در Hard موقتا به Ram کپی می شود ) می کند . مانند دستورالعمل زیر :
 
LOAD IMAGE Filename,ImageNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل تصویری مورد نظر و به جای ImageNumber شماره ای به تصویر می دهیم تا توسط همین شماره بر روی تصویر کنترل داشته باشیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
Wait Key
 
دستور TEXTURE OBJECT
این دستور تصویر فرخوانی شده در حافظه ( توسط دستور Load Image ) را به شیء سه بعدی می چسباند . مانند دستورالعمل زیر :
 
TEXTURE OBJECT ObjectNumber,ImageNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء و به جای ImageNumber شماره ی تصویر فراخوانی شده در حافظه ( توسط دستور Load Image ) را قرار می دهیم تا تصویر به شیء سه بعدی بچسبد . مانند مثال زیر :
 
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait Key
 
با اجرای این مثال ابتدا یک شیء کره با شماره ی 5 در خط اول ایجاد و بعد تصویری با فرمت Jpg با شماره ی 3 به حافظه فراخوانی شد ( از فایل تصویری موجود در Hard موقتا به Ram کپی شد ) و توسط دستور TEXTURE OBJECT تصویر شماره ی 3 به شیء شماره ی 5 چسبید .
 
تابع IMAGE EXIST
این تابع بررسی می کند که آیا تصویری با شماره ی مورد نظر ایجاد شده یا نه .
اگر تابع ()Image Exist عدد یک را برگرداند یعنی تصویر ایجاد شده ( یعنی بر روی حافظه فراخوانی شده ) و اگر عدد صفر برگردانده شود ، یعنی تصویری با این شماره ایجاد نشده . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
".If Image Exist(3) Then Print "Image 3 Exist
".If Image Exist(5) Then Print "Image 5 Exist
Wait Key
 
در این مثال تنها تصویری با شماره ی 3 ایجاد شده . پس تنها عبارت ( .Image 3 Exist ) چاپ خواهد شد .
 
دستور DELETE IMAGE
این دستور تصویر ایجاد شده در حافظه ( توسط دستور Load Image ) را حذف می کند . مانند دستورالعمل زیر :
 
DELETE IMAGE ImageNumber
 
طبق این دستورالعمل به جای ImageNumber شماره تصویر ایجاد شده را قرار می دهیم . مانند مثال زیر :
 
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait 2000
Delete Image 3
Wait Key
 
با اجرای این مثال پس از دو ثانیه تصویر حذف شده و تصویر چسبانده شده به شیء نیز ناپدید می گردد .
 
دستور MOVE CAMERA
این دستور دوربین پیش فرض را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود دوربین ) حرکت می دهد . مانند دستورالعمل زیر :
 
MOVE CAMERA DistanceValue
 
طبق این دستورالعمل به جای DistanceValue مقدار حرکت دوربین را توسط یک عدد مشخص می کنیم . یعنی اگر عدد بزرگتر از صفر باشد ، دوربین به همان مقدار به جلو و اگر عدد کوچک تر از صفر باشد ، دوربین به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Move Camera 1
   If DownKey()=1 Then Move Camera -1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . دوربین پیش فرض به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم دوربین پیش فرض به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز (راستای محور Z خود ) به عقب و جلو حرکت دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2
Rotate Camera 2,0,0,0
Do
   If UpKey()=1 Then Move Camera 2, 1
   If DownKey()=1 Then Move Camera 2, -1
Loop


یک شنبه 1 ارديبهشت 1392برچسب:, :: 1:36 ::  نويسنده : ابوالفضل

 این فصل پرمطلب ترین فصل وبلاگ می باشد . و شامل دستوراتی سه بعدی برای ایجاد ، حذف و تغییرات بر روی اشیای ساده و پیچیده ی سه بعدی می باشد .


مختصات سه بعدی

به دنیای سه بعدی خوش آمدین . مختصات سه بعدی در محیط دارک بیسیک شباهت زیادی به دنیای واقعی ما دارد . یعنی مختصات سه بعدی شامل سه محور اصلی X و Y و Z است . سیستم مختصات سه بعدی در BarkBASIC بصورت شکل زیر می باشد .

 

 

در این شکل محور X ها طول و محور Y ها عرض و محور Z ها ارتفاع می باشد . یعنی زمانی که به مانیتور کامپیوتر نگاه می کنیم ، محور های مختصات سه بعدی بصورت شکل زیر است .

 

 

مطابق شکل ، محور X ها جهت چپ و راست و محور Y ها جهت بالا و پائین و محور Z ها به داخل و خارج از مانیتور ( عمود بر صفحه ی نمایشگر ) اشاره دارد . شکل زیر سه صفحه ی اصلی X-Y و X-Z و Y-Z را نشان می دهد .

 

 

هر جسم و یا نقطه ای در سیستم مختصات سه بعدی با هر یک از محور های X و Y و Z دارای یک فاصله منحصر به فرد می باشد . مانند نقطه ی P در شکل زیر :

 

 

 

در شکل بالا به ترتیب از چپ به راست ، فاصله ی نقطه ی P با هر کدام از محور ها نشان داده شده است . مختصات نقطه ای که در تقاطع این سه محور وجود داشته باشد ( 0 و 0 و 0 ) می باشد . یعنی X آن برابر صفر و Y آن برابر صفر و Z آن برابر صفر است یا می توان گفت ( X = 0 , Y = 0 , Z = 0 ) . ولی اگر مطابق شکل بالا فاصله ی نقطه ی P از محور X ها 10 و از محور Y ها 12 و از محور Z ها 14 در نظر بگیریم ، مختصات نقطه ی P برابر ( 14 و 12 و 10 ) خواهد بود  .


آزمایش عملی در فضای سه بعدی :

کدهای زیر را اجرا می کنیم . سپس موس را به بالا و پائین و چپ و راست حرکت می دهیم . همچنین می توانیم با حرکت چرخ مابین دکمه های موس به پایین و بالا ، در مجموع موقعیت یک کره را در مختصات سه بعدی تغییر دهیم .

 

Make Object Sphere 1,10

Position Camera 0,0,-300

Do

(OPX = Object Position X(1

(OPY = Object Position Y(1

(OPZ = Object Position Z(1

()MMX = MouseMoveX

()MMY = MouseMoveY

()MMZ = MouseMoveZ

()Position Object 1,OPX+MMX(),OPY+MMY()*-1,OPZ+MMZ

(OSX=Object Screen X(1

(OSY=Object Screen Y(1

(If OBJECT IN SCREEN(1

"("+(Text OSX(1),OSY(1),"(X="+Str$(OPX)+",Y="+Str$(OPY)+",Z="+Str$(OPZ

EndIf

If OPX > 150 Then Position Object 1,150,OPY,OPZ

If OPX < -150 Then Position Object 1,-150,OPY,OPZ

If OPY > 150 Then Position Object 1,OPX,150,OPZ

If OPY < -150 Then Position Object 1,OPX,-150,OPZ

If OPZ > 240 Then Position Object 1,OPX,OPY,240

If OPZ < -240 Then Position Object 1,OPX,OPY,-240

Loop

 

فعلا با دستورات نوشته شده ی این کد ها کاری نداریم . فقط آنها را تایپ و اجرا می کنیم . با اجرای این مثال و حرکت موس و چرخ مابین کلید های آن ، مختصات این کره بر روی صفحه چاپ خواهد شد . یعنی با حرکت موس به بالا و پائین موقعیت Y و با حرکت موس به چپ و راست موقعیت X و با حرکت چرخ مابین دو کلید موس ، موقعیت Z کره تغییر خواهد کرد . البته ما حرکت کره را محدود کردیم ، تا از صفحه زیاد دور نشود .

 

نکته ی تکراری : برای اینکه طول بعضی از خطوط برنامه آن قدر بلند است که در عرض جا نمی شود ، ما تمام خطوطی که متعلق به یک خط در برنامه است را در این وبلاگ به رنگ نارنجی نوشتیم .


اشیاء سه بعدی در DarkBASIC :

اشیاء سه بعدی در DarkBasic به دو بخش تقسیم می شوند . بخش اول ، اشیاء ساده و بخش دوم اشیاء پیچیده .


1- اشیاء ساده :

اشیای ساده شامل جعبه ، کره ، مکعب ، مخروط و ... می باشند . مانند شکل زیر :

 

 

 

 

دستور MAKE OBJECT BOX

این دستور جعبه سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT BOX ObjectNumber,Width,Height,Depth

 

طبق این دستورالعمل به جای ObjectNumber یک عدد در محدوده ی مثبت Integer یعنی یک تا 2,147,483,647 قرار می دهیم . در واقع با ایجاد هر شیء باید یک عدد نیز به آن اختصاص دهیم که به معنای نام آن شیء می باشد . با وجود این عدد که به معنی نام آن شیء است ، می توانیم در خطوط بعدی ، دستورات لازم را به شیء اعمال کنیم . یعنی توسط همین عدد ، شیء را تحت کنترل در بیاوریم . و به جای Width عرض و به جای Height ارتفاع و به جای Depth عمق جعبه را قرار می دهیم . مانند مثال زیر :

 

ObjectNumber = 1

Make Object Box ObjectNumber,10,20,30

Wait Key

 

با اجرای این مثال جعبه ای با عرض 10 و ارتفاع 20 و عمق 30 ایجاد خواهد شد .


نکته : ما نمی توانیم دو شیء را با یک عدد نامگذاری کنیم . مثلا اگر مثال زیر نوشته شود ، برنامه با خطا روبرو خواهد شد .

 

Make Object Box 2,10,5,30

Make Object Box 2,40,160,75

 

در این مثال ابتدا در خط اول یک جعبه ایجاد می شود ولی در خط دوم چون عدد اختصاصی به جعبه ی دوم توسط جعبه ی اول رزرو شده بود ، برنامه دچار خطا شد . یعنی به جای عدد 2 باید عدد دیگری قرار می دادیم . مثلا 5 


دستور MAKE OBJECT CONE

این دستور مخروط سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CONE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مخروط و به جای Size سایز مخروط را قرار می دهیم . مانند مثال زیر :

 

Make Object Cone 2,10

Wait Key

 

دستور MAKE OBJECT CUBE

این دستور مکعب سه بعدی ( جعبه ای که هر سطح آن مربع و به یک اندازه باشد ) می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CUBE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مکعب و به جای Size سایز مکعب ( سایز هر ضلع آن ) را قرار می دهیم . مانند مثال زیر :

 

Make Object Cube 3,100

Wait Key

 

دستور MAKE OBJECT CYLINDER

این دستور استوانه ی سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CYLINDER ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام استوانه و به جای Size سایز استوانه ( قطر و ارتفاع استوانه هر دو به یک اندازه و به مقدار Size خواهند بود ) را قرار می دهیم . مانند مثال زیر :

 

Make Object Cylinder 3,70

Wait Key

 

دستور MAKE OBJECT PLAIN

این دستور صفحه ای در فضا بشکل مستطیل می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT PLAIN ObjectNumber,Width,Height

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام صفحه و به جای Width عرض و به جای Height ارتفاع صفحه را قرار می دهیم . مانند مثال زیر :

 

Make Object Plain 70,10,10

Wait Key

 

دستور MAKE OBJECT SPHERE

این دستور کره ی سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT SPHERE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره را قرار می دهیم . مانند مثال زیر :

 

Make Object Sphere 70,40

Wait Key

 

کره از سطوحی تشکیل شده است که با استفاده از دستورالعمل زیر می توانیم تعداد سطوح عمودی و افقی کره را تنظیم کنیم .

 

MAKE OBJECT SPHERE ObjectNumber,Size,Rows,Columns

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره و به جای Rows تعداد سطوح افقی و به جای Columns تعداد سطوح عمودی کره را قرار می دهیم . مانند مثال زیر :

 

Make Object Sphere 1,40,10,10

Wait Key

Make Object Sphere 2,40,30,30

Wait Key

 

با اجرای این مثال ابتدا یک کره با 10 سطح افقی و 10 سطح عمودی ساخته شد و با زدن یک کلید کره ی بعدی با 30 سطح افقی و 30 سطح عمودی ساخته شد . چون تعداد سطوح در کره ی دومی بیشتر بود ، پس کیفیت آن بالاتر از کیفیت کره ی اول خواهد بود . مانند شکل زیر :

 

 

 

 

دستور MAKE OBJECT TRIANGLE

با این دستور می توانیم مثلت در فضای سه بعدی ایجاد کنیم . مانند دستورالعمل زیر :

 

MAKE OBJECT TRIANGLE ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مثلث و به جای X1 و Y1 و Z1 مختصات یکی از گوشه های مثلت و به جای X2 و Y2 و Z2 مختصات گوشه ی دوم مثلث و به جای X3 و Y3 و Z3 مختصات گوشه ی سوم مثلت را قرار می دهیم . مانند مثال زیر :

 

MAKE OBJECT TRIANGLE 2,3.5,6,7,2,0,3,5,0,3

Wait Key

 

مثلث بالا در مختصات فضای سه بعدی توسط شکل زیر ، شبیه سازی شده است .

 
 
دستور DELETE OBJECT
با این دستور شیء مورد نظرمان را حذف می کنیم . مانند دستورالعمل زیر :
 
DELETE OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم تا حذف شود . مانند مثال زیر :
 
Make Object Box 1,10,20,30
Make Object Sphere 2,25
Wait 2000
Delete Object 1
Wait Key
 
با اجرای این مثال شی جعبه با شماره ی 1 و کره با شماره ی 2 ایجاد شدند . سپس پس از 2 ثانیه شیء جعبه با شماره ی 1 حذف شد .


درباره وبلاگ


به وبلاگ من خوش آمدید
آخرین مطالب
پيوندها

تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان آموزش ساخت بازی 3D ( سه بعدی ) به زبان Basic با دارک بیسیک D و آدرس darkbasic.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.





نويسندگان


آمار وب سایت:  

بازدید امروز : 7
بازدید دیروز : 0
بازدید هفته : 22
بازدید ماه : 249
بازدید کل : 99619
تعداد مطالب : 24
تعداد نظرات : 3
تعداد آنلاین : 1