| English | صفحه اصلي | گالري عكس | VisualBasic | Delphi | Librery | بانك مقاله | وبلاگ ديگرم |
| TopMenue_>> | VBLarn:: | Package:: | BestPost:: | DelphiLarn:: | LarnPost_2:: | calegeDoc:: | Archive:: | FarsiPost:: | LastPost:: | BestPost_2 |
کارشناسی کامپیوتر
برنامه ساختمان داده
سوالات کنکور کارشناسی
دانلود سورس متور 3D
CPP
C#
new
Ebook
Java
سلام خدمت بينندگان عزيز اين وبلاگ
خب همونطور كه قبلآ قول داده بودم در مورد آموزش سه بعدي امروز يه برنامه رو از صفر با دايركت ايكس 8و وي بي مي سازيم تا شما با چگونگي رسم اشكال سه بعدي ساده (مكعب و استوانه و..) آشنا بشيد.
خب اول از منوي پروژه تو وي بي ريفرنس رو انتخاب كنيد در ليست باز شده تيك DirectX8 For VisoualBasic Librery رو بزنيد تا كتابخونش به پروژتون اضافه بشه .
بعد از منوي پروژه Add Module رو بزنيد تا يه انبار كد يا ماژول به پروژتون اضافه بشه از اين ماژولها برا اين استفاده مي كنن كه
اولآ متغير و يا تابعي كه داخل ماژول نوشته بشه از داخل همه ي فرمها قابل دسترسي و صدا زدنه چون متغيير هاي سطح ماژول بر خلاف فرم به صورت پيش فرض Public هستند
خب داخل ماژول يه ديتا تايپ براي ذخيره سازي اطلاعات تك تك نقطه ها تعريف مي كنيم
Private Type LITVERTEX
x As Single
y As Single
z As Single
color As Long
specular As Long
tu As Single
tv As Single
End Type
سه تا متغيير آخر كه اسمشون عجيب قريبه هميشه با صفر مقدار دهي مي شن من هم نمي دونم برا چيه ان! سه تاي اول موقعيت نقطه و بعدي رنگ
بعد يه ثابت براي اعلان اين ديتا تايپ به دايركت ايكس تعريف مي كنيم اين ثابت فرمت ديتا تايپي كه تعريف كرده ايم را در خود نگه مي دارد.
Const Lit_FVF = (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR Or D3DFVF_TEX1)
Global Const Pi = 3.14159265358979
ثابت پي هم كه براي محاسبه زاويه اي بكار مي رود –چرخش دوربين
بعد يه آرايه به تعداد نقطه هايي (ورتكس هايي)كه مي خوايم رسم كنيم تعريف مي كنيم
Public cube(35) As LITVERTEX
Public matworld As D3DMATRIX
Public matview As D3DMATRIX
Public matproj As D3DMATRIX
چون ما مي خوايم يه مكعب مربع رسم كنيم به 36 نقطه نياز داريم كه با آرايه بالا اونو تعريف مي كنيم در سه خط بعد سه تا ماتريس تعريف كرديم كه كل خصوصيات نقاط ما رو داخل خودشون نگه مي دارن كاربرد اونا اينه كه براي تابع چرخش فرستاده مي شن و كل اونا رو دايركت ايكس يه جا مي چرخونه و ديگه نياز به چرخش تك تك اونها نيست
ماتريس اول چگونگي قرار گرفتن نقطه ها در فضاي سه بعدي رو نشون مي دن
دومين ماتريس نشان مي دهد دور بين در كجا قرار دارد
وآخرين ماتريس نشان مي دهد كه دوربين چگونه به صحنه نگاه مي كند
بعد متغيير هاي سراسري سطح ماژول رو كد نويسي مي كنيم توجه كنيد تمام كدهاي بالا واين كدها داخل ماژول نوشته مي شن
Public Dx As DirectX8
Public D3D As Direct3D8
Public D3DDevice As Direct3DDevice8
Public DispMode As D3DDISPLAYMODE
Public InitG As Boolean
Public D3Dwindow As D3DPRESENT_PARAMETERS
Public D3DX As D3DX8
Public VBuffer As Direct3DVertexBuffer8
دي ايكس بزرگترين كلاس دايركت ايكس است كه كلاس هاي دايركت ايكس را مديريت مي كند.
كلاس دي تري دي براي ايجاد ابزار سه بعدي سازي استفاده مي شه.
كلاس D3dDevice براي مديريت ابزار ساخته شده و اجزاي آن استفاده مي شه.
كلاس DispMode براي گرفتن موقعيت و خصوصيات كنوني صفحه نمايش شما بكار مي رود.
متغير InitG براي گرفتن مقدار برگشتي تابع InitialiseGeometry كه بعدآ تعريف خواهد شد بكار مي رود.
كلاس D3Dwindow مستقيمآ با پنجره نمايش ما كار مي كند وبراي تظيم خصوصيات آن از اين كلاس استفاده مي شود.
كلاس D3DX براي ايجاد يك بافت و بارگزاري فايل دات ايكس كه فايل حاوي مختصاي نقاط ومشخصات يك شي سه بعدي مي باشد(فايل هاي خروجي 3DSMAX با يك برنامه به اين نوع فايل تبديل مي شوند و داخل دايركت ايكس باز مي شوند)بكار مي رود مثلآ اگر بخواهيد روي يك ديوار يك عكس بيندازيد بايد با اين كلاس آن را بارگذاري كنيد وبا كلاس D3DMaterial8 آن را به ديوار بيندازيد. صرفآ در اين پروژه نيازي به اين كلاس نيست و من اون رو همينجوري تعريف كردم!.
كلاس vBuffer براي ايجاد بافر نگه دارنده كل نقاط و تصوير سه بعدي ما استفاده مي شود
حالا شروع به نوشتن تابع initialise مي كنيم اين تابع در اكثر پروژه هاي سه بعدي هست و وظيفه اش بارگزاري و مقداردهي اوليه كلاسها و متغيير هاست .
Public Function initialise() As Boolean
Set Dx = New DirectX8 '— ايجاد دوباره كلاس دي ايكس
Set D3D = Dx.Direct3DCreate '— ايجاد كلاس دي تري دي از كلاس دي ايكس
'-- D3DDEVTYPE_REF= رسم نرم افزاري , D3DDEVTYPE_HAL= رسم سخت افزاري
'--ممكن است كارت گرافيك شما آن برد باشد كه بايد از هال استفاده كنيد
If D3D.CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, _
DispMode.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16) = D3D_OK Then
D3Dwindow.AutoDepthStencilFormat = D3DFMT_D16 '16 bit Z-Buffer
Debug.Print "yes"
خب خسته نباشيد حالا دو تابعي كه در بالا صدا زديم و گفتيم بعدآ تعريف مي كنيم را مي نويسيم تابع MakV براي تبديل پامتر هاي عددي به ساختار D3DVECTOR كه ديتا تايپ استاندارد دايركت ايكس است
Private Function MakeV(x As Single, y As Single, z As Single) As D3DVECTOR
MakeV.x = x
MakeV.y = y
MakeV.z = z
End Function
بعدي تابع رسم مقدار دهي نقطه ها در فضاي سه بعدي است يعني تابع InitialiseGeometry
Private Function InitialiseGeometry() As Boolean
On Error GoTo BOut:
Dim color&, DFC!
'— تنظيم رنگ نقاط در اينجا رنگ آبي
color = RGB(200, 100, 0): DFC = 1
'Front
cube(0) = CreateLitVertex(-1, 1, DFC, color, 0, 0, 0)
cube(1) = CreateLitVertex(1, 1, DFC, color, 0, 0, 0)
cube(2) = CreateLitVertex(-1, -1, DFC, color, 0, 0, 0)
cube(4) = CreateLitVertex(-1, -1, DFC, color, 0, 0, 0)
cube(5) = CreateLitVertex(1, -1, DFC, color, 0, 0, 0)
'Back
cube(6) = CreateLitVertex(-1, 1, -DFC, color, 0, 0, 0)
cube(7) = CreateLitVertex(1, 1, -DFC, color, 0, 0, 0)
cube(8) = CreateLitVertex(-1, -1, -DFC, color, 0, 0, 0)
cube(9) = CreateLitVertex(1, 1, -DFC, color, 0, 0, 0)
cube(10) = CreateLitVertex(-1, -1, -DFC, color, 0, 0, 0)
cube(11) = CreateLitVertex(1, -1, -DFC, color, 0, 0, 0)
'Right
cube(12) = CreateLitVertex(-DFC, 1, -1, color, 0, 0, 0)
cube(13) = CreateLitVertex(-DFC, 1, 1, color, 0, 0, 0)
cube(14) = CreateLitVertex(-DFC, -1, -1, color, 0, 0, 0)
cube(15) = CreateLitVertex(-DFC, 1, 1, color, 0, 0, 0)
cube(16) = CreateLitVertex(-DFC, -1, -1, color, 0, 0, 0)
cube(17) = CreateLitVertex(-DFC, -1, 1, color, 0, 0, 0)
'Left
cube(18) = CreateLitVertex(DFC, 1, -1, color, 0, 0, 0)
cube(20) = CreateLitVertex(DFC, -1, -1, color, 0, 0, 0)
cube(21) = CreateLitVertex(DFC, 1, 1, color, 0, 0, 0)
cube(22) = CreateLitVertex(DFC, -1, -1, color, 0, 0, 0)
cube(23) = CreateLitVertex(DFC, -1, 1, color, 0, 0, 0)
'Top
cube(24) = CreateLitVertex(-1, DFC, 1, color, 0, 0, 0)
cube(25) = CreateLitVertex(1, DFC, 1, color, 0, 0, 0)
cube(26) = CreateLitVertex(-1, DFC, -1, color, 0, 0, 0)
cube(27) = CreateLitVertex(1, DFC, 1, color, 0, 0, 0)
cube(29) = CreateLitVertex(1, DFC, -1, color, 0, 0, 0)
'Bottom
cube(30) = CreateLitVertex(-1, -DFC, 1, color, 0, 0, 0)
cube(31) = CreateLitVertex(1, -DFC, 1, color, 0, 0, 0)
cube(32) = CreateLitVertex(-1, -DFC, -1, color, 0, 0, 0)
cube(33) = CreateLitVertex(1, -DFC, 1, color, 0, 0, 0)
cube(34) = CreateLitVertex(-1, -DFC, -1, color, 0, 0, 0)
cube(35) = CreateLitVertex(1, -DFC, -1, color, 0, 0, 0)
InitialiseGeometry = True
Exit Function
BOut:
InitialiseGeometry = False
End Function
تابعي كه داخل اين تابع صدا زده شده تابع CreateLitVertex هست كه مشخصات نقطه رو به فرمت استاندارد LITVERTEX تبديل مي كنه .متن اين تابع:
Private Function CreateLitVertex(x As Single, y As Single, z As Single, color As Long, specular As Long, tu As Single, tv As Single) As LITVERTEX
CreateLitVertex.x = x
CreateLitVertex.y = y
CreateLitVertex.z = z
CreateLitVertex.color = color
CreateLitVertex.specular = specular
CreateLitVertex.tu = tu
CreateLitVertex.tv = tv
End Function
و تابع اصلي رسم نقاط در فضاي سه بعدي كه در تمامي پروژه هاي سه بعدي اسم اون Render هست.
Public Sub Render()
'— پاك كردن تصوير قبلي رسم شده با رنگ سياه
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
'— شروع رسم تصوير سه بعدي
D3DDevice.BeginScene
'— دادن بافر حاوي نقطه هاي سه بعدي به تابع رسم كننده
D3DDevice.SetStreamSource 0, VBuffer, Len(cube(0))
'— رسم نقاط به صورت مثلثي
'-- D3DPT_LINELIST رسم خطي
'-- D3DPT_LINESTRIP رسم خط چسبيده
'-- D3DPT_POINTLIST رسم نقطه اي
'-- D3DPT_TRIANGLEFAN رسم مثلثي
'--D3DPT_TRIANGLELIST رسم مثلث چسبيده
'-- D3DPT_TRIANGLESTRIP رسم درهم بافته
D3DDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 12
'— پايان رسم تصوير سه بعدي
D3DDevice.EndScene
'-- تثبيت نقاطه رسم شده
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub
خب كد نويسي بخش ماژول تموم شد حالا فرم رو بازكنيد و خط اول كد هاش متغيير زير رو تعريف كنيد
Dim Er As Boolean
بعد در كد Form_KeyDown كد زير را به اينصورت بنويسيد كه كل دستو به اين شكل مي باشد
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Er = True
End Sub
با اين دستور وقتي كاربر كليدي را يزند ير نامه تمام مي شود
حالا كد مربوط به فرم لود كه بايد توابعي را كه در ماژول تعريف كرديم را داخل يك حلقه بي پايان صدا بزنيم .روي فرم دابل كليك كرده كد زير را بنويسيد
Private Sub Form_Load()
Debug.Print "Start"
Me.Show
Dim RotateAngle As Single'— براي ذخيره ميزان چرخش
Dim matTemp As D3DMATRIX '//To hold temporary
Call initialise'— صدا زدن تابع براي مقدار دهي اوليه نقاط وايجاد وتنظيم پارامترها
While Er = False'— شروع حلقه بي پايان
RotateAngle = RotateAngle + 0.1'— يك درجه به چرخش اضافه كن
If RotateAngle >= 360 Then RotateAngle = RotateAngle – 360'— اگر يك دور كامل شد برگرد
D3DXMatrixIdentity matworld '//Reset our world matrix— تنظيم ماتريس نقاط با چرخش
D3DXMatrixIdentity matTemp'— تنظيم محل دوربين با چرخش
D3DXMatrixRotationX matTemp, RotateAngle * (Pi / 180)'— گردش افقي دوربين
D3DXMatrixMultiply matworld, matworld, matTemp '— دادن سه ماترس مزكور به دايركت ايكس
D3DXMatrixIdentity matTemp
D3DXMatrixRotationZ matTemp, RotateAngle * (Pi / 180)'— گردش عمقي دوربين
D3DXMatrixMultiply matworld, matworld, matTemp'— دادن سه ماترس مزكور به دايركت ايكس
D3DDevice.SetTransform D3DTS_WORLD, matworld'— تنظيم محل ديد دوربين
Render'— صدا زدن تابع اصلي رسم
DoEvents'— همه دستورات را دوباره بررسي كن (داخل حلقه هنك نكن!!)
Wend'— پايان حلقه بي پايان
End'— بستن برنامه
End Sub
دستور End رو داخل Form_Unload هم مي نويسيم كه برنامه بازدن دكمه كلوز خطا نده
Private Sub Form_Unload(Cancel As Integer)
خب چيزي نموند كه توضيح نداده باشيم
براي اينكه برنامه شما رو كامل كرده باشم اگه جايي اشتباه تايپي باشه يا غيره كد كامل برنامه رو هم گزاشتم كه مي تونيد از داخل گوني زير برش داريد.!
كدماژول
كد فرم
لينك مقاله |18:0 یکشنبه 26 اسفند1386 - توسط ناصر نيازي
سلام
اولین چیز سورس پلیره که بعد از این همه وقت گزاشتمش رو وب اوایل ۲۰۰۷ نوشتمش
Download
اون سایته که می گفتم با پی اچ پی تمومش کزدم پی اچ پی با آژاکس چی می شه !! به همتون توصیه می کنم براش هم نمی خاد هاست بگیرید یه آکانت توی Paresehgig.comدر ست كنيد همين
يه تالار ديگه هم بصورت آزمايشي اضافه كردم
فعلآ در گير برنامه يه بانكم .پروژه نمايندگي شركت خودروسازي رو هم گرفتم كه مونده برا بعد عيد
روبوكاپ هم فعلآ تعطيل شده و اينكه يه فرمت تصويري ساختم كه حجم فايلاش نصف تري جي پي هست 100مگ در 15 مگ!!!!! به زودي سرو صداش رو از رسانه ها خاهيد شنيد.
هنوز وقت ثبتش رو پيدا نكردم.
واينكه به زودي كارهام رو با دايركت ايكس و اوپن جي ال رو مي زارم رو وب.
و در انتخابات هم كارشناس رايانه ام
با اين همه كار طبيعيه اين همه تاخير ولي بازم از همه خوانندگان گل اين وبلاگ كه مثل هميشه شرمنده كردن معزرت مي خوام
آقا هادي هم هر وقت آمادگي داشتي وعشقت كشيد بگو تا به عنوان يك نويسنده به وبلاگ اضافت كنم
تا پست بعدي خدانگه دارتان
-مردان بزرگ اراده مي كنند مردان ضعيف آرزو(همينجوري عشقي نوشتم منظوري ندارم!!!!)
لينك مقاله |20:18 چهارشنبه 22 اسفند1386 - توسط ناصر نيازي
در پی نظر نگار خانم برا کتب سی پلاس پلاس این پست رو انجام می دم
اولیش کتاب آقای جفر نژاد قمی هست که در دو نوع سی++ وسی عرضه شده
کتاب بعدی مثل همیشه کتب برادران دیتل هست که بسیار کامل هست البته من یه سری کتب الکترونیکی تو وبلاگ معرفی کردم که می تونید از جستجوگر استفاده کنید برا پیدا کردنش
تو این پست فقط وبلاگ معرفی می کنیم
http://cppprograms.blogfa.com/ برا علی آقا
http://sstarsprograms.blogfa.com/
لينك مقاله |13:5 یکشنبه 12 اسفند1386 - توسط ناصر نيازي
سلام خدمت بازديدكنندگان اين وبلاگ
ديگه دو ماهي مي شه پستهام با ببخشيد شرمند دير شد شروع مي شد وعجله اي امروز كه يه هفته بعد از امتحانات پايان ترمه و انتخاب واحدم تموم شده من سايتي كه داشتم طراحي مي كردمو تحويل دادم و فرصت شد بشينم يه دل سير مقاله بنويسم .
امير حسين در مورد فرق دايركت ايكس و جي ال خواسته بود:
1-كل حجم جي ال در ويندوز 5مگ بيشتر نيست در حالي كه براي دانلود يه ورژن دايكركت ايكس بين 60 تا 80 مگابايت هست ورژن 10 دويست وپنجاه مگ!!
2-سرعت جي ال بخاطر نوع رندر تصاوير و فايلهاي كم در بافر وجزئيات كمتر بيش از 3 برابر بيشتر از دايركت ايكس هست
3-به دليل استفاده گسترده از وراثت و چند ريختي(پوليمورفيزم)اكثركلاسهاي دايركت ايكس بهم مربوط اند وبا همديگر متحد ويكپارچه كار مي كنند لذا وابسته بهم هستند از اينرو اگه سخت افزاري يكي از كلاسها يا امكانات دايركت ايكس رو پشتيباني نكنه در اجراي بقيه كلاسها هم ايجاد مشكل مي كنه به همين خاطر دايركت ايكس ابتدا تست مي كنه كه اين افكت يا كلاس با امكانات سخت افزاري موجود اجرا مي شه يا نه .اگه جواب مثبت بود برنامه اجرا مي شه
ولي جي ال به دليل اجراي تقريبآ مستقل كلاسهاش در هرسيستمي بالا ترين افكتها رو هرچند كند و با كيفيت كمتر ولي پياده واجرا مي كنه
4-جي ال به دليل عدم وابستگي به اي پي آي در هر سيستمي اجرا مي شه يعني اگه ورژن لينوكس اون رو از سايت OpenGL.orgدانود كنيد مي تونيد تو محيط KWriteلينوكس براش كد نويسي كنيد.كنسول جاواي اوپن جي الJOGL به راحتي روي يك گوشي با حافظه 32مگ و بيشتر اجرا مي شه و روي تمام گوشي هاي پشتيبان فايل .Jarاجرا مي شه در حالي كه SDKمايكروسافت رو اگه با دايركت ايكس بريزي روي يه رم 512 به زور جا مي شه چه برسه به خود برنامه !!دايركت ايكس روي ويندوز ان تي هم به سختي اجرا مي شه!
5-اوپن جي ال به دليل اوپن سورس بودن كوچكترين نقطه ضعفش توسط برنامه نويسان سراسر جهان كشف و ترميم مي شه در حالي كه مايكروسافت يعد از اين كه شركت D3Dرو در دهه نود خريد ورسمآ دايركت ايكس رو انحصار كرد يك خط هم از سورس اون رو منتشر نكرده
6-دايركت ايكس به دليل بافر كردن گسترده فايلها و پلاگين ها فضاي زيادي از رم رو اشغال مي كنه كه در نتيجه هم رم بالايي برنامه هاش مي خواد هم خيلي زود هنك مي كنه هم وقتي هنك مي كنه كل سيستم رو دچار مشكل مي كنه كه اكثرآ ريسيت كردن سيستم آخرين راه موجود هست.حتي نقاط و ورتكس ها براي رندر شدن نياز دارن داخل يه آرايه به اسم FVFريخته بشن
7-ياد گيري جي ال به مراتب ساده تر از دايركت ايكس هست كدها اكثرآ خوانا بدون كوچكترين ابهام و با پيروي از قانون خاصي
متغير ها و كلاسها نام گذاري شده اندو انتقال يك كد از دايركت ايكس به جي ال خيلي ساده تر از حالت عكس هست
8-كتابخانهGLUدر جي ال يراي ترسيم بعضي از اشكال از پيش آماده مثل كره استوانه قوري و مكعب وغيره مي باشدOpenALبراي كار با صداSDLبراي كار با جويستيك وساير سخت افزارهاGLUTهم براي كار و ساخت پنجره ها كنترل هاي ويندوزدر جي ال مي باشد كه كاملآ جداگانه ومستقل در هر سيستم عاملي قابل دسترس هستند ولي براي دايركت ايكس مثلآ دايركت ساند دايركت اينپوت و غيره محدوده مشخصي ندارند فايلهاي آنها مشخص نيست و همه جا قابل اجرا ودسترسي نيستند.
9-دايركت ايكس براي اجرا شدن نياز به نسخه دايركت ايكسي دارد كه برنامه با آن نوشته شده است در كامپيوتر كاربر دارد
براي ما شايد اين كار زياد سخت نباشد يعني نصب آن ولي در كشور هايي كه كپي رايت رعايت مي شود ويندوز 200دلار است وويژوال استديو 400دلار وضعيت را خودتان پيش بيني كنيدضمن اينكه كار كردن با دايركت ورژن هاي مختلف كمي با هم تفاوت دارد و دستورات دي ايكس7 با هشت تفاوت زيادي دارد ولي در جي ال چنين نيست
10-گزينه هاي بالا حاصل مدتها كار اينجانب با هردوي اين سيستمها بود و ممكن است افراد حرفه اي نظر ديگري داشته باشند و مطالب بالا شايد از نظر افراد حرفه اي درست نباشد ولي تجربه شخصي من اينها هستند
موارد زير توسط جي ال بسيار بهتر از دي ايكس ساپورت مي شود
Picking Support
Stereo Rendering
Hardware Independent Z Buffer Access
Accumulation Buffers
Line Width Rendering Attributes
Two-Side Lighting
Hierarchical Display Lists
Picking Support:
اين گزينه به جي ال امكان مي دهد تا ذرات بسيار ريز مانند گرد و غبار را به وضوح كامل به نمايش بگذارد ياد آور مي شوم اين گزينه در دي ايكس با كمي ضعف ايجاد مي شود.و آن چيزي كه برتري جي ال است پيش فرض بودن اين گزينه است ولي در دي ايكس اين گزينه نياز به اي پي آي و كد نويسي فراوان دارد
برتري هاي دايركت ايكس
1-پشتيباني گسترده مايكروسافت از آن
2-ايجاد صحنه ها با جزئيات بسيار زياد و حرفه اي
3-نياز به كدهاي پيچيده ولي كوتاه
4-آبديت هر ساله آن
5-پشتيباني آن در ويندوز ويستا
6-استفاده از تمام قابليت هاي سخت افزار
7-و اينكه دوستان من كه در زمينه سي شارپ تخصص داشتند مي گفتند كدهاي جي ال خيلي زود ياز مي شوند
ومهندسي معكوس در دايركت ايكس بسيار مشكل است هرچند كه نرم افزارهايي براي جلوگيري از مهندسي معكوس وجود دارد كه با عث برهم زدن آرايش كدها باعدم تاثير در اجراي آن مي شود.
و موارد زير
Fixed-Function Vertex Blending
Programmable Vertex Blending
Programmable Pixel Shading
Triadic texture Blending Operations
Bump Mapping
Multiple Monitor Support
مطالب ویکی پدیا در مورد اوپن جی ال
OpenGL به معنای کتابخانه گرافیکی منبع باز(اُپن سورس) است که توسط شرکتی به نام Sillicon Graphic در کشور ایالات متحده آمریکا ساخته شده است . در حقیقت این ابزار یک شتابدهنده گرافیکی است که به برنامه نویس قابلیت اجرای گرافیک با کیفیت و سرعت بالا را که در سیستم های عامل به صورت پیش فرض امکان آن نیست را می دهد . این قابلیت با ویژگی کار در 3D که GDI و دیگر سیستم های مشابه قابلیت کار در آن را ندارند همراه است . مثلاً اگر بخواهید در VC یک مکعب رسم کنید که بتواند با سرعتی بالا و بدون به هم ریزی نمای سه بعدی آن بچرخد باید از توابع رسم خط و نقطه در دو بعد استفاده کنید که نمی توان بدون پرش فریمها این مکعب را چرخاند ولی در GL فقط محیط را به صورت 3D آماده می کنیم و سپس شی را درون این محیط رسم می کنیم حال حتی اگر شی هم بچرخد دیگر فریمها پرشی نخواهند داشت .
این کتابخانه شامل سه قسمت متفاوت ولی هماهنگ است که به زبان سی (C)نوشته شده است.
قرار دارد و قابل بارگذاری است . همچنین می توانید راهنمای کامل مربوط به استاده از این کتابخانه را نیز در همین سایت بیابید .
در GL متغیر نداریم ، یعنی در هیچ یک از منابع استاندارد حتی یک متغیر تعریف نشده است ، این بدان معنا نیست که شما نمی توانید از متغیر استفاده کنید بلکه بدان معنی است که خود سیلیکون متغیری در GL تعریف نکرده است .
در GL همواره ثوابت را به شکل زیر و با حروف بزرگ تعریف می کنند: GL_TEXTURE_2D همیشه ثوابت با حروف GL بزرگ شروع می شوند و با یک _ ادامه می یابند سپس نام ثابت و اگر این ثابت اندازه داشته باشد مجدداً _ و مقدار یا مشخصه ثابت قرار می گیرد.
در GL توابع نیز به شکل زیر تعریف می شوند : glVertex3f همیشه توابع با gl کوچک یا اگر از کتابخانه کمکی استفاده شوند glu شروع می شوند در ادامه نام تابع وارد می شود که در اینجا Vertex به معنی نقطه است و در ادامه تعداد یا مشخصه اصلی نام تابع وارد می شود که در اینجا 3 وارد شده و در نهایت نوع مقدار و مشخصه وارد می گردد که در این مثال f به معنی float یا (اعشاری) است .
در Gl تعدادی قابلیت ثابت برای کارتهای گرافیکی مختلف و جود دارد که معمولاً شرکتهای سازنده کارت گرافیکی آنها را اضافه می کنند .
از این کتابخانه در همه زبانهای برنامه نویسی با قابلیت ساخت برنامه اجرایی یا Application می توان استفاده کرد . در اکثر این زبانها کار با GL به یک شکل است ، به طوری که شما اگر بتوانید در Visual Cpp برنامه مبتنی بر GL بنویسید می توانید همان برنامه را نیز در Visual Basic باز نویسی کنید . مثالهای متنوع از کاربرد GL را در اکثر زبانهای برنامه نویسی می توانید در سایت نئون هلیم بیابید. نحوه استفاده از GL بسیار ساده است که شامل مراحل زیر می شود(ممکن است در بعضی از زبانها این مراحل کمتر یا بیشتر باشد)این مثال برا زبانهای C & Cpp نوشته شده است .
مثال:
#include
مثال:HGLRC hRc=NULL;int m_PixelFormat;
مثال:
PIXELFORMATDESCRIPTOR pfd
مثال: این قسمت از کار باید در مرجع توابع مربوط به اندازه پنجره برنامه انجام گیرد، برای اینکار تابع OnSize بسیار مناسب است. استفاده از تابع فریم بندی پنجره در GL با نام ViewPort
سایت رسمی OpenGL
سایت رسمی OpenAL
سایت آموزش برنامه نویسی OpenGL
لينك مقاله |0:12 جمعه 3 اسفند1386 - توسط ناصر نيازي
ناصرنيازي : با سلام به وبلاگ من خوش آمديد ، در اين وبلاگ هر گونه آموزش برنامه نويسي و دلفي انجام مي شود. جهت استفاده بيهنه از اين وبلاگ به آرشيو وبلاگ نيز سري بزنيد .بيش ازنيم مليون كتاب برنامه نويسي خارجي و10 هزاركتاب فارسي در اينجا و وبلاگ ديگر ما وتالار گفتگو شماره اس ام اس09189151266.با تشکر