تبلیغات

نسل باران

|

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

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

|

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

وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد - آموزش مقدماتی opengl
نسل باران
وب سایت دانشجویان کارشناسی و ارشد کامپیوتر خرم آباد
امام علی (ع) می فرمایند: « زکات العلم نشرهُ» زکات علم نشر آن است.
به سایت ما خوش آمدید
در مورد ثابت GL_TRIANGLES به عنوان آرگومان glBeginتوضیح دادیم اما GL_TRIANGLES دو حالت دیگر دارد که در واقع هر کدام کاربردهای خودشان را دارند.

GL_TRIANGLE_STRIP

با استفاده از این ثابت ما می توانیم با استفاده از نقاط کمتر مثلث های بیشتری را ترسیم کنیم.این ثابت باعث میشود که بعد از ترسیم اولین مثلث با استفاده از سه نقطه اول ما بتوانیم از نقاط استفاده شده برای ترسیم مثلث هایی بعدی استفاده کنیم.
تعداد نقاطی که ممکن است برای ترسیم مثلث بعدی نیاز داشته باشیم بستگی به شکل و هنر ما در نوشتن درست برنامه می باشد ممکن است ما بتوانیم یک شکل را با استفاده از 5 نقطه به راحتی ترسیم اما فرد دیگری با استفاده از 6 نقطه آن را ترسیم کند. نگران نباشید به مرور یاد می گیرید که چگونه با کمترین تعداد نقاط بهترین حالت اشیاء را ترسیم کنید.البته کسانی که ریاضیات قوی تری داشته باشند به مراتب موفق تر از کسانی هستند که با ریاضیات مشکل دارند.

مثال:یک چهر ضلعی را با استفاده از دو مثلث ایجاد می کنیم:

void Create_Tetrahedron(void)
{    
	  glBegin(GL_TRIANGLE_STRIP);

	    glVertex2f(0.0,0.0);
	    glVertex2f(6.0,0.0);
	    glVertex2f(0.0,6.0);
	    glVertex2f(6.0,6.0);
	  glEnd();
    glFlush();   
}

نکته :کافیه این تابع را در برنامه پست های قبلی کپی نمایید و سپس در تابع Display آن را فراخوانی کنید.

با استفاده از این تابع ما یک چهار ضلعی (مربع) رو طراحی کردیم .همانطور که میدانید هر مربع چهار ضلع قائم دارد بنابراین برای ترسیم آن ما از دو مثلث قائم الزایه استفاده کره ایم.
شاید بپرسید دو زایه قائم دیگر چگونه ایجاد می شوند؟به شکل زیر نگاه کنید:

[attachment=696]
همانطور که می بینید مجموع زوایه های داخلی یک مثلث 180 درجه می باشد:

A+B+C =180
با توجه به شکل ب می بینید که یک چهار ضلعی با چهار زاویه قائم (مستطیل،مربع و...) از دو مثلث قائم الزایه تشکیل گردیده است .
اما توضیح مثال:
با استفاده از سه نقطه اول اولین مثلث رو ترسیم نموده ،یعنی خطوط 4-5-6 سپس یک نقطه در مختصات (6,6) تعریف کرده ایم ،GL_TRIANGLE_STRIP باعث می شود که دونقطه دیگر یعنی نقاطی که در خطوط 5-6 تعریف شده اند به همراه نقطه جدید بکار گرفته شده و یک مثلث دیگر نیز ترسیم شود می بینید که ما به راحتی توانستیم فقط با تعریف یک نقطه جدید یک مثلث دیگر نیز ترسیم و یک شکل هندسی دیگر را ترسیم کنیم.




ثابت GL_TRIANGLE_FAN

از این ثابت برای ترسیم مثلث های با یک مرکز مشتر استفاده می کنیم .با سه نقطه اول یک مثلث ترسیم می شود .و با تعریف نقطه بعدی یک مثلث دیگر نیز رسم می شود .
اما این همان کاری است که ثابت GL_TRIANGLE_STRIP انجام میدهد پس تفاوت این دو ثابت در چیست؟
در ثابت GL_TRIANGLE_STRIP هر دو راس بعدی با راس جدید تشکیل یک مثلث را میدهند اما در GL_TRIANGLE_FAN اولین نقطه یک راس مشترک در بین همه مثلث ها می باشد .به مثال زیر توجه کنید:

void Create_Tetrahedron(void)
{    
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
	  glBegin(GL_TRIANGLE_FAN);
	   glVertex2f(-0.0, 0.0); 
	   glVertex2f(-5.0, 0.0); 
	   glVertex2f(-5.0, 5.0); 
	   glVertex2f(0.0, 5.0); 
	   glVertex2f(5.0, 5.0); 
	  glEnd();
    glFlush();   
}

تابعی که در خط 3 استفاده کردیم رو در آینده به طور کامل توضیح خواهیم داد .این تابع را برای درک بهتر مطلب به برنامه اضافه کرده ایم.
اولین مثلث با استفاده از نقاطی که در خطوط 5-6-7 تعریف کرده ایم ایجاد می شود .سپس با استفاده از نقاط خطوط 5-7-8 مثلث دوم () و با استفاده از نقاط تعریف شده در خطوط 5-8-9 مثلث سوم () ایجاد می شود.متوجه می شوید که در همه مثلث ها خط 5 که اولین نقطه تعریف شده ما می باشد در همه مثلث ها وجود دارد فدر واقع با اینکار ما مثلث های با یک مرکز یکسان ترسیم کرده ایم .

به شکل های زیر توجه کنید:

[attachment=700] [attachment=699]

همانطور که می بینید نقاط 1 و p در همه مثلث ها مشترک می باشد.

نکته خیلی مهم: در رسم اجسام چند ضلعی همانطور که گفتیم نحوه تعریف نقاط خیلی اهمیت دارد .در OpenGL نحوه تعریف نقاط برای ترسیم در جهت خلاف عقربه های ساعت (پاد ساعتگرد) می باشد. اگر ما نقاط را در جهت عقربه های ساعت تعریف کنیم در واقع پست شکل رو ترسیم کرده ایم در محیط 2 بعدی شاید این تعاریف زیاد قابل درک نباشد، اما در محیط سه بعدی و یا مباحثی مثل نورپردازی اهمیت زیادی پیدا می کتد .





ثابت GL_QUADS
این ثابت هنگامی که به عنوان آرومان تابع glbegin قرار می گیرد،باعث می شود که OpenGL با استفاده از هر چهار نقطه یک چهار ضلعی رسم کند.توجه کنید که این ثابت از هر چهار نقطه به صورت مجزا یک چهار ضلعی رسم می کند و اگر تعداد نقاط ما مضربی از 4 نباشد ممکن است باعث بروز خطا در برنامه گردد.

مثال:

void Create_Quad1(void)
{	
	  glBegin(GL_QUADS);
	   glVertex2f(2.0, 0.0); 
	   glVertex2f(2.0, 6.0); 
	   glVertex2f(6.0, 6.0); 
	   glVertex2f(6.0, 2.0); 
	  glEnd();
    glFlush();   
}

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

مثال:یک لوزی را با استفاده از ثابت GL_QOADS رسم می کنیم.

void Create_Quad1(void)
{	
	  glBegin(GL_QUADS);
	   glVertex2f(2.0, 4.0); 
	   glVertex2f(0.0, 0.0); 
	   glVertex2f(2.0, -4.0); 
	   glVertex2f(4.0, 0.0); 
	  glEnd();
    glFlush();   
}





ثابت GL_QUAD_STRIP
این ثابت هم تقریباً کاربردی شبیه ثابت GL_TRIANGLE_STRIP با این تفاوت که با استفاده از آن می توانیم شکل های چهار ضلعی بهم پیوسته را ایجاد کنیم .این ثابت بعد از رسم چهار ضلعی اول با استفاده از چهار نقطه اول از دو نقطه قبلی به همراه دو نقطه جدید استفاده و یک چهار ضلعی دیگر را ترسیم می کند.
اگر مطالب قبلی را مطالعه کرده باشید میدانید که برای تعریف نقاط بایستی حالت پاد ساعتگرد و ساعت گرد را رعایت کنیم و در هنگام استفاده از ثابت GL_QUAD_STRIP بایستی به این نکته خیلی دقت کنیم ،در غیر این صورت ممکن است حاصل کار ما آن چیزی که می خواهیم نباشد .به مثال زیر توجه کنید.
مثال :

void Create_Quad1(void)
{
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glColor3f(0.0,0.0,1.0);    
	   glBegin(GL_QUAD_STRIP);    
		  glVertex2f(-12.0,-15.0);//v1
		  glVertex2f(18.0,-15.0);//v2
		  glVertex2f(-12.0,0.0);//v3
		  glVertex2f(18.0,0.0);//v4
		  glColor3f(0.0,1.0,0.0);
		  glVertex2f(-12.0,8.0);//v5
		  glVertex2f(18.0,8.0);//v6
		  glColor3f(1.0,0.0,0.0);
		  glVertex2f(-12.0,16.0);//v7
		  glVertex2f(18.0,16.0);//v8
	   glEnd(); 
}

به شکل های زیر نگاه کنید:

[attachment=711]

[attachment=712]

در شکل دوم می بینید که چگونه با استفاده از تعریف 8 نقطه 3 چهار ضلعی بهم پیوسته ایجاد نموده ایم و همانطور که می بینید ترسیم هر شکل به صورت پادساعتگرد می باشد و همچنین برای تشکیل چهار ضلعی های دوم و سوم چگونه نقاط را تعریف نموده ایم .البته خطوطی که کشیده ایم صرفاً برای درک بهتر مطلب می باشد و خطوطی که به رنگ سبز Highlight شده اند در واقع یک خط می باشند.

نکته:حداقل تعداد نقاط برای استفاده از این ثابت 4 نقطه می باشد و همیشه بایستی مضربی از 2 باشد در غیر اینصورت برنامه ممکن است دچار خطا گردد.





ثابت GL_POLYGON
از این ثابت برای رسم چند ضلعی های مختلف استفاده می کنیم .با استفاده از این ثابت ما می توانیم هر شکل هندسی را تقریباً ترسیم کنیم .اشکالی مانند مثلث ،مربع ،لوزی،ذوذنقه و ... حداقل تعداد نقاطی که هنگام استفاده از این ثابت بایستی تعریف نماییم 3 نقطه می باشد.در مثال زیر با استفاده از 3 نقطه یک مثلث را ترسیم نموده ایم.

مثال:رسم مثلث با استفاده از ثابت :GL_POLYGON

void Create_POLYGON1(void)
{
    
    glColor3f(0.0,0.0,1.0);    
	   glBegin(GL_POLYGON);
		  glVertex2f(-15.0,0.0);
		  glVertex2f(15.0,0.0);
		  glVertex2f(0.0,15);
	   glEnd(); 
}

اگر شما به مطالب آموزشی که در جلسات قبل در مورد ثابتهای تابع glBegin مطرح کردیم برگردید متوجه می شوید که ما تمام اشکال را با استفاده از خط و تعریف نقاط ایجاد می کنیم ،حتی در دنیای واقعی ما ابتدا نقاط را ترسیم و با بهم وصل کردن آنها اشکال را به وجود می آوریم .اگه بخواهیم به صورت واضح تر مطلب را بیان کنیم باید بگوییم ثوایتی مانند GL_POLYGON وGL_QUADSو... توابعی از پیش نوشته شده هستند که برای راحتی و همچنین بالا برن سرعت کار برای ما نوشته شده اند و در حقیقت همه اینها با استفاده از تعاریف خط و نقطه نوشته شده اند.در جلسات آینده با توابعی آشنا می شوید که درک این مطلب را بای شما روشنتر خواهد ساخت.



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

1396/09/17 16:14
Hey! Would you mind if I share your blog with my twitter group?

There's a lot of people that I think would really appreciate your content.
Please let me know. Thanks
1396/06/18 04:54
I know this if off topic but I'm looking into starting my own blog and was
wondering what all is needed to get set up? I'm assuming having a blog like
yours would cost a pretty penny? I'm not very web smart so
I'm not 100% positive. Any suggestions or advice would be greatly appreciated.
Appreciate it
1396/05/17 10:13
My brother suggested I would possibly like this website.
He was once totally right. This put up actually made my day.
You cann't consider simply how much time I had spent for this information! Thanks!
1396/02/25 06:01
It's perfect time to make a few plans for the longer term and it is time to
be happy. I've learn this post and if I could I desire to recommend you few attention-grabbing issues or suggestions.
Perhaps you could write next articles relating to this article.
I desire to read even more things about it!
1396/01/24 22:24
I am genuinely grateful to the owner of this website who has shared this wonderful piece of
writing at at this place.
1396/01/20 03:44
Hi there, I log on to your blogs regularly. Your humoristic style is witty, keep up the good work!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ


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

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

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