418382...

Post on 18-Jan-2016

66 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 4. ประมุข ขันเงิน pramook@gmail.com. rasterization. Projection Transformation. เปลี่ยน eye space เป็น clip space พิกัดใน clip space จะใช้เป็นตัวบอกว่าเราจะเห็น vertex ใดหรือไม่เห็น vertex ใด - PowerPoint PPT Presentation

TRANSCRIPT

418382 สภาพแวดล้อมการทำ�างานคอมพ�วเตอร�กราฟิ�กส�การบรรยายคร��งทำ�� 4

ประม"ข ข�นเง�นpramook@gmail.com

RASTERIZATION

Projection Transformation

• เปล้��ยน eye space เป$น clip space• พ�ก�ดใน clip space จะใช้เป$นต�วบอกว(าเราจะเห็*น

vertex ใดห็ร+อไม(เห็*น vertex ใด• กระบวนการต�ดส�นใจ: vertex ทำ��เห็*นจะตองม�– -1 ≤ x ≤ 1– -1 ≤ y ≤ 1– -1 ≤ z ≤ 1

• Projection transform ย�งม�ผล้ต(อล้�กษณะภาพทำ��เราเห็*นอ�กดวย

Projection Transform ใน OpenGL

• OpenGL จะจ�า matrix ของ projection transform เอาไว

• เวล้าตองการเปล้��ยนแปล้ง projection matrix ให็เปล้��ยน mode ของ matrix เป$น GL_PROJECTION ดวยค�าส��งglMatrixMode(GL_PROJECTION);

• ห็ล้�งจากน��นใช้ค�าส��งในการเปล้��ยนแปล้ง matrix อ+�นแบบเด�ม เช้(น glLoadIdentity(), glMultMatrix(…), ฯล้ฯ

• ส(วนมากเราจะส��ง glLoadIdentity() ทำ�นทำ�ห็ล้�งจากส��ง glMatrixMode(GL_PROJECTION) เสร*จแล้ว เพ+�อเคล้�ยร�ค(า projection matrix ก(อนใส(ค(าให็ม(

Projection Transformation ทำ��ส�าค�ญ 2 แบบ

• Orthographic Projection• Perspective Projection

Orthographic Projection

• ปร�มาตรของบร�เวณทำ��เห็*นเป$นปร�ซึ3ม• ไม(ม� foreshortening กล้(าวค+อ ไม(ว(าว�ตถุ"จะอย5(ใกล้

ไกล้ก*เห็*นขนาดเทำ(าก�นห็มด• ห็ล้�งจากฉาก เสนขนานย�งเป$นเสนขนานอย5(• ใช้ในโปรแกรมช้(วยเข�ยนแบบ/CAD เน+�องจาก

ขนาดของว�ตถุ"เป$นเร+�องส�าค�ญ

Orthographic Projection (ต(อ)

http://www2.arts.ubc.ca/TheatreDesign/crslib/drft_1/orthint.htm

Orthographic Projection (ต(อ)

http://www2.arts.ubc.ca/TheatreDesign/crslib/drft_1/cad/wdstv.htm

การน�ยาม Orthographic Projection

• น�ยามไดโดยการน�ยามปร�ซึ3มของปร�มาตรทำ��เราตองการมองเห็*น

• ปร�ซึ3มน��สามารถุน�ยามไดดวยต�วเล้ข 3 ค5(– left แล้ะ right --- ขอบเขตในแนวแกน x– top แล้ะ bottom --- ขอบเขตในแนวแกน y– near แล้ะ far --- ขอบเขตในแนวแกน -z (เพราะเรามองในแนว -z)

• ค(าทำ��งห็กเป$นพ�ก�ดใน eye space• ปร�ซึ3มทำ��น�ยามค+อ

{(x,y,z) : left ≤ x ≤ right, top ≤ y ≤ bottom, near ≤ -z ≤ far}

ปร�ซึ3มปร�มาตรทำ��มองเห็*น

การน�ยาม Orthographic Projection (ต(อ)

• Matrix ของ orthographic projection ตองทำ�าอะไรบา– ส(ง x = left ไป x = -1– ส(ง x = right ไป x = 1– ส(ง y = bottom ไป y = -1– ส(ง y = top ไป y = 1– ส(ง z = -far ไป z = 1– ส(ง z = -near ไป z = -1

Matrix ของ Orthographic Projection

1000

200

02

0

002

nf

nf

nf

bt

bt

bt

lr

lr

lr

ค�าส��ง OpenGL เก��ยวก�บ Orthographic Projection

• glOrtho(left, right, bottom, top, near, far)– ค5ณ matrix ป8จจ"บ�นดวย matrix ของ orthographic

projection ในห็นาก(อน– ก(อนใช้ควรเร�ยก

glMatrixMode(GL_PROJECTION)glLoadIdentity()

ก(อนเพ+�อเปล้��ยน mode แล้ะเคล้�ยร�ค(า projection matrix เด�ม

• glOrtho2D(left, right, bottom, top)– เห็ม+อนก�บ glOrtho แต(ให็ค(า near เป$น 0 แล้ะ ค(า far เป$น 1

Perspective Projection

• ปร�มาตรของบร�เวณทำ��เห็*นเป$น frustum (ป9ระม�ดยอดต�ด)

• ม� foreshortening กล้(าวค+อ อะไรทำ��อย5(ใกล้จะเห็*นให็ญ(กว(า

• ห็ล้�งจากฉายแล้ว เสนขนานอาจจะไม(ขนานก�นเห็ม+อนเด�ม

• ให็ความเป$นสามม�ต� เพราะเห็ม+อนก�บทำ��ตาคนทำ�างาน ทำ�าให็เห็ม+อนเขาไปอย5(ในฉากจร�งๆ

• ใช้ก�บโปรแกรมทำางความบ�นเทำ�ง

Perspective Projection (ต(อ)

Perspective Projection (cont.)

orthographic perspective

การน�ยาม Perspective Projection

• น�ยามดวยเล้ข 6 ต�วเห็ม+อนก�บ orthographic projection

การน�ยาม Perspective Projection (ต(อ)

• ปร�มาตรทำ��มองเห็*นค+อป9ระม�ดยอดต�ดทำ��ม�ยอดเป$นส��เห็ล้��ยม{(x,y,z) : left ≤ x ≤ right, bottom ≤ y ≤ top,

z = -near}ซึ3�งยอดของม�นถุ5กฉายต(อไปจนถุ3ง z = -far

การน�ยาม Perspective Projection (ต(อ)

• ให็จ"ด (x,y,z) มาใน eye space แล้วม�นจะถุ5กแปล้งเป$นอะไรใน clip space?

nzeye

fzeye

1clipx

lxeye

zzeye

(0,0,0)

rxeye

1clipx

(x,y,z)

การน�ยาม Perspective Projection (ต(อ)

• ห็า x ใน clip space

nzeye

fzeye

1clipx

lxeye

zzeye

(0,0,0)

rxeye

1clipx

(x,y,z)

???clipx

การน�ยาม Perspective Projection (ต(อ)

• เร��มจากการห็า x ใน eye space ของจ"ดปล้ายสองจ"ด

nzeye

fzeye

1clipx

lxeye

zzeye

(0,0,0)

rxeye

1clipx

(x,y,z)

???clipx

???, righteyex???, lefteyex

การน�ยาม Perspective Projection (ต(อ)

• อาศั�ยความร5 เร+�องสามเห็ล้��ยมคล้าย ไดว(าด�งน��น

???, righteyex

rxeye

nzeye

zzeye

(0,0,0)

n

z

r

x righteye

,

n

zrx righteye ,

การน�ยาม Perspective Projection (ต(อ)

• ทำ�านองเด�ยวก�น ด�งน��น

nzeye

lxeye

zzeye

(0,0,0)

???, lefteyex

n

z

l

x lefteye

,

n

zlx lefteye ,

การน�ยาม Perspective Projection (ต(อ)

• เราร5 ว(า ส�าห็ร�บค(าคงทำ�� a แล้ะ b บางต�ว

1clipx

zzeye

(0,0,0)

1clipx

(x,y,z)

???clipx

n

zrx righteye ,

n

zlx lefteye ,

baxxclip

การน�ยาม Perspective Projection (ต(อ)

• เน+�องจากถุา x = -zl/n แล้ว xclip = -1

แล้ะถุา x = -zr/n แล้ว xclip = 1

• ไดว(า

• เม+�อแกสมการออกมาจะไดว(า

bn

zra

bn

zla

1

1

lr

lrb

zlr

na

)(

2

การน�ยาม Perspective Projection (ต(อ)

• กล้(าวค+อ

• ในทำ�านองเด�ยวก�นเราก*จะไดว(า

lr

lrxzlr

nxclip

)(

2

bt

btyzbt

nyclip

)(

2

การน�ยาม Perspective Projection (ต(อ)

• แล้ว zclip ควรจะม�ค(าเทำ(าไห็ร(?• ค(า zclip จะถุ5กใช้เป$น ความล้3ก ของ “ ” fragment

• zclip จะตองม�ค"ณสมบ�ต�สองประการ– ถุา z นอย zclip ก*ตองนอยตามไปดวย– perspective matrix จะตองส(งเสนตรงไปย�งเสนตรง

• ต�วอย(าง zclip ทำ��ใช้ไม(ได– zclip=z

– 222 zyxzclip

การน�ยาม Perspective Projection (ต(อ)

• zclip ทำ�� OpenGL ใช้ม�ร5ป

• เน+�องจาก zclip= -1 ถุา z = -n

แล้ะ zclip= 1 ถุา z = -f

จะไดว(า

z

BAzclip

f

BA

n

BA

1

1

การน�ยาม Perspective Projection (ต(อ)

• เม+�อแกสมการออกมาแล้วจะไดว(า

• กล้(าวค+อnf

nfA

nf

fnB

2

znf

fn

nf

nfzclip )(

2

การน�ยาม Perspective Projection (ต(อ)

• กล้(าวค+อ perspective projection matrix จะตองส(ง

1

z

y

x

znf

fnz

nf

nf

zbt

bty

bt

n

zlr

lrxlr

n

znf

fn

nf

nfbt

btyzbt

nlr

lrxzlr

n

2

2

2

1)(

2)(

2)(

2

ไปย�ง

Matrix ของ Perspective Projection

0100

200

02

0

002

nf

fn

nf

nfbt

bt

bt

nlr

lr

lr

n

ค�าส��ง OpenGL เก��ยวก�บ Perspective Projection

• glFrustum(left, right, bottom, top, near, far)– ค5ณ matrix ป8จจ"บ�นดวย matrix ของ perspective

projection ในห็นาก(อน– ก(อนใช้ควรเร�ยก

glMatrixMode(GL_PROJECTION)glLoadIdentity()

ก(อนเพ+�อเปล้��ยน mode แล้ะเคล้�ยร�ค(า projection matrix เด�ม

ค�าส��ง OpenGL เก��ยวก�บ Perspective Projection (ต(อ)

• gluPerspective(fovy, aspect, near, far)– ค5ณ matrix ป8จจ"บ�นดวย perspective projection

matrix เช้(นเด�ยวก�บ glFrustrum– ม�ผล้เห็ม+อนก�บส��ง glFrustum โดยได• top = near * tan(fovy / 2)• bottom = -top• right = aspect * top• left = -right

ค�าส��ง OpenGL เก��ยวก�บ Perspective Projection (ต(อ)

– fovy ย(อมาจาก field of view Y ห็มายถุ3งความกวางของม"มมองตามแนวแกน y (ม�ห็น(วยเป$นองศัา)

– aspect ค+อ aspect ratio ของห็นาต�ดของป9ระม�ด– ป9ระม�ดทำ�� gluPerspective สรางม�ห็นาตาเป$นด�งขาง

ล้(าง

ค�าส��ง OpenGL เก��ยวก�บ Perspective Projection (ต(อ)

• ส�งเกตว(าค�าส��ง glFrustum สามารถุสรางป9ระม�ดทำ��ไม(สมมาตรรอบแกน z ได

• แต(ป9ระม�ดทำ��สรางดวย gluPerspective จะเป$นป9ระม�ดทำ��สมมาตรรอบแกน z เสมอ

RASTERIZATION

HIDDEN SURFACE REMOVAL

DEPTH BUFFER ใน OPENGL

เม+�อ Render โดยไม(ม� Depth Buffer

จร�งๆ แล้ว code เป$นอย(างน��glColor3d(0.5, 1, 0.5);glBegin(GL_TRIANGLES);glVertex3d(0, 0.5, 0);glVertex3d(-0.5, -0.5, 0);glVertex3d(0.5, -0.5, 0);glEnd();

glColor3d(1, 0.5, 0.5);glBegin(GL_TRIANGLES);glVertex3d(0, -0.75, 1);glVertex3d(0.40, 0, 1);glVertex3d(-0.40, 0.30, -1);glEnd();

จร�งๆ แล้วภาพควรจะเป$นแบบน��

การใช้ Depth Buffer ใน GLUT

• เวล้าส��ง glutInitDisplayMode ให็เพ��ม GLUT_DEPTH ดวยglutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)

• เร�ยก glEnable(GL_DEPTH_TEST)

• เวล้าเร�ยก glClear ให็เพ��ม GL_DEPTH_BUFFER_BITglClear(GL_COLOR_BUFFER_BIT | GLUT_DEPTH_BUFFER_BIT)

โคดต�วอย(างint main(int argc, char **argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);glutInitWindowSize(600, 600);glutCreateWindow("No Depth Buffering");glutDisplayFunc(display);glEnable(GL_DEPTH_TEST);glutMainLoop();return 0;

}

ILLUMINATION

top related