Top Banner
OpenGL ا بی ک ی فرا گ ی س ی و ن ه م ا رب بPhD candidate ه گان ی ش خ ب ی! ست ه د داوب ام خ ه ب ن م ه د سه ل خA.M. Safaei
58

OpenGL برنامه نویسی گرافیکی با

Jan 15, 2016

Download

Documents

shaw

به نام خداوند هستی بخش یگانه. جلسه دهم. OpenGL برنامه نویسی گرافیکی با. A.M. Safaei. PhD candidate. جلسه دهم. گرافیک کامپیوتری. ورودی های در محیط OpenGL. جلسه هشتم. گرافیک کامپیوتری. ورودیها :: صفحه کلید :: glutKeyboardFunc. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: OpenGL برنامه نویسی گرافیکی با

OpenGLبرنامه نویسی گرافیکی با

PhD candidate

به نام خداوند هستی بخش یگانه

جلسه دهم

A.M. Safaei

Page 2: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

OpenGLورودی های در محیط

Page 3: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

:: ورودیها :: صفحه کلید glutKeyboardFunc

GLUT دو ت�ابع را ب�رای وق�ایع مرب�وط ب�ه ص�فحه کلی�د هنگ�ام فش�ردن

یک کلید فراهم نموده است.

glutKeyboardFunc جهت پ�ردازش مرب�وط ب�ه فش�ردن ش�دن کلی�د :

ه�ای معم�ولی اس�تفاده می ش�ود ) ح�روف الفب�ا ، اع�داد و تم�ام کلی�د

هایی که دارای کد اسکی هستند(.

یکی از کاربرده�ای این ت�ابع ف�راهم آوردن راهی ب�رای خ�روج از برنام�ه

کلی�د فش�ردن ت�ابع ESCAPEهنگ�ام اینک�ه ب�ه توج�ه ب�ا باش�د، می

glutMainLoop.یک حلقه نامتناهی تولید می کند

جلسه هشتم

ESCAPE = 27کد اسکی

void keyboard(unsigned char key, int x, int y)} if( key == 27) exit(0);{

Page 4: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

:: ورودیها :: صفحه کلید glutSpecialFunc

glutSpecialFunc جهت پ�ردازش مرب�وط ب�ه فش�ردن ش�دن کلی�د ه�ای :

ش�کل را ب�ه F1خ�اص اس�تفاده می ش�ود ، بعن�وان مث�ال ب�ا فش�ردن کلی�د

به رنگ آبی در بیاورد.F3 به رنگ سبز و کلید F2رنگ قرمز و با کلید

جلسه هشتم

void special( int key, int x, int y)}switch(key)} case GLUT KEY F1: r=1.0; g=0.0; b=0.0; break; case GLUT KEY F2: r=0.0; g=1.0; b=0.0; break; case GLUT KEY F3: r=0.0; g=0.0; b=1.0; break;{ {

Page 5: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

ورودیها :: کلید های پیرایشی glutGetModifiers)(

جلسه هشتم

( پیرایشی های کلید آیا اینکه تعیین ,ALT, CTRLجهت

SHIFT می اس�تفاده بازگش�تی ت�ابع از ان�د ش�ده فش�رده )

شود.

:GLUT_ACTIVE_SHIFT ش�دن فش�رده ص�ورت در Shift و

روشن باشد.Caps Lockروشن بودن کلید

GLUT_ACTIVE_CTRL در ص�ورتی ک�ه کلی�د :CTRL را فش�ار

دهید.

:GLUT_ACTIVE_ALT کلی�د ک�ه ص�ورتی در ALT فش�ار را

دهید.

Page 6: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه هشتم

مث�ال :در اس�تفاده از کلی�د ه�ای پیرایش�ی ت�ابع مربوط�ه ب�ه ص�فحه کلی�د را

رن�گ قرم�ز ALT+rط�وری تغی�یر می دهیم ک�ه در ص�ورت فش�رده ش�دن

void keyboard(unsigned char key, int x, int y)غیر فعال و در غیر اینصورت فعال شود.

}

if( key == 27)

exit(0);

else if (key == 'r') }

int mod = glutGetModifiers();

if( mod == GLUT_ACTIVE_ALT)

r = 0.0;

else

r = 1.0;

{

{

ورودیها :: کلید های پیرایشی glutGetModifiers)(

Page 7: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

:: ورودیها :: ماوس glutMouseFunc

همانن�د ص�فحه کلی�د درGLUT ب�رای م�اوس ت�ابع زی�ر در نظ�ر

گرفت�ه ش�ده اس�ت، ک�ه کلی�ک ک�ردن ب�ا م�اوس را کن�ترل می

کند.

پارامتر اول این ت�ابع جهت مش�خص ک�ردن اینک�ه ک�دام دکم�ه

ی�ا ره�ا ش�ده می باش�د و دارای س�ه م�اوس فش�رده ش�ده و

حالت زیر می باشد:

.1GLUT_LEFT_BUTTON

.2GLUT_MIDDLE_BUTTON

.3GLUT_RIGHT_BUTTON

جلسه هشتم

void glutMouseFunc( void (*func) (int button, int state, int x, int y));

Page 8: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

:: ورودیها :: ماوس glutMouseFunc

فش�رده یع�نی مربوط�ه دکم�ه وض�عیت ت�ابع، دوم پارامتر

شدن یا رها شدن را مقدار دهی می کند.

.1GLUT_DOWN

.2GLUT_UP

جلسه هشتم

void glutMouseFunc( void (*func) (int button, int state, int x, int y));

void mouse(int b, int s, int x, int y)}switch(b) } case GLUT LEFT BUTTON: if( s == GLUT DOWN) r = 1.0; else r = 0.0; break; }}

ماوس های دکمه فشردن تشخیص

Page 9: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

در این مبحث الگوریتم های برش خط و

برش چند ضلعی بررسی می شود

)کوتاه سازی(Clipping برش

Page 10: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

Page 11: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

بــرش خــط Line Clipping -

Page 12: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

) برش خط )کوتاه سازی خط

جلسه دهم

رسم یک خط درون یک مستطیل با اضالع افقی و عمودی •

می نامیم درون مستطیل و Pفرض کنید یک راس پاره خط که آن را •

می نامیم خارج از مستطیل باشد و در نظر Qراس دیگر که آن را

با PQ نقطه تقاطع پاره خط I را رسم کنیم ) PIداریم فقط پاره خط

مرز مستطیل است.

Page 13: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری

) برش خط )کوتاه سازی خط

جلسه دهم

معین می شود، xmin, xmax, ymin, ymaxمستطیل توسط چهار عدد •

و با yO=ymax ضلع باالی مستطیل را قطع کرده است : PQچون خط

:PBQ و PAIتوجه به تشابه دو مثلث

را می PIاز طریق مقدار باال به راحتی پاره خط •

توان رسم کرد.

Page 14: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی خط

کوهن - ساترلند

Cohen-Sutherland Line Clipping

Page 15: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

یکی از روشهای موثر برای کوتاه سازی خط الگورتیم کوهن – ساترلند می •

باشد، که با امتداد اضالع مستطیل، صفحه نمایش را به نه قسمت تقسیم

می کندو به هر کدام از این نه بخش یک کد چهار بیتی کد خروج اختصاص

داده، هر بیت کد خروج در صورتی یک می شود که ناحیه متناظر با آن از

سمت معین پنجره خارج شده باشد.

0000 00100001

1001

0101 0100

1000 1010

0110

: 1 بیت

چپ

: 2 بیت

راست

: 3 بیت

پائین

: 4 بیت

باال

Page 16: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

خواه�د ب�ود، 0000اگ�ر نقط�ه ای درون مس�تطیل ق�رار گ�یرد ک�د خ�روج آن •

است.1000کد خروج نقطه که دقیقا باالی مستطیل قرار دارد

نش�ان c2 و c1اگ�ر ف�رض ش�ود ک�ه خ�د خ�روج دو انته�ای پ�اره خ�ط را ب�ا •

دهیم، در اینصورت داریم :

آنگ�اه پ�اره خ�ط ک�امال درون پنج�ره می باش�د و بای�د c2 = 0000 ی�ا c1اگ�ر •

بطور کامل رسم شود.

باش�د آنگ�اه پ�اره خ�ط ک�امال خ�ارج از 0000 مخ�الف ب�ا مق�دار c2 و c1اگ�ر •

پنجره بودن و نباید رسم شود.

پ�اره خ�ط مزب�ور • آنگ�اه نب�ود برق�رار دوم و اول از ح�االت هیچک�دام اگ�ر

توس�ط م�رز پنج�ره ب�ه دو بخش تقس�یم می ش�ود ک�ه ب�رای ه�ر دو بخش بای�د

مراحل اول و دوم را تکرار کنیم .

برای اینک�ه بفهمیم پ�اره خ�ط ک�دام م�رز را قط�ع ک�رده اس�ت کافیس�ت م�رز •

متناظر را با بیتی را که مقدار آن یک است تعیین کنیم.

Page 17: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

(Xmin, Ymax)

(Xmin, Ymin)

(Xmax, Ymax)

(Xmax, Ymin)

Page 18: OpenGL برنامه نویسی گرافیکی با

یکی از رئوس را به دلخواه انتخاب می کنیم، اگر خارج از •محدوده بود، نقطه تقاطع خط با مرز پنجره دید را پیدا می

کنیم و این نقطه جدیدرا جایگزین نقطه خارج از محدوده می کنیم.

چهاربیتی راس مورد نظر را برای تشخیص مرز، کافیست کد•بررسی نمود.

1001

0101

0001 0000

1000

0010

1010

0100 0110

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

: 1 بیت

چپ

: 2 بیت

راست

: 3 بیت

پائین

: 4 بیت

باال

منطقه

شماره بیت

Page 19: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

0000

0100

1000

0001 0010

0110

10101001

0101

A1

A2

1. A1=0000,A2=00002. (both 0000) – Yes -> accept & draw3. 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4

1. A1=0000,A2=00002. (both 0000) – Yes -> accept & draw3. 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4

الگوریتم

Page 20: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

0000

0100

0001 0010

01100101

A1

A2

B1

B21. B1=1001,B2=10102. (both 0000) – No3. AND Operation

B1 1001B2 1010Result 1000

3.1 (not 0000) – Yes reject 3.2 3.2.1 3.2.2 3.2.3 3.2.4

الگوریتم

1. B1=1001,B2=10102. (both 0000) – No3. AND Operation

B1 1001B2 1010Result 1000

3.1 (not 0000) – Yes reject 3.2 3.2.1 3.2.2 3.2.3 3.2.4

1. B1=1001,B2=10102. (both 0000) – No3. AND Operation

B1 1001B2 1010Result 1000

3.1 (not 0000) – Yes reject 3.2 3.2.1 3.2.2 3.2.3 3.2.4

1. B1=1001,B2=10102. (both 0000) – No3. AND Operation

B1 1001B2 1010Result 1000

3.1 (not 0000) – Yes reject 3.2 3.2.1 3.2.2 3.2.3 3.2.4

1001 1000 1010

Page 21: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

0000

0100

1000

0010

0110

10101001

0101

A1

A2

C1

C2

1. C1=0001,C2=00002. (both 0000) – No 3. AND Operation

0001 0000

result 0000 3.1(not 0000) - No 3.2. (0000)-Yes 3.2.1. choose C1 3.2.2. Intersection point, C1’ at LEFT 3.2.3 C1 <- C1’ C1 = 0000 3.2.4 repeat 2

1. C1=0001,C2=00002. (both 0000) – No 3. AND Operation

0001 0000

result 0000 3.1(not 0000) - No 3.2. (0000)-Yes 3.2.1. choose C1 3.2.2. Intersection point, C1’ at LEFT 3.2.3 C1 <- C1’ C1 = 0000 3.2.4 repeat 2

1. C1=0001,C2=00002. (both 0000) – No 3. AND Operation

0001 0000

result 0000 3.1(not 0000) - No 3.2. (0000)-Yes 3.2.1. choose C1 3.2.2. Intersection point, C1’ at LEFT 3.2.3 C1 <- C1’ C1 = 0000 3.2.4 repeat 2

C1’

1. C1=0001,C2=00002. (both 0000) – No 3. AND Operation

0001 0000

result 0000 3.1(not 0000) - No 3.2. (0000)-Yes 3.2.1. choose C1 3.2.2. Intersection point, C1’ at LEFT 3.2.3 C1 <- C1’ C1 = 0000 3.2.4 repeat 2

1. C1=0001,C2=00002. (both 0000) – No 3. AND Operation

0001 0000

result 0000 3.1(not 0000) - No 3.2. (0000)-Yes 3.2.1. choose C1 3.2.2. Intersection point, C1’ at LEFT 3.2.3 C1 <- C1’ C1 = 0000 3.2.4 repeat 2

C1’

C2

0001

1. C1=0001,C2=00002. (both 0000) – Yes -> accept & draw3. 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4

الگوریتم

Page 22: OpenGL برنامه نویسی گرافیکی با

اگ�ر نقط�ه تق�اطع روی م�رز چپ ی�ا راس�ت باش�د و دو راس آغ�از •

خ������������������ط پای������������������ان و

(x1 , y1( و )x2 , y2 و ش�یب خ�ط باش�ند )m باش�د، مختص�ات

( عبارتست از:xt , ytنقطه تقاطع )

الگوریتم کوتاه سازی کوهن - ساترلند

xt = Xmin (چپ) یا xt = Xmax (راست)

yt = y1 + m(xt - x1 )

گرافیک کامپیوتری جلسه دهم

Page 23: OpenGL برنامه نویسی گرافیکی با

اگ�ر نقط�ه تق�اطع روی م�رز ب�اال ی�ا پ�ایین باش�د و دو راس آغ�از و •

خ�������������������������ط پای�������������������������ان

(x1 , y1( و )x2 , y2 و ش�یب خ�ط باش�ند )m باش�د، مختص�ات

( عبارتست از:xt , ytنقطه تقاطع )

الگوریتم کوتاه سازی کوهن - ساترلند

xt = x1 + (yt - y1 )/m

yt = Ymin (باال) یا yt = Ymax (پایین)

گرافیک کامپیوتری جلسه دهم

Page 24: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

1. Assign a region code for each endpoints.

2. If both endpoints have a region code 0000 --- accept these line.

3. Else, perform the logical AND operation for both region codes.

3.1 if the result is not 0000 - reject the line.

3.2 else – (result = 0000, need clipping)

3.2.1. Choose an endpoint of the line that is outside the window.

3.2.2. Find the intersection point at the window boundary (base on region code).

3.2.3. Replace endpoint with the intersection point and update the

region code.

3.2.4. Repeat step 2 until we find a clipped line either accepted or rejected.

4. Repeat step 1 for other lines.

Page 25: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

#define LEFT EDGE 0x1

#define RIGHT EDGE 0x2

#define BOTTOM EDGE 0x4

#define TOP EDGE 0x8

unsignedchar encode (GLint x, GLint y, GLint wx1, GLint wy1, GLint wx2, GLint wy2)

{

unsigned char code = 0x00;

if(x < wx1) code = code | LEFT EDGE;

if(x > wx2) code = code | RIGHT EDGE;

if(y < wy1) code = code | BOTTOM EDGE;

if(y > wy2) code = code | TOP EDGE;

return (code);

}

الگوریتم کوتاه سازی کوهن - ساترلند

Page 26: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

#define INSIDE(a) (!a)

#define REJECT(a,b) (a & b)

#define ACCEPT(a,b) (!(a|b))

void SwapPts(GLint *x1, GLint *y1, GLint *x2, GLint *y2)

{

GLint temp;

temp = *x1; *x1=*x2; *x2=temp;

temp = *y1; *y1=*y2; *y2=temp;

}

void SwapCodes (unsigned char *c1, unsigned char * c2)

{

unsigned char temp;

temp = *c1, *c1=*c2; *c2=temp;

}

Page 27: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلند

voidClipLine (GLint wx1, GLint wy1,GLint wx2, GLint wy2, GLint x1, GLint y1,

GLint x2, GLint y2){

unsigned char code1, code2;

int done = FALSE, draw = FALSE;

GLfloat m;

while (!done){

code1=encode(x1, y1, wx1, wy1, wx2, wy2);

code2=encode(x2, y2, wx1, wy1, wx2, wy2);

if(ACCEPT (code1, code2))

{

done = TRUE;

draw = TRUE;

}

ادامه الگوریتم اسالید بعد

Page 28: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی کوهن - ساترلندelse if(REJECT (code1, code2))done = TRUE;else { if(INSIDE (code1)) { SwapPts (&x1, &y1, &x2, &y2); SwapCodes(&code1, &code2); } if(x2 != x1) m = (GLfloat) (y2-y1)/(x2-x1); if(code1 & LEFT EDGE) { y1 += (wx1 - x1)*m; x1 = wx1; } else if(code1 & RIGHT EDGE) { y1 += (wx2 - x1)*m; x1 = wx2; }

elseif(code1 & BOTTOM EDGE){ if(x2 != x1) x1 += (wy1 - y1)/m; y1 = wy1; } else if(code1 & TOP EDGE) { if(x2 != x1) x1 += (wy2 - y1)/m; y1 = wy2; } }}if (draw) MidpointLine(x1, y1, x2, y2);}

ادامه الگوریتم از اسالید قبل

Page 29: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی چند ضلعی

ساترلند - هاجمن

Sutherland-Hodgman Clipping

Page 30: OpenGL برنامه نویسی گرافیکی با

ابت�اد تم�ام • در این الگ�وریتم ب�رای کوت�اه س�ازی چن�د ض�لعی

کوت�اه ی�ک ض�لع مس�تطیل ب�ه نس�بت را اض�الع چن�د ض�لعی

خ�ط ی�ک بص�ورت را ض�لع آن واق�ع در ک�نیم، می س�ازی

می انج�ام س�ازی کوت�اه عم�ل و گرفت�ه نظ�ر در نامتن�اهی

دهیم .

ض�لعی • چن�د بعن�وان را اص�لی ض�لعی چن�د روش این در

ورودی و جن�د ض�لعی جدی�د را بعن�وان چن�د ض�لعی خ�روجی در

نظر می گیرم.

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 31: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 32: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 33: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 34: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 35: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 36: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 37: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 38: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 39: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 40: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 41: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 42: OpenGL برنامه نویسی گرافیکی با

چهار حالت ممکن برای یک ضلع در الگوریتم ساترلند - هاجمن

outside inside

v1v1’

v2

outside inside

v1

v2

outside inside

v1v1’

v2

outside inside

v1

v2

Outside to inside:Output: v1’ and v2

Inside to inside:Output: v2

Inside to outside:Output: v1’

Outside to outside:Output: nothing

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 43: OpenGL برنامه نویسی گرافیکی با

V2

V3

<V1, V2, V3>Left

V1

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 44: OpenGL برنامه نویسی گرافیکی با

V1'

V2

V3

<V1, V2, V3>Left

<V1’ >

V1

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 45: OpenGL برنامه نویسی گرافیکی با

V1'

V2’V3

<V1, V2, V3>Left

<V1’, V2’, V3 >

V1

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 46: OpenGL برنامه نویسی گرافیکی با

V1'

V2’V3

<V1, V2, V3>Left

<V1’, V2’, V3 , V1 >

V1

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 47: OpenGL برنامه نویسی گرافیکی با

V1'

V2’V3

Right<V1’, V2’, V3 , V1 >

V1

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 48: OpenGL برنامه نویسی گرافیکی با

V1’’

V2’V3

Bottom<V1’, V2’, V3 , V1 >

V1

<V1’’ >

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 49: OpenGL برنامه نویسی گرافیکی با

V1’’

V2’V3

Bottom<V1’, V2’, V3 , V1 >

V1

<V1’’, V2’, V3 >

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 50: OpenGL برنامه نویسی گرافیکی با

V1’’

V2’V3

Bottom<V1’, V2’, V3 , V1 >

V1

<V1’’, V2’, V3, V3’ >

V3’’

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 51: OpenGL برنامه نویسی گرافیکی با

V1’’

V2’V3

Bottom<V1’, V2’, V3 , V1 >

<V1’’, V2’, V3, V3’ >

V3’’

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 52: OpenGL برنامه نویسی گرافیکی با

V1’’

V2’V3

Top<V1’’, V2’, V3, V3’ >

V3’’

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 53: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

2مثال :

Page 54: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

v1

v5

v1

Clipping edge Clipping edge Clipping edge

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 55: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

Now v1v2:

Clipping edge Clipping edge Clipping edge

v1

v2

v1

v2

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 56: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

Clipping edge Clipping edge Clipping edge

v1

v2v2 v3v2 v3

Now v2v3:

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 57: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

Clipping edge Clipping edge Clipping edge

v1

v2v2 v3v3

v4

i1

Now v3v4:

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن

Page 58: OpenGL برنامه نویسی گرافیکی با

v1

v5

v2 v3

v4

Clipping edge Clipping edge Clipping edge

v1

v2v2 v3

i1

v5

v4 i2

v5

Now v4v5 :

گرافیک کامپیوتری جلسه دهم

الگوریتم کوتاه سازی ساترلند - هاجمن