بعد از اینکه فایل مورد نظر رو دانلود کردین ویژوال بیسیک رو باز کنین و از منوی Project گزینه Refrences رو بزننین و در پنجره باز شده دکمه فرمان Browse رو بزنین و آدرس فایل vbogl.tlb (همون فایلی که دانلود کردین) رو باز کنین و بعد از انتخاب کردن فایل vbogl.tlb روی دکمه فرمان Open کلیک کنید. بعد در داخل کادری که لیست DLL های شناسایی شده است به دنبال VB OpenGL API 1.2 بگردین و تیک کنار اون رو فعال کنین. برای اینکه کدهایی که ما مینویسیم با استفاده از روتین های OpenGL هست در داخل فرم ما نمایش داده نمیشه و ما برای اینکه کدهایی که مینویسیم اجرا بشه باید تغیراتی در برنامه ایجاد کنیم برای اینکار:در ویژوال بیسیک از منوی Project روی Project Properties کلیک کنید تا جعبه تنظیم خواص پروژه باز بشه.بعد از لیست باز شو Startup Object گزینه Sub Main را انتخاب کنید و OK را بزنید. حالا میریم سراغ کد نویسی: از منوی Project گزینه Add Module را بزنید تا برای شما یک ماژول جدید بسازد.بعد خاصیت Name ماجول رو برابر با OpenGLMain قرار دهید. حالا ما کدهای اصلی که موتور گرافیکی ۳ بعدی ما رو میسازه مینویسیم. روی ماجول جدید خود دابل کلیک کنید تا پنجره View Code باز بشه.و بعد کدهای زیر رو بنویسید: Sub Main()    Dim Done As Boolean    Dim frm As Form    Done = False    Set frm = New Form1    If Not CreateGLWindow(frm, 640, 480, 16) Then Done = True       Do While Done = False    If (DrawGLScene = False) Then    Unload frm    Else SwapBuffers (frm.hDC)    DoEvents    End If    Done = frm.Visible = False    Loop    Set frm = Nothing    End End Sub در قطعه کد بالا ابتدا یک متغیر از نوع بولین تعریف میکنیم . تا وقتی که متغیر Done مقدار False داشته باشد برنامه ما ادامه پیدا میکند ولی هر گاه که متغیر Done برابر با True شود برنامه خاتمه پیدا میکند. در خط بعدی ما یک متغیر به نام frm از نوع Form تعریف میکنیم و در خط پنجم نیز متغیر frm را به فرم برنامه مرتبط میکنیم.در خط ششم نیز از یک دستور شرطی استفاده کردیم که هرگاه CreateGLWindow (که در ادامه آن را میسازیم و کار آن ساخت پنجره ای است که اشیا دو بعدی و چند بعدی ما در آن نمایش داده شوند) برابر با مقداری خلاف قوانین ما شد برنامه خاتمه پیدا کند و باعث هنگ کردن سیستم نشود. در ادامه ما باید پنجره نمایش اشیا را که نام آن CreateGLWindow است بسایم. برای این کار کدهای زیر را در ماجول بنویسید: Public Function CreateGLWindow(frm As Form, Width As Integer, Height As Integer, Bits As Integer) As Boolean    Dim PixelFormat As GLuint    Dim PFD As PIXELFORMATDESCRIPTOR        PFD.cColorBits = Bits    PFD.cDepthBits = 16    PFD.dwFlags = PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER    PFD.iLayerType = PFD_MAIN_PLANE    PFD.iPixelType = PFD_TYPE_RGBA    PFD.nSize = Len(PFD)                         'X    PFD.nVersion = 1            PixelFormat = ChoosePixelFormat(frm.hDC, PFD)                         'X    If PixelFormat = 0 Then    KillGLWindow    MsgBox "Can't set the:", 16    CreateGLWindow = False    End If        If SetPixelFormat(frm.hDC, PixelFormat, PFD) = 0 Then    KillGLWindow    MsgBox ""                     'X    CreateGLWindow = False    End If       hrc = wglCreateContext(frm.hDC(    If hrc = 0 Then    KillGLWindow    MsgBox "Can't rendering Context:", vbExclamation, "ERROR    CreateGLWindow = False    End If        If wglMakeCurrent(frm.hDC, hrc) = 0 Then    KillGLWindow    MsgBox "Can't Active rendering Context:", vbExclamation, "ERROR    CreateGLWindow = False    End If    frm.Show    If Not InitGL() Then    KillGLWindow MsgBox "Initialize Failed!",vbExclamation,"Error    CreateGLWindow = False    End If        CreateGLWindow = True         End Function در داخل روتین بالا دو تابع دیگر به نام های KillGLWindow و InitGL فراخوانی شده اند که ما باید اونها رو در داخل ماجولمون بنویسیم. کار تابع CreateGLWindow در اصل ساخت Engin (موتور) گرافیکی است و توابع دیگر مانند KillGL و InitGL کارهایی از قبیل خطا زدایی انجام میدهند بنابر این تابع CreateGLWindow مهمترین تابع برنامه ماست چون که موتور گرافیکی ما رو میسازه. برای نوشتی تابع KillGLWindow کدهای زیر رو به ماجولتون اضافه کنین: Public Sub KillGLWindow()                                  If hrc Then    If wglMakeCurrent(0, 0) = 0 Then    MsgBox "Rilase DC and RC Failed.", vbInformation, "ShutDownError"                         End If    If wglDeleteContext(hrc) = 0 Then    MsgBox "Failed", vbInformation, "ERROR"                       '    End If    hrc = 0    End If     End Sub حالا باید تابع InitGL رو بنویسیم که کار این تابع پاک کردن صفحه نمایش و آماده سازی آن برای رسم اشکال سه بعدی است. برای نوشتن تابع InitGL کدهای زیر رو به ماجول برنامتون اضافه کنین: Public Function InitGL() As Boolean    glClearColor 0.5, 0.5, 1, 0    InitGL = True End Function. برای ادامه کار شما باید یک ماجول دیگه با نام DrawShape بسازین . برای این کار از منوی Project روی منوی Add Module کلیک کنید و خاصیت Name ماجول جدید خود را برابر با DrawShape کنید. حالا باید تابعی رو بنویسیم که کار رسم اشکال دو بعدی و سه بعدی رو برعهده داره.اسم این تابع DrawGLScene است که برای نوشتن آن کدهای زیر را به ماجول DrawShape اضافه کنین: Publice Function DrawGLScene() as Boolean glClear clrcolorbufferbit  DrawGLScene = True End Function حالا برنامه ای رو که ساختین اجرا کنین اگه کارها رو درست انجام داده باشین باید رنگ پشت زمینه فرم شما آبی رنگ بشه . قسمت 2 ما در این جلسه تمام سروکارمون با ماجول DrawShape است و در داخل تابع DrawGLScene باید کدهای مربوط به رسم اشکال را بنویسیم. برای رسم اشکال ما باید از تابع glBegin استفاده کنیم. تابع glBegin به OpenGL میگوید که ما آماده رسم اشکال هستیم. برای رسم اشکال بعد از فراخوانی تابع glBegin با کمک تابع glVertex و glColor ما مختصات راس های شکل مورد نظر و رنگ مورد نظر که به شکل پاشیده میشود را رسم میکنیم. در پایان نیز با تابع glEnd به OpenGL میگوییم که کار رسم کردن شکل ها به پایان رسیده است. تابع glBegin پارامتری به نام Mode دارد که به کمک پارامتر Mode ما میتوانیم اشکال هندسی مختلفی رسم کنیم . مثل : مربع و مستطیل و مثلث و چندضلعی های دیگر. پارامتر Mode مقادیریرا میتواند بگیرد که تعدادی از آنها در زیر آمده است: مقادیر توضیحات                   bmPoints رسم نقاط جدا از هم bmLines رسم خط که دو راس دارد bmLineStrip رسم خط های به هم پیوسته bmLineLoop رسم خط های به هم پیوسته bmTriangles رسم مثلث با دادن سه راس bmTriangleStrip رسم مثلث های به هم پیوسته bmTriangleFan رسم مثلث های به هم پیوسته با یک راس مشترک bmQuads رسم چهار ضلعی هایی که دارای یک راس مشترک هستند bmQuadStrip رسم چهار ضلعی های به هم پیوسته bmPolygon رسم چند ضلعی که ضلع های آن به تعداد دلخواه است رسم دایره در جلسات بعد توضیح خواهم داد این مقادیری که در جدول نوشتم توضیح خواهم داد ۱- bmPoints رسم نقطه: برای اینکه ما بتونیم یک نقطه روی فرممون رسم کنیم باید مقدار Mode رو به bmPoints ست کنیم. برای رسم یک نقطه در ماجول DrawShape و در تابع DrawGLScene  کدهای زیر رو بنویسید: Publice Function DrawGLScene() as Boolean glClear clrColorBufferBit   glBegin bmPoints glVertex2f  0,0 glEnd   DrawGLScene = True End Function در مثال بالا کدهایی که کمرنگ تر هستند رو برای یادآوری نوشتم. شما دیگه لازم نیست که یک تابع جدید DrawGLScene تعریف کنید چون این کار باعث ایجاد مشکل در برنامه میشه. در مثال بالا در خط سوم به کمک تابع glBegin به OpenGL فرمان دادیم که برایمانPoint(نقطه) رسم کند. در خط چهارم نیز به کمک تابع glVertex2f (که یکی از توابع بسیار مهم OpenGL هست) مختصات نقطه ای که باید رسم شود را نوشتیم.در خط پنجم نیز به رسم نقطه پایان دادیم. با اجرا کردن برنامه باید در وسط فرم شما یک نقطه رسم شده باشد. شما میتوانید هرچه قدر که نقطه دوست دارین رسم کنین با تابع glBegin bmPoints / glEnd رسم کنین. شاید شما بخواین که نقطه ای رو که رسم میکنین بزرگتر بشه و نقاطی رو رسم کنین که جای بیشتری میگیرن برای این کار از تابع glPointSize استفاده کنین. برای مثال شما در نمونه برنامه ای که در بالا آمده شد این تابع رو اضافه کنین و مقدار اون رو به 50 ست کنین به این صورت: glPointSize  50 با این کار نقطه شما ۵۰ برابر بزرگتر میشه. توجه : تابع glPointSize را حتما باید قبل از تابع glBegin  bmPoints تعریف کنین. گاهی وقت ها برای شما پیش میاد که  چرا وقتی نقطه ای رو بزرگ میکنیم دقت گرافیکی اون نقطه کم میشه و به شکل مربع در میاد برای برطرف کردن این مشکل و به عبارتی دندانه زدایی تابعی وجود دارد که از پر کاربردترین توابع openGL است. تابع glEnable : تابع glEnable مقادیری را میگیرد که در زیر فقط به مقدار glcPointSmooth اشاره میکنیم. مقدار glcPointSmooth برای افزایش دقت گرافیکی اشیا و همچنین دندانه زدایی آنهاست. برای اینکه بهتر با این تابع و مقدار تابع آشنا بشین بعد از تعریف کردن تابع glPointSize در خط بعد از آن تابع glEnable را تعریف کنید. به این صورت: glEnable  glcPointSmooth   ۲- bmLines  رسم خط : برای رسم خطوط در OpenGL از تابع glBegin و با ثابت bmLines استفاده میکنیم. در این تابع به جای اینکه یکبار تابع glVertex2f را فراخوانی کنیم باید دو تا تابع glVertex2f فراخوانی کنیم چراکه برای رسم خط به دو مختصات ( مختصات نقطه اول پاره خط و مختصات پایان رسم پاره خط) احتیاج داریم. glBegin  bmLines glVertex2f  -0.5 , 0 glVertex2f  0.5 , 0 glEnd در مثال بالا با دادن دو مختصات خطی برای ما رسم میشود. برای دندانه زدایی خطوط قبل از فراخوانی تابع glBegin تابع glEnable با  مقدار glcLineSmooth بنویسید. به صورت زیر: glEnable  glcLineSmooth تمرین جلسه دوم : ۱- نقطه ای رسم کنید که انداره اون ۲۵ برابر نقطه معمولی باشه و دندانه نداشته باشد. 0-    با رسم ۳ خط یک مثلث بسازین.             قسمت 3-------------------------------------------------------------------- ۳- bmTriangles  رسم مثلث: برای رسم مثلث های گوناگون ( متساوی ها و قائم الزاویه ها و ...) از تابع glBegin با دادن ثابت bmTriangles میتوانیم بعد از فراخوانی سه تابع glVertex2f (که رئوس اضلاع مثلث را شامل میشوند) مثلث مورد نظر را رسم کنیم. در مثال زیر یک مثلث با رنگ آبی در وسط فرم نمایش داده میشود. glBegin  bmTriangles glcolor3f  0, 0, 1 glvertex2f  0.5 , 0 glvertex2f  0 , 0.5 glvertex2f  -0.5 , 0 glEnd شاید با تابع glColor3f آشنا نباشید. تابع glColor3f باعث میشود که رنگ مورد نظر برای اشیا را مشخص کنیم. تابع glColor#f که # در آن از ۳ تا ۴ میباشد رنگ مورد نظر را تایین میکند. در ادامه درباره این تابع بیشتر صحبت میکنم.   ۴- bmQuads  رسم چهار ضلعی ها (از جمله لوزی / مربع / مستطیل / ذوزنقه و سایر چهار ضلعی ها: برای رسم چهار ضلعی ها مانند رسم سایر اشیا از تابع glBegin استفاده میکنیم و مقدار Mode تابع glBegin را برابر bmQuads می کنیم. در مثال زیر یک مستطیل در نیمه ی بالایی فرم رسم میکنیم: glBegin bmQuads glcolor4f  0,1,0 ,0 glVertex2f  0.5 , 0 glvertex2f  0.5 , 0.5 glvertex2f  -0.5 , 0.5 glvertex2f  -0.5 , 0 glEnd همان طور که در مثال بالا می بینید ما برای رسم مستطیل از چهار تابع glVertex2f استفاده کرده ایم. دلیل استفاده از تابع glVertex تایین رئوس اضلاع مستطیل است.   ۵- bmPolygon رسم چند ضلعی: برای رسم چند ضلعی باید بعد از فراخوانی تابع glBegin از ثابت bmPolygon استفاده کنیم . برای رسم چند ضلعی ها ما میتوانیم در داخل بلوک glBegin/glEnd به تعداد دلخواه تابع glVertex فراخوانی کنیم چرا که تعداد اضلاع به تعداد توابع glVertex بستگی دارد. در مثال زیر یک ۶ ضلعی بارنگ قرمز رسم میکنیم.    glBegin bmPolygon    glColor3f 1, 0, 0  glVertex2f 0.5, 0    glVertex2f 0.3, 0.5    glVertex2f -0.3, 0.5    glVertex2f -0.5, 0    glVertex2f -0.3, -0.5    glVertex2f 0.3, 0.5    glEnd   و اما رسم دایره: شما میتونین برای رسم دایره به کمک تابع glBegin و ثابت bmPolygon دایره رسم کنین ولی تعداد خطوطی که باید کد بنویسین خیلی زیاد میشه. Open GL برای رسم دایره از یک کتابخانه کمکی به نام glu استفاده میکند . در ادامه چگونگی رسم دایره. برای رسم دایره دیگر نمیتوانیم از تابع glBegin استفاده کنیم زیرا تابع glBegin ثابتی ندارد که بتواند دایره رسم کند. پس: برای رسم دایره شما ابتدا باید یک متغیر از نوع Variant تعریف کنید: Dim Q as Variant بعد از تعریف کردن متغیر باید اون رو برای رسم دایره آماده کنین به این صورت: Q = gluNewQuadric بعد باید رنگ مورد نظر خودتون رو به دایره بدین: glColor3f  0,0,1 بعد از اون هم باید چگونگی نمایش دایره رو مشخص کنیم( این موضوع برای استفاده سه بعدی کاربرد دارد و من در جلسه بعد به توضیح این تابع میپردازم اما بد نیست که بهتر با تابع آشنا بشین.) gluQuadricDrawStyle  Q , qdsLine در ادامه نیز به رسم دایره میپردازیم: gluSphere  Q , 0.5 , 20 , 20 بعد هم برنامه را اجرا میکنیم و نتیجه را می بینیم. مثال بالا در کل به این صورت است: Dim Q Q = gluNewQuadric glcolor3f 0 , 0 , 1 gluQuadricDrawStyle  Q , qdsLine gluSphere  Q , 0.5 , 20 , 20 تمرین ۱- چهار ضلعی رسم کنین که رنگ آن قرمز باشد. سپس در وسط آن چهار ضلعی یک مثلث به رنگ آبی رسم کنین. ۲- دایره ای رسم کنین که رنگ آن سبز باشد . قسمت 4-------------------------------------------------------------- در جلسه چهارم آموزش OpenGL یاد میگیرین که : ۱- اشیای خود را با چند رنگ مختلف رسم کنین. (برای مثال گوشه بالا سمت راست آبی و نیمه پایینی مربع قرمز باشد و وسط مربع نیز ترکیبی از این دو رنگ.) ۲- اشیای سه بعدی رسم کنین. 3-چگونگی متحرک سازی اشیای سه بعدی.       ۱- رنگ آمیزی اشیا: یکی از قابلیت های مهم OpenGL ترکیب رنگ های مختلف در یک شئ است. که در این کار هر راس از شئ رنگ متفاوتی میگیرد. برای این کار تابعی وجود دارد که نام آن glShadeModel است . این تابع به OpenGLمیگوید که اشیای ما فقط یک رنگ بگیرند یا  با چند رنگ مختلف رنگ آمیزی شوند. این تابع دو ثابت دارد: ۱: smFlat  فقط یک رنگ میتوانیم به شئ اختصاص دهیم. ۲: smSmooth  می توانیم ترکیبی از رنگها را به شی اختصاص دهیم. در حالت پیش فرض مقدار تابع glShadeModel برابر smFlat است که ما در این صورت فقط یک رنگ میتوانیم به شئ مان اختصاص دهیم. باید همیشه این نکته را توجه داشته باشید که تابع glShadeModel  قبل از بلوک glBegin / glEnd بیاید که در غیر این صورت خطا رخ میدهد. در مثال زیر یک مثلث با رنگ های قرمز و سبز و آبی رسم میکنیم: glShadeModel  smSmooth glBegin  bmTriangles glcolor3f  1,0,0 glVertex2f  0.5, 0 glColor3f  0 , 1 , 0 glVertex2f  0 , 0.5 glcolor3f  0 , 0 , 1 glVertex2f  -0.5 , 0 glEnd حالا برنامتون رو اجرا کنین و نتیجه رو مشاهده کنین. حالا برای تمرین مقدار تابع glShadeModel را برابر smFlat قرار دهید و نتیجه رو نگاه کنین.   ۲- رسم اشیای سه بعدی: برای رسم اشیای سه بعدی همانند رسم اشیای ۲ بعدی عمل میکنیم . یعنی اینکه با فراخوانی بلوکglBegin .../.../glEnd میتوانیم اشیای سه بعدی رسم کنیم. رسم اشیای سه بعدی بسیار بسیار ساده و آسان است و برای برنامه نویسان OpenGL لذت بخش ترین بخش برنامه نویسی است. ما برای رسم اشیای سه بعدی به جای استفاده از تابع glVertex2f از توابع glVertex3f و یا glVertex4f استفاده می کنیم . مطمئنم که فهمیدید . بله در تابع glVertex2f همان طور که از شماره ۲ آن معلوم است توانایی رسم اشیای ۲ بعدی را دارد اما توابع glVertex3f , glVertex4f بر اساس شماره آنها توانایی رسم اشیای سه بعدی را  دارند. شکل کلی تابع glVertex3f به صورت زیر است: glVertex3f  X , Y , Z که در این تابع x و y همان مختصات معمولی رئوس شئ هستند ولی z عمق شی را نشان می دهد. مختصات اشیای سه بعدی: کسانی که برنامه نویس هستند قطعا مختصات سه بعدی رو هم بلدند اما مختصات سه بعدی مختصاتی فرضی است و فقط با مغز انسان قابل درک است. در مثال بعد یک مثلث سه بعدی رسم میکنم: مثال: رسم مثلث ۳ بعدی: glShadeModel  smSmooth glBegin  bmTriangles glColor3f  1,0,0 glVertex3f  0.5 , 0, 0 glColor3f  0,1,0 glVertex3f  0 , 0.3 , 0 glColor3f  0,0,1 glVertex3f  -0.5 , 0 , 0 glEnd مثال بالا را اجرا کنین و نتیجه کدهایی که نوشتین رو نگاه کنین. ممکنه بعد از اجرای برنامه با خودتون بگین که ما یک مثلث سه بعدی رسم کردیم ولی چرا از یک بعد قابل روئیت بود ! برای اینکه از تمامی ابعاد و از همه طرف مثلث رو ببینین باید اون رو متحرک کنین.(یعنی حرکت بدین.)   ۳- متحرک کردن اشیای سه بعدی: برای متحرک کردن اشیای سه بعدی OpenGl تابعی دارد که نام آن glRotatef است . تابع glRotateF دارای ۴پارامتر است و شکل کلی آن به این صورت است: مختصات Z , مختصات Y , مختصات X , سرعت حرکت    glRotatef در این تابع هر چه مقدار سرعت حرکت بیشتر باشد شئ مورد نظر ما با سرعت بیشتری حرکت میکند . در مثال زیر یک مثلث سه بعدی با سه رنگ متفاوت را به حرکت در می آوریم: glRotatef  2 , 0.5 , 0.5 , 0.5 glShadeModel  smSmooth glBegin  bmTriangles glColor3f  1,0,0 glVertex3f  0.5,0,0 glColor3f  0,1,0 glVertex3f  0,0.3,0 glColor3f  0,0,1 glColor3f  -0.5,0,0 glEnd مثال بالا رو هم حتما اجرا کنین و نتیجه رو ببینین. همون طور که در مثال بالا مشاهده می کنین تابع glRotatef نیز باید در قبل و خارج از بلوک glBegin/glEndباشد قسمت 5 ------------------------------------------------------------ در این جلسه یاد میگیرین که: ۱- رسم مکعب: ۲- رسم کره: ۳- رسم منشور و اهرام( مکعب مثلث): ۴- رسم استوانه ( یا دیسک): در این جلسه چگونگی رسم مکعب و کره و اهرام را میدم و رسم استوانه را  برای جلسه بعد . چرا که رسم استوانه و دیسک کاملا با بقیه مکعب ها فرق داره و مستلزم اختصاص دادن وقت بیشتری برای آموزش آن داره پس برای رسم مکعب خودتون رو آماده کنین.   ۱- رسم مکعب (مکعب مربع و مستطیل): رسم مکعب های سه بعدی بسیار ساده است و ما با استفاده از بلوک glBegin/glEnd مکعب های سه بعدی خودمان را رسم می کنیم. برای اینکه چگونگی رسم مکعب های سه بعدی رو یاد بگیرین خطوط زیر را با دقت بخونین: می دونید که مربع دارای چهار راس است . همچنین از چهار پاره خط تشکیل شده است. یک مکعب مربع یا مستطیل از شش تا چهار ضلعی تشکیل شده است . همچنین این شش تا چهار ضلعی دارای ۱۲ پاره خط است . برای درک بهتر شما یک مثال میزنم تا بهتر بفهمین. در مثال زیر با استفاده از رسم شش تا مربع یک مکعب مستطیل میسازیم: glShadeModel smSmooth glRotatef  1,0.5,0.3,0.2     glBegin bmQuads         glColor3f 0#, 1#, 0#         glVertex3f 0.5, 0.5, -0.5         glVertex3f -0.5, 0.5, -0.5         glVertex3f -0.5, 0.5, 0.5         glVertex3f 0.5, 0.5, 0.5         glColor3f 1#, 0.5, 0#         glVertex3f 0.5, -0.5, 0.5         glVertex3f -0.5, -0.5, 0.5         glVertex3f -0.5, -0.5, -0.5         glVertex3f 0.5, -0.5, -0.5         glColor3f 1#, 0#, 0#         glVertex3f 0.5, 0.5, 0.5         glVertex3f -0.5, 0.5, 0.5         glVertex3f -0.5, -0.5, 0.5         glVertex3f 0.5, -0.5, 0.5         glColor3f 1#, 1#, 0#         glVertex3f 0.5, -0.5, -0.5         glVertex3f -0.5, -0.5, -0.5         glVertex3f -0.5, 0.5, -0.5         glVertex3f 0.5, 0.5, -0.5         glColor3f 0#, 0#, 1#         glVertex3f -0.5, 0.5, 0.5         glVertex3f -0.5, 0.5, -0.5         glVertex3f -0.5, -0.5, -0.5         glVertex3f -0.5, -0.5, 0.5         glColor3f 1#, 0#, 1#         glVertex3f 0.5, 0.5, -0.5         glVertex3f 0.5, 0.5, 0.5         glVertex3f 0.5, -0.5, 0.5         glVertex3f 0.5, -0.5, -0.5     glEnd مثال بالا رو اجرا کنین و نتیجه رو نگاه کنین.   ۲- رسم کره: رسم کره نیز همانند رسم دایره است و هیچ فرقی ندارد . دایره ای را که در جلسات پیش رسم کردیم سه بعدی بود اما به علت اینکه متحرک نبود از همه طرف قابل دیدن نبود . در مثال زیر یک کره به شعاع ۵/۰ رسم میکنیم. Dim Q Q = gluNewQuadric glColor4f  1 , 1 , 0 , 1 gluQuadricDrawStyle  Q , qdsLine glSphere  Q , 0.5 , 25 , 25 شاید برای شما این سوال پیش آید که آیا تابع glColor4f هم وجود دارد؟ باید در پاسخ شما بگم که بله البته که وجود داره. شکل کلی تابع glColor4f به صورت زیر است: مقدار آلفا , رنگ آبی , رنگ سبز , رنگ قرمز   glColor4f در تابع بالا مقدار آلفا رقیق یا غلیظ بودن سطح رو مشخص می کنه. به عبارت دیگه مقدار نوری که پاشیده می شود از سطح(شئ) بگذرد یا نگذرد. (در جلسات بعدی چگونگی نورپردازی نیز آموزش داده می شود.) تمرین ۱- سعی کنین که یک مکعب متوازی الاضلاع رسم کنین و اون رو متحرک کنین. ۲- قسمت های اصلی کره زمین ( پوسته و گوشته و هسته) را با رسم سه کره شبیه سازی کنین و سعی کنین هر قسمت یک رنگ داشته باشد.(مثلا پوسته آبی , گوشته نارنجی , هسته قرمز)     قسمت 6 ------------------------------------------------------- در این قسمت یاد میگیرین که دیسک رسم کنین و در ادامه نیز چگونگی چسباندن عکس به اشکال سه بعدی رو یاد میگیرین. ۱- رسم استوانه: ۲- رسم دیسک: ۳- رسم دیسک مجهول(مثلا دیسک نیم دایره)   برای رسم استوانه و دیسک و دایره ما از کلاس Quadric استفاده میکنیم.به طور کلی هر شئی که دایره در آن به کار رفته باشد وابسته به کلاس Quadric است. ۱ - رسم استوانه: برای رسم استوانه ما ابتدا یک متغیر از نوع Variant تعریف می کنیم . سپس متغیر را برابر کلاس Quadricقرار میدهیم بعد از آن هم با توابع کتابخانه glu اشکال مورد نظر خود را رسم میکنیم.کدهای زیر رو درDrawGLScene (مکان رسم اشکال) بنویسید: Public  Xrot , Yrot , Zrot  as GLfloat Public Function DrawGLScene() as Boolean glClear  clrColorBufferBit glLoadIdentity glRotatef  xrot , 1 , 0 , 0 glRotatef  yrot , 0 , 1 , 0 glRotatef  zrot , 0 , 0 , 1   Dim Q Q = gluNewQuadric gluQuadricDrawStyle  Q , qdsLine glColor4f  1,1,1,1 gluCylinder Q , 0.3 , 0.3 , 0.8 , 15 , 15   Xrot = Xrot + 0.3 Yrot = Yrot + 0.2 Zrot = Zrot + 0.4   DrawGLScene = True End Function کدهایی که کمرنگ هستند تکراری هستند و فقط برای یادآوری بود که کدهای مربوط به رسم اشیا باید در این فانکشن نوشته شوند. تحلیل کد برنامه: در خط اول ابتدا سه متغیر برای متحرک کردن شئ نوشتیم.در خط چهارم به کمک تابعglLoadIdentity شئ خود را ثابت و بدون حرکت کردیم تا حرکت را به عهده متغیر ها قرار دهیم. خط های ۸ و۹ و ۱۰ و ۱۱ و ۱۲ را برای رسم استوانه نوشتیم. خط های ۱۳ و ۱۴ و ۱۵ هم برای متحرک کردن شئ است. و اما شکل کلی تابع gluCylinder (تابع رسم استوانه): gluCylinder خطوط عمودی , خطوط افقی , ارتفاع استوانه , شعاع دایره بالایی استوانه , شعاع دایره پایینی  , متغیر به همین سادگی شما یک استوانه رسم کردید.   ۲ - رسم دیسک : رسم دیسک نیز مانند رسم استوانه است با این تفاوت که به جای استفاده از تابعgluCylinder باید از تابع gluDisk استفاده کنیم. کدهای زیر رو در فانکشن DrawGLScene بنویسید: Public Xrot , Yrot , Zrot  as  GLfloat Public Function DrawGLScene () as Boolean glClear  clrColorBufferBit glLoadIdentity glRotatef  xrot , 1 , 0 , 0 glRotatef  yrot , 0 , 1 , 0 glRotatef  zrot , 0 , 0 , 1   Dim Q Q = gluNewQuadric gluQuadricDrawStyle  Q , qdsLine glColor4f  1,0,0,1 gluDisk Q , 0.1 , 0.7 , 15 , 15   Xrot = Xrot + 0.3 Yrot = Yrot + 0.2 Zrot = Zrot + 0.4   DrawGLScene = True End Function   ۳ - رسم دیسک مجهول(مثل دیسک نیم دایره): برای رسم دیسک مجهول به جای استفاده از تابع gluDisk باید از تابع gluPartialDisk استفاده کرد. کدهای زیر رو هم امتحان کنین. Public Xrot , Yrot , Zrot as GLFloat Public Function DrawGLScene() as Boolean glClear  clrColorBufferBit glLoadIdentity glRotatef  xrot , 1 , 0 , 0 glRotatef  yrot , 0 , 1 , 0 glRotatef  zrot , 0 , 0 , 1   Dim Q Q = gluNewQuadric gluQuadricDrawStyle  Q , qdsLine glColor4f  1,0,0,1 gluPartialDisk  Q , 0.1 , 0.7 , 15 , 15 , 0 , 250   Xrot = Xrot + 0.3 Yrot = Yrot + 0.2 Zrot = Zrot + 0.4   DrawGLScene = True End Function شکل کلی تابع gluPartialDisk همانند تابع gluDisk است و فقط یک پارامتر بیشتر دارد(پارامتر آخر)  و این پارامتر مشخص کننده مقدار مجهولی دیسک است
+ نوشته شده توسط امین حاجی علیزاده در چهارشنبه دوم آذر ۱۳۹۰ و ساعت 13:33 |