قسمت دوم آموزش OpenGL

به نام خدا

با سلام خدمت تمامی دوستان !!!

امروز درباره ساخت اشیای دو بعدی در ویژوال بیسیک و رنگ آمیزی آنها صحبت میکنیم.

ابتدا یه مروری به جلسه قبل میکنیم و همون طور که قول داده بودم کدهای جلسه اول رو براتون به صورت کلی مینویسم (اگه میخوایین این کدها رو بنویسین پیشنهاد میکنم کپی کنید.):

کدهای زیر برای ماجول OpenGLMain است:

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 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) PFD.nVersion = 1 PixelFormat = ChoosePixelFormat(frm.hDC, PFD) 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 "" 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 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 Public Function InitGL() As Boolean glClearColor 0.5, 0.5, 1, 0 InitGL = True End Function

توجه:اگر جلسه اول آموزش OpenGL رو نخوندی حتما بخونش.

کدهای زیر برای ماجول DrawShape هست:

Public Function DrawGLScene() As Boolean glClear clrColorBufferBit DrawGLScene = True End Function

و اما درس امروز:

ما در این جلسه تمام سروکارمون با ماجول 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


فعلا کافیه . برای اینکه بهتر OpenGL رو یادبگیرید باید خودتون تمرین کنید برای تمرین این جلسه شما:

۱- نقطه ای رسم کنید که انداره اون ۲۵ برابر نقطه معمولی باشه و دندانه نداشته باشد.

۲- با رسم ۳ خط یک مثلث بسازین.

امیدوارم موفق باشی .


مطالب مشابه :


لیست بعضی از آژانس های تور کیش

وب سایت های رزرواسیون آژانس های مسافرتی (نرم افزار سپهر تعرفه قیمت ) HRC www.IranHRC.irگروه




همه چیز در مورد دیوار چین

مهمترين ابزار آن دوربين با قدرت تفكيك بالا يا hrc است كه مي تواند از يك آژانس فضايي اروپا در




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

آژانس بین المللی (سه روز پس از حادثه حمله به کشتی های آزادی) با صدور قطعنامه ای (a/hrc/res/14/1)




ماشینکاری سریع (High Speed Machining )

برای بیشتر قطعات فولادی که تا حدود ۳۲-۴۲ hrc سخت شده اند، گزینه های ماشین کاری آژانس




سایت برخی از سازمان ها و نهادهای مهم بین المللی

آشنایی با شورای حقوق بشر سازمان ملل (hrc) آشنایی با آژانس فضایی اتحادیه اروپا (esa)




قسمت دوم آموزش OpenGL

منزلگه ققنوس - قسمت دوم آموزش OpenGL - bmPoints: رسم نقاط جدا از هم: bmLines: رسم خط که دو راس دارد




سازمان ملل متحد و حمایت از حقوق زنان در نیم قرن اخیر

و مکانیزم‌های معاهده‌ای حقوق بشری، دادگاه‌های بین‌المللی، آژانس‌های A/HRC /12/46,27




ديوار بزرگ چين

پروبا ماهواره کوچکی است که توسط آژانس مهمترین ابزار آن دوربین با قدرت تفکیک بالا یا hrc




چارترچیست؟

چشم انداز - چارترچیست؟ - - چشم انداز طنز-جوک-اس ام اس




برچسب :