تبلیغات

نسل باران

|

بانک شماره و موبایل popup window

قالب های حرفه ای وردپرس

|

پلاگین وردپرس popup window

وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد - آموزش مقدماتی opengl
نسل باران
وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد
امام علی (ع) می فرمایند: « زکات العلم نشرهُ» زکات علم نشر آن است.
به سایت ما خوش آمدید
توابع glEnable و glDisable در OpenGL

امتحانات ما یه چند روزیه تموم شده و توی این چندوقتی که مشغول امتحانات شده بودیم بیشتر آموزشها متوقف شده بودند .از امروز سعی می کنم روند آموزشهایی رو که شروع کردم رو ادامه بدم و اگه مشکلی پیش نیاد تا عید بتونم کل آموزشها رو حداقل تا سطح متوسط تموم کنم .
امید وارم دوستان دیگه هم توی این را به ما کمک کنند تا بتونیم هدف اصلی سایت - ارائه یه سایت آموزشی جامع در مورد بازی سازی - برسیم.

در مباحث قبلی با بسیاری از ثابت ها و توابع آشنا شدیم در این جلسه می خواهیم به معرفی دو تابع پر کاربرد دیگر بپردازیم.

تابع glEnable
ازاین تابع که یکی از پرکاربردترین توابع توی OpenGl فعال کردن قابلیتهای تعریف شده استفاده می شود.منظورمان از قابلیت های تعریف شده چیست ؟هموانطور که قبلاً گفتیم ما بایستی OpenGl را شبیه یک ماشین فرض کنیم .برای مثال شما فرض کنید یک چاپگر چند منظوره در اختیار دارید این چابگر هم عمل فکس هم کپی و هم اسکن را برای شما انجام میدهد و شما علاوه بر آن به عنوان چابگر از آن استفاده می کنید .در اصل همه این مزایا در چاپگر وجود دارد و به نوعی مابایستی این قابلیتها را فعال کنیم تا بتوانیم از انها استفاده کنیم برای فکس ما بایستی خط تلف را به آن متصل کنیم و یا برای کپی بایستی از دکمه کپی روی آن استفاده کنیم و یا برای عمل اسکن بایستی نرم افزار آن را نصب کنیم و کارهای دیگر .در OpenGL هم قضیه شبیه همین دستگاه چاپگر می باشد مثلاً ما نوری را در صحنه ایجاد می کنیم ولی صحنه فاقد نور می باشد چرا که قابلیت نوردهی ممکن است فعال نشده باشد حال ما چگونه باید آن را فعال کنیم ؟
برای اینکار از تابع glEnable استفاده می کنیم .شکل کلی آن به صورت زیر می باشد:

void glEnable(GLenum  cap);

با استفاده از پارامترهای تابع فوق ما می توانیم بسیار از قابلیتهای OpenGL را که به صورت پیشفرض غیرفعال می باشند را فعال کنیم .
این تابع می تواند ثابت های زیر را به عنوان پارمترهای خود بگیرد:

GL_ALPHA_TEST
GL_AUTO_NORMAL
GL_BLEND
GL_CLIP_PLANEi
GL_COLOR_LOGIC_OP
GL_COLOR​_MATERIAL
GL_CULL_FACE
GL_DEPTH_TEST
GL_DITHER
GL_FOG
GL_INDEX_LOGIC_OP
GL_LIGHT​i
GL_LIGHTING
GL_LINE_SMOOTH
GL_LINE_STIPPLE
GL_LOGIC_OP
GL_MAP1_COLOR_4
GL_MAP1​_INDEX
GL_MAP1_NORMAL
GL_MAP1_TEXTURE_COORD_1
GL_MAP1_TEXTURE_COORD_2
GL_MAP1_TE​XTURE_COORD_3
GL_MAP1_TEXTURE_COORD_4
GL_MAP1_VERTEX_3
GL_MAP1_VERTEX_4
GL_MAP2_​COLOR_4
GL_MAP2_INDEX
GL_MAP2_NORMAL
GL_MAP2_TEXTURE_COORD_1
GL_MAP2_TEXTURE_COO​RD_2
GL_MAP2_TEXTURE_COORD_3
GL_MAP2_TEXTURE_COORD_4
GL_MAP2_VERTEX_3
GL_MAP2_VE​RTEX_4
GL_NORMALIZE
GL_POINT_SMOOTH
GL_POLYGON_OFFSET_FILL
GL_POLYGON_OFFSET_LIN​E
GL_POLYGON_OFFSET_POINT
GL_POLYGON_SMOOTH
GL_POLYGON_STIPPLE
GL_SCISSOR_TEST
G​L_STENCIL_TEST
GL_TEXTURE_1D
GL_TEXTURE_2D
GL_TEXTURE_GEN_Q
GL_TEXTURE_GEN_R
GL_​TEXTURE_GEN_S
GL_TEXTURE_GEN_T



نگران نباشید نیازی به حفظ کردن آنها ندارید به مرور با کاربرد هریک از این توابع آشنا می شوید.

مثال :اگر یادتان باشد در جلسات قبلی ما یک سوال مرح کردیم که یک نقطه با اندازه 50 ایجاد کنید اگر آن را انجام بدهید می بینید که نقطه ما یک چهار ضلعی می باشد حال می خواهیم با استفاده تابع glEnable لبه های آن را گرد کنیم .

// Includes Header Files
#include <windows.h>
#include "GL.H"
#include "GLU.H"
#include "glut.h"
// Include Library Files
#pragma comment(lib,"OPENGL32.LIB")
#pragma comment(lib,"glut32.lib")
#pragma comment(lib,"GLU32.LIB")
//***************************

void create_1(void)
{
	glColor3f(0.0,1.0,0.0);
	gluOrtho2D(-15.0,15.0,-15.0,15.0);
	glPointSize(15);
	glEnable (GL_POINT_SMOOTH);
	glBegin(GL_POINTS);
		glVertex2f(9.0,9.0);
		glEnd();
	glDisable (GL_POINT_SMOOTH);
	glBegin(GL_POINTS);
		glVertex2f(6.0,9.0);
		glVertex2f(9.0,1.0);
	glEnd();
	glFlush();
}

void display(void)
{
	glClearColor(1.0,1.0,1.0,1.0);
	glClear(GL_COLOR_BUFFER_BIT);
	create_1();
	glFlush();

}

int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE hprevInstance,
				   LPSTR argv,
				   int argc)
{
	glutInit(&argc,&argv);
	glutInitDisplayMode(GLUT_SINGLE/*,GLUT_RGB*/);
	glutInitWindowSize(500,500);
	glutInitWindowPosition(200,200);
	glutCreateWindow("khoramsoft.com");
	glutDisplayFunc(display);
	glutMainLoop();
}

تابع glDisable
اگر به کدهای بالا توجه کنید ما در خط 16 از تابع glEnable با پارامتر GL_POINT_SMOOTH استفاده کرده ایم این ثابت باعث فعال کردن حالت Smooth برای نقاط در صحنه می شود بعد از کامپایل برنامه خواهید دید که لبه های نقطه ما گرد شده و از حالت چهار ضلعی خارج و به دایره نزدیکتر شده است.
در این مثال از یک تابع دیگر به نام glDisable استفاده کردیه ایم که دقیقاً همان ثابت GL_POINT_SMOOTH را به عنوان پارامتر خود گرفته است کار این تابع چیست؟
همانطور که از اسم تابع مشخص است از این تابع برای غیر فعال کردن قابلیت مورد نظرمان استفاده می کنیم .در این مثال ما می خواهیم حالت Smooth فقط برای نقطه اول اعمال شود و سایر نقاط به صورت چهار ظلعی باقی بمانند بنابراین بعد از نقطه اول این قابلیت را با استفاده از تابع glDisable غیر فعال کرده ایم.
شکل کلی این تابع به صورت زیر می باشد:

void glDisable(GLenum cap);
 

پارامترهایی که این تابع می تواند دریافت کند همان پارمترهای تابع glEnable می باشد.

به ثابتهایی که این دو تابع می توانند به عنوان پارمترهای خود قبول کنند توجه کنید بسیار از این ثابتها شبیه همدیگر می باشند و فقط در یک چیز اختلاف دارند مثلاً همین ثابت Smooth سه ثابت می باشد که یکی برای نقاط یکی برای خطوط و یکی برای پالیگانها کاربرد دارد .

GL_POINT_SMOOTH
GL_LINE_SMOOTH
GL_POLYGON_SMOOTH
برای همین بود که گفتیم نیاز به حفظ کردن آنها ندارید زیرا به راحتی با تمرین و در آینده همه کاربرد آنها را یاد خواهید گرفت.






نوع مطلب : گرافیک کامپیوتری، opengl، 
برچسب ها :
لینک های مرتبط :

1396/09/17 16:11
Hello! This is my 1st comment here so I just wanted to give a quick shout out
and say I really enjoy reading through your posts. Can you
recommend any other blogs/websites/forums that go over the same topics?
Thank you so much!
1396/05/30 17:22
It's difficult to find experienced people for this topic, but you seem like you know what you're talking about!
Thanks
1396/05/17 17:23
hello!,I like your writing very so much! share we
keep up a correspondence extra approximately your post on AOL?
I need an expert in this area to resolve my problem.
May be that is you! Having a look ahead to see you.
1396/01/25 17:43
Valuable information. Lucky me I found your site unintentionally, and I am shocked why this accident didn't happened earlier!
I bookmarked it.
1391/03/16 18:26
درضمن من این کار رو با visual studio 2010 انجام دادم و تمام فایلهای مورد نیاز رو در جای خودش کپی کردم
s1390

با 2010 امتحان نکردم
1391/03/16 18:23
سلام

1. من یه برنامه نمونه رو که روسیستم دیگه اجراشده رو سیستم خودم اجرا می کنم و تو پنجره open gl چیزی نمیکشه اینم عکس
http://up98.org/upload/server1/02/j/bttzjewj8u439mvwc5b.png

2. تو چند قسمت از آموزش ها این متن هست: "دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید."


s1390

با سلام
1- در صورت امکان،سورس برنامه رو بفرستید(با یه عکس سیاه که چیزی مشخص نیست)
1391/03/16 00:59
سلام
مطالب open gl که گذاشتی مفیده فایده واقع شد
دو تا سوال:
ا. من تمام مراحل اجرای برنامه opengl با C++ , C# رو به طور دقیق انجام دادم و وقتی که یه کد نمونه رو هم اجرا می کنم هیچ خطایی نمیده ولی توی فرم هم چیزی نمیکشه به نظر شما مشکل کار من کجاست؟

2. برای ثبت نام و دریافت کد عبور باید چکار کنم؟

با تشکر
s1390

با سلام
درمورد سوال 1:
با سی یا سی ++ یا سی شارپ برنامه تون رو نوشتید چون سی شارپ یه خورده فرق داره.
این مشکل دلایل زیادی میتونه داشته باشه نمیشه مستقیم گفت کدوم قسمته مثلا حتی موقع تعریف مثلث اگر دو تا ورتکس بهش بدین خروجی نداره یا اگر glflush نزنین خروجی نداره
اگر تونستید نمونه سورس بزارید تا بیشتر کمکتون کنم
درمورد سوال 2:
منظورتون از ثبت نام کدومه؟
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ


امام صادق(ع) می فرمایند: «اِنُّ لِکلِّ شیءٍ زکاةً و زکاةُ العِلمِ اَنْ یُعَلِّمَهُ اَهلَهُ» برای هر چیزی زکاتی است،و زکات علم آن است که آن را به اشخاص شایسته بیاموزید. (منبع: تحف.ص 364)

امام علی (ع) می فرمایند: « زکات العلم نشرهُ» زکات علم نشر آن است.

مدیر وبلاگ : s1390
مطالب اخیر
نویسندگان
صفحات جانبی
آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
فرم تماس
نام و نام خانوادگی
آدرس ایمیل
امکانات دیگر
دریافت كد ختم صلوات
کلیه حقوق این وبلاگ برای وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد محفوظ است