تبليغاتX
آموزش کامپیوتر و برنامه نویسی - قسمت دوم آموزش OpenGL
این وبلاگ جهت آموزش کامپیوتر و برنامه نویسی ایجاد شده است.

به نام خدا

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

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

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

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

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

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

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

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

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

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

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

+ نوشته شده در  یکشنبه بیست و پنجم فروردین 1387ساعت 10:30 بعد از ظهر  توسط مسعود لپه چی  |