|
آموزش برنامه نویسی
|
||
|
آموزش ویژوال بیسیک و ... برای دیدن تمامی مطالب به آرشیو ماهانه مراجعه کنید |
نور پردازی در OpenGL باعث میشه که صحنه هایی که خلق میشن طبیعی به نظر برسن. خودتون وقتی این کار رو انجام دادین می فهمین ![]()
![]()
برای کار نورپردازی ما نیاز به سه آرایه داریم . آرایه ی اول ( Ambient ) : مشخص کننده ی رنگ محدوده و اطراف اشکال است که نور به آنجا تابیده نمی شود . آرایه ی دوم ( Diffuse ) : مشخص کننده ی رنگ و شدت نوری است که به شکل پاشیده می شود . آرایه ی سوم ( Position ) : مشخص کننده ی مکان و مختصات منبع نور است .
هر کدام از این آرایه ها دارای ۴ اندیس یا عضو هستند . در دو آرایه ی اول سه عضو اول آرایه مشخص کننده ی رنگ R,G,B هستند و عضو آخر مقدار Alpha است که شدت نور رو مشخص می کنه .
اما در آرایه ی سوم (Position) سه عضو اول آرایه مشخص کننده ی X,Y,Z هستند که مشخص کننده ی مختصات منبع نور هستند .
خوب میریم سراغ نوشتم کدها :
بعد از دانلود کردن نمونه برنامه ی پست قبل اون رو باز کنید . مدول OpenGLMain رو باز کنید و بعد در قسمت General این مدول سه آرایه رو تعریف کنید به این صورت :
Dim LA(3) As GLFloat
Dim LD(3) As GLFloat
Dim LP(3) As GLFloat
بعد از اعلان کردن این سه آرایه یه تابع به اسم SetLighting را مینویسیم که کار نورپردازی رو انجام بده . پس در آخر کدهای مدول OpenGLMain این کدها رو بنویسید :
Public sub SetLighting() 'x
LA(0) = 0
LA(1) = 0
LA(2) = 0
LA(3) = 1
LD(0) = 1
LD(1) = 0
LD(2) = 0
LD(3) = 1
LP(0) = -1
LP(1) = 1
LP(3) = 0
LP(4) = 1
glLightFv ltLight1 , lpmAmbient , LA(0)
glLightFv ltLight1 , lpmDiffuse , LD(0)
glLightFv ltLight1 , lpmPosition , LP(0)
glEnable glcLight1
glEnable glcLighting
End Sub
در تابع بالا ۱۲ خط اول برای مشخص کردن رنگ و شدت نور و مختصات منبع نور هست که درباره ی اونها توضیح دادم . در خط ۱۳ و ۱۴و ۱۵ به وسیله ی تابع glLightFv مقادیر آرایه هایی که ست کردیم رو برای نورپردازی به OpenGL اعلام می کنیم . در خط ۱۶ و ۱۷ هم کار نورپردازی رو به وسیله ی تابع glEnable فعال می کنیم .
بعد از نوشتن تابع SetLighting باید یه جایی از برنامه اون رو فراخوانی کنیم . ما فراخوانی تابع SetLighting را در داخل تابع InitGL() انجام میدهیم پس در خط اول این تابع کد زیر رو بنویسید :
SetLighting
همین . حالا برنامه رو اجرا کنید و حالشو ببرین . دیدین که چقدر آسون بود !! ![]()
![]()
همون طور که که در تابع SetLighting در قسمت مقداردهی آرایه LD() 'x می بینید اولین اندیس از این آرایه رو با ۱ مقدار دهی کردیم و اندیس ۲ و اندیس ۳ رو با ۰ مقداردهی کردیم که نشان دهنده ی رنگ قرمزه . آخرین اندیس از این آرایه شدت نوریه که تابیده میشه به طوری که هر چه کمتر باشه میزان نور کمتر میشه . ![]()
اینم نمونه برنامش : دانلود کنید . ![]()
جواب به سؤالات :
۱ - سامان گفته بود که یه برنامه می خواد بنویسه که تمامی فایل های txt رو از روی هارد دیسک پاک کنه !؟
برای این کار شما می تونید از کتابخانه ی Scripting و کلاس FSO استفاده کنید . ابتدا به کدها و نمونه برنامه های زیر توجه کنید . البته قبل از همه ی اینها بعد از باز کردن ویژوال بیسیک و پروژه ی استاندارد از منوی Project -> References رو انتخاب کنید تا پنجره ی References باز بشه بعد به دنبال Microsoft Scripting Runtime بگردین و بعد از علامت دار کردن OK کنید .
یک عدد CommandButton به فرم اضافه کنید و روی آن جفت کلیک کنید تا رویداد Click اون نوشته بشه و بعد بنویسید :
Private sub Command1_Click () 'x
Dim FSO As New Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim File As Scripting.File
set Folder = Fso.GetFolder("C:\Windows\")
For Each File In Folder.Files
MsgBox File
Next
Set FSO = Nothing
End Sub
بعد از اجرای برنامه و کلیک کردن Command1 همه ی فایل هایی که در داخل مسیر C:\Windows وجود دارند در جعبه پیام نمایش داده می شوند .
سه خط اول برای اعلان کلاس
حالا به جای کد بالا این کد رو امتحان کنید :
Private sub Command1_Click () 'x
Dim FSO As New Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim SubFolder As Scripting.Folder
set Folder = Fso.GetFolder("C:\Windows\")
For Each SubFolder In Folder.SubFolders
MsgBox SubFolder
Next
Set FSO = Nothing
End Sub
حالا اگه کد برنامه ی بالا رو اجرا کنید با کلیک کردن دکمه فرمان تمامی فولدر های موجود در C:\Windows در جعبه پیام نمایش داده میشوند.
ما به کمک این دو قطعه کد می تونیم برنامه ای بنویسیم که تمامی فولدر های موجود در یک درایو رو پیدا کنه بعد فایل های موجود در فولدرها رو پیدا کنه . همچنین می تونیم شرطی بزاریم که اگه خواستیم فایل های خاصی رو دست کاری کنه مثلآ پاک کنه یا مخفی کنه!!
.
ساختن برنامه ای برای پیدا کردن تمامی فایل های txt موجود در درایو C:\ 'x :::×:::>
یه پروژه ی استاندارد باز کنید و یک عدد ListBox و دوعدد CommandButton روی فرم قرار بدین . خاصیت Caption مربوط به Command1 رو به Find تغییر بدین و خاصیت Caption مربوط به Command2 رو به Del *.txt تغییر بدین. حالا از منوی View -> Code رو کلیک کنید تا پنجره ی کدها باز بشه :
Private Sub FindTXT(Path As String) 'x
Dim FSO As New Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim File As Scripting.File
Set Folder = FSO.GetFolder ( Path ) 'x
For Each File In Folder.Files
If LCase(Right(File,3)) = "txt" Then
List1.AddItem File
End If
Next
For Each SubFolder In Folder.SubFolder
FindTXT SubFolder.Path
Next
Set FSO = Nothing
End Sub
Private Sub Command1_Click() 'x
FindTXT "C:\" 'x
End Sub
Private Sub Command2_Click() 'x
Dim I As Integer
For i = 0 to List1.ListCount - 1
Kill List1.List(i) 'x
Next
End Sub
در قطعه کد بالا ابتدا یک تابع برای پیدا کردن فایل های txt نوشتیم. همون طور که دیدید این تابع یک آرگومان داره و آرگومانش مسیری است که می خواد فایل های txt اون رو پیدا کنه . 10 خط اول این تابع که نیازی به توضیح نداره اما در خط 11 تا 13 ما به وسیله ی یک حلقه ی For Each زیر فهرست های مسیر جاری ( که در اینجا C:\ 'x است) رو پیدا میکنیم و بعد از به دست آوردن مسیر آن زیر فهرست دوباره این تابع رو با مسیر جدید فراخوانی می کنیم . اگه توجه کرده باشین این تابع خودش خودش رو فراخونی میکنه . به اینجور توابع ، توابع بازگشتی می گن . سعی می کنم یه کم توضیح درباره ی این تابع بازگشتی بدم به طوری که بفهمین .
وقتی که این تابع فراخوانی میشه ابتدا فایل های موجود در مسیر C:\ 'x رو چک می کنه . بعد از تمام شدن کار چک کردن فایل ها اولین فولدر موجود در مسیر C:\ 'x رو پیدا می کنه (مثلا Windows) و دوباره تابع رو فراخوانی میکنه اما این بار با مقدار C:\Windows\ 'x فراخوانی میشه (چون در این مرحلهSubFolder.Path = C:\Windows\ 'x هست) . حالا شروع به چک کردن فایل های موجود در مسیر جاری یعنی C:\Windows\ 'x می کنه. به همین ترتیب کل فایل های درایو C:\ 'x رو چک می کنه.
امیدوارم با این توضیحات درهم برهم من چیزی فهمیده باشین ![]()
. فکر نکنم بقیه ی کدها نیازی به توضیح داشته باشن . اینم نمونه برنامش : دانلود
2 - سمیرا به دنبال یه برنامه می گشت که عددهایی رو به عنوان مختصات و ... از کاربر دریافت کنه و با توجه به اون عددها اشکالی رو رسم کنه .
اینم نمونه برنامش اگه دیگران هم خواستن دانلود کنن مسایل آموزشی خوبی داره : دانلود
مریم خانوم هم گفته بود که تا قبل از 4/4/87 آموزش نورپردازی و حالت شیشه در OpenGL رو بزارم اما به علت اینکه من امروز یعنی 5/4/87 به اینترنت متصل شدم و نظرات رو خوندم دیگه نتونستم . از این که دیر آپ کردم شرمنده .
سوالات همش دوتا بود . تموم شد.
خوب دیگه برای امروز کافیه. خسته شدم ، دستم دیگه درد گرفت
.
چیه ؟
ناراحت شدین پست امروز تموم شد ؟ نترسین دوباره میام .
بنابراین تا بعد تا میتونین نظر بدین . نظرتون رو راجع به آموزش ها بزارین . چه جوریه ؟ خوبه یا بده ؟ حتمآ بگین . اگه نظرا کم باشه پست بعدی رو نمیزارم ها!!
بدرود . ![]()
|
|