قسمت دوم آموزش 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
چارترچیست؟
چشم انداز - چارترچیست؟ - - چشم انداز طنز-جوک-اس ام اس
برچسب :
آژانس HRC