|
|
|
|||||||||||||||||||||||||
|
به نام خدا با سلام خدمت تمامی دوستان !!! امروز درباره ساخت اشیای دو بعدی در ویژوال بیسیک و رنگ آمیزی آنها صحبت میکنیم. ابتدا یه مروری به جلسه قبل میکنیم و همون طور که قول داده بودم کدهای جلسه اول رو براتون به صورت کلی مینویسم (اگه میخوایین این کدها رو بنویسین پیشنهاد میکنم کپی کنید.): کدهای زیر برای ماجول OpenGLMain است: توجه:اگر جلسه اول آموزش OpenGL رو نخوندی حتما بخونش. کدهای زیر برای ماجول DrawShape هست: و اما درس امروز: ما در این جلسه تمام سروکارمون با ماجول DrawShape است و در داخل تابع DrawGLScene باید کدهای مربوط به رسم اشکال را بنویسیم. برای رسم اشکال ما باید از تابع glBegin استفاده کنیم. تابع glBegin به OpenGL میگوید که ما آماده رسم اشکال هستیم. برای رسم اشکال بعد از فراخوانی تابع glBegin با کمک تابع glVertex و glColor ما مختصات راس های شکل مورد نظر و رنگ مورد نظر که به شکل پاشیده میشود را رسم میکنیم. در پایان نیز با تابع glEnd به OpenGL میگوییم که کار رسم کردن شکل ها به پایان رسیده است. تابع glBegin پارامتری به نام Mode دارد که به کمک پارامتر Mode ما میتوانیم اشکال هندسی مختلفی رسم کنیم . مثل : مربع و مستطیل و مثلث و چندضلعی های دیگر. پارامتر Mode مقادیریرا میتواند بگیرد که تعدادی از آنها در زیر آمده است:
این مقادیری که در جدول نوشتم در همین جلسه دونه دونه توضیح خواهم داد.(پس نگران نباشید.) ۱- 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 بعد از ظهر توسط مسعود لپه چی
|
|
||||||||||||||||||||||||||