Computer Graphics Working Environment การบรรยายครั6งที8 11 ... ›...
Transcript of Computer Graphics Working Environment การบรรยายครั6งที8 11 ... ›...
01418382 สภาพแวดล้อมการทาํงานคอมพวิเตอร์กราฟิกส์Computer Graphics Working Environment
การบรรยายครั6งที8 11
Lighting Fundamentals and Lighting in OpenGL
ผู้สอน: อ.ชาคริต วัชโรภาส ภาคต้น ปีการศกึษา 2554
Lighting Fundamentals
2
3
Lighting Fundamentals� Lighting ในคอมพิวเตอร์กราฟิกส์เป็นการจําลองปรากฏการณ์ที"วตัถมุี
ปฏิสมัพนัธ์กบัแสง
� ถ้าปราศจาก lighting แล้ว วตัถจุะดแูบน (flat) และขาดความเป็นรูปทรง
� การเพิ"มแสงเข้าไปในฉากจะสร้างความแตกตา่งของ shade ที"จะปรากฏบนวตัถแุละทําให้ภาพที"สร้างออกมาดนู่าสนใจ
� ทั <งคณุสมบตัขิองแสงและคณุสมบตัขิองวสัดพุื <นผิวของวตัถจุะเป็นสิ"งที"ทําให้รูปลกัษณ์ของวตัถถุกูแสดงออกมา
� Lighting equation หรือ lighting model (สมการแสงเงา) จะเป็นตวักําหนดวา่แสงจะมีปฏิสมัพนัธ์อยา่งไรกบัวตัถโุดยดจูากคณุลกัษณะของแสงและคณุลกัษณะของวสัดพุื <นผิวของวตัถุ
4
Lighting Fundamentals (ต่อ)
� หลายปีที"ผา่นมา lighting model ถกูพฒันาขึ <นมามากมาย ซึ"งมีตั <งแตก่ารประมาณการคํานวณแสงที"ง่ายจนถงึการประมาณที"ใกล้เคียงกบัลกัษณะของแสงตามธรรมชาติ
� ในอดีตอปุกรณ์กราฟิกส์จะถกูจํากดัให้ใช้ lighting model ตามที"ถกูเลือกไว้โดยบริษัทที"ผลติอปุกรณ์ จงึทําให้ความสามารถในการสร้างภาพจะอยู่ภายใต้ขอบเขตความสามารถของ lighting model ที"ถกูเลือกนั <นทําได้
� Lighting model ในอดีตนั <นเรียกวา่ fixed-function ซึ"งมีพื <นฐานอยูบ่น Phong lighting model
� Fixed-function มีข้อดีคือให้ผลลพัธ์ที"ยอมรับได้และยงัใช้กําลงัในการคํานวณที"ตํ"า นอกจากนี <ยงัมีพารามิเตอร์ที"สามารถถกูปรับเพื"อควบคมุผลลพัธ์ที"จะได้จากการคํานวณออกมา
5
Lighting Fundamentals (ต่อ)
� สว่นข้อเสียของ fixed-function lighting model ก็คือจะทํางานได้ดีเฉพาะบางลกัษณะของพื <นผิวเท่านั <น เช่น พลาสตกิ หรือ ยาง
� ในบางกรณี เราจําเป็นต้องใช้ texture map เข้ามาช่วยในการสร้างพื <นผิวที"มีลกัษณะซบัซ้อนและไมส่ามารถใช้ fixed-function lighting model ในการคํานวณให้ออกมาสมจริงได้
� แตอ่ปุกรณ์กราฟิกส์ในปัจจบุนันี < ผู้ ใช้สามารถเขียน vertex program และ fragment program เพื"อใช้ควบคมุการคํานวณในบางสว่นของ pipeline ได้
� ผู้ใช้สามารถใช้ lighting model ที"ซบัซ้อนได้โดยผา่นภาษาระดบัสงู เช่น Cg เพื"อสร้างวตัถทุี"ดสูมจริงมากกวา่ในอดีตได้
6
Phong Lighting Model� Phong Lighting Model ถกูคดิขึ <นโดย Bui Tuong Phong จาก
มหาวิทยาลยั Utah ซึ"งเขาได้ตีพิมพ์ผลงานนี <ในวิทยานิพนธ์ ค.ศ. 1973� Phong Lighting Model ถกูพิจารณาวา่เป็นรากฐานที"สําคญัในการให้แสง
เงาบนพื <นผิว ซึ"งยงัคงใช้กนัอยูใ่นปัจจบุนั� รูปข้างลา่งแสดงองค์ประกอบหลกัของ Phong Lighting Model ซึ"ง
ประกอบด้วย Ambient, Diffuse และ Specular
อ้างองิจาก http://en.wikipedia.org/wiki/Phong_shading
7
OpenGL Lighting Model� ใน OpenGL ก็ได้ใช้ lighting model ที"มีลกัษณะเหมือนกบั Phong
Lighting Model� Lighting equation ของ OpenGL จะมีพจน์ emissive ที"ถกูเพิ"มขึ <นเข้ามา
ในสมการ
โดยที" color คือสีที"จะปรากฏอยูบ่นพื <นผิวของวตัถุ
� รูปภาพที"ปรากฏในสไลด์ตั <งแตห่น้า 8 – 17 อ้างอิงมาจากในหนงัสือ The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics โดย Randima Fernando และ Mark J. Kilgard
speculardiffuseambientemissivecolor +++=
8
Emissive� Emissive เป็นพจน์ที"บอกถึงการที"แสงเปลง่ออกมาจากวตัถุ� Emissive เป็นคา่ RGB ของแสดงที"เปลง่ออกมา ซึ"งถ้าเรามองวตัถนุี <ในที"มืด
สนิท เราจะเป็นวตัถมุีสีเป็นคา่ emissive นี <� การคํานวณพจน์ emissive นี <ไมไ่ด้มีความซบัซ้อน เพราะพจน์นี <เป็นเพียง
คา่คงที"� รูปด้านลา่งแสดงลกัษณะของพจน์ emissive
9
Emissive (ต่อ)
� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ emissive
โดยที" คือสี emissive ของวสัดผุิวของวตัถุ
eKemissive=
eK
10
Ambient� Ambient เป็นพจน์ที"แสดงถึงการที"แสงกระจายตวัและสะท้อนไปมาใน
สภาพแวดล้อมจนรู้สกึวา่มีแสงมาจากทกุทิศทาง� พจน์ ambient จะไมไ่ด้ขึ <นอยูก่บัตําแหน่งหรือทิศทางของแสงแตอ่ยา่งใด� รูปด้านลา่งแสดงลกัษณะการทํางานของแสง ambient คือปริมาณแสงที"เข้า
มายงัพื <นผิวจะมีคา่เท่ากนัในทกุทิศทางและจะเทา่กบัปริมาณที"สะท้อนออกไป
11
Ambient (ต่อ)
� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ ambient
โดยที" คือสี ambient ของวสัดผุิวของวตัถุคือสีของแสง ambient ที"เข้ามายงัวตัถุ
� รูปด้านขวาแสดงลกัษณะของวตัถทุี"ได้รับแสง ambient แตเ่พียงอยา่งเดียว� หากสงัเกต วตัถจุะดแูบนและขาดปริมาตร
entglobalAmbiKambient a ×=
aKentglobalAmbi
12
Diffuse� Diffuse เป็นพจน์ที"บอกถึงการที"แสงกระจายออกจากพื <นผิวของวตัถใุนทกุ
ทิศทางออกมาเท่าๆ กนั� พื <นผิว diffuse มกัจะเกิดบนพื <นผิวที"มีลกัษณะละเอียด� รูปด้านลา่งแสดงการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิว diffuse
13
Diffuse (ต่อ)
� ปริมาณการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิวจะเป็นสดัสว่นกบัมมุของแสงที"เข้ามายงัพื <นผิว
� ตวัอยา่งของพื <นผิว diffuse มีเช่น พื <นผิวที"ด้าน ไมม่นัเงา หรือกระดานชอล์คเป็นต้น
� ไมว่า่จะเป็นมมุมองใดจากผู้สงัเกตก็ตาม diffuse จะกระจายตวัออกจากจดุที"อยูบ่นพื <นผิวด้วยปริมาณเท่ากนัทกุทิศทาง ดงัรูปที"แสดง
14
Diffuse (ต่อ)
� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ของพจน์ diffuse
โดยที" คือสี diffuse ของวสัดผุิววตัถุคือสีของแสงที"เข้ามา
คือเวกเตอร์นอร์มลัที"มีขนาด 1 หน่วย ณ จดุคือเวกเตอร์ 1 หน่วยที"ชี <ไปยงัแหลง่กําเนิดแสงจากจดุ และ
คือจดุที"เราต้องการคํานวณหาคา่ของ diffuse
)0,max( LNlightColorKdiffuse d ⋅××=dK
lightColorNL PP
P
15
Specular� Specular เป็นพจน์ที"บอกถึงการที"แสงกระจายตวัสว่นใหญ่ออกจากพื <นผิว
วตัถใุนทิศทาง mirror vector กบัทิศทางของแสง (ดกูารคํานวณ mirror vector ในการบรรยายที" 4)
� สว่นมากแล้วเราเห็น specular ในพื <นผิวที"ราบเรียบและมนัวาว เช่น โลหะขดัมนั เป็นต้น
� รูปด้านลา่งแสดงการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิว specular
� Specular ขึ <นอยูก่บัมมุมองผู้สงัเกต ซึ"งตา่งพจน์อื"นที"ได้กลา่วมาแล้ว� ถ้าผู้สงัเกตไมไ่ด้มองไปยงัทิศทางของ Reflected Specular Light (จากภาพ
ก่อนหน้า) ผู้สงัเกตจะไมส่ามารถมองเห็นบริเวณที"มีแสงสวา่งจ้าบนพื <นผิวได้ � บริเวณสวา่งจ้าบนพื <นผิวมกัถกูเรียกวา่ specular highlight� นอกจากการที"พจน์ specular ขึ <นอยูก่บัสี specular ของแหลง่กําเนิดแสงและ
สี specular ของวสัดผุิววตัถุ พจน์ specular นี <ยงัขึ <นอยูก่บัปริมาณความมนัวาว (shininess) ของวสัดผุิววตัถดุ้วย
� วตัถทุี"มีผิวมนัวาวมาก specular highlight จะเลก็และบีบตวักนัแน่น ดงัรูป
16
Specular (ต่อ)
� สมการด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ของพจน์ specular
17
Specular (ต่อ)
shininesssPhong REfacinglightColorKspecular ))0,(max( ⋅×××=
shininesssBlinn NHfacinglightColorKspecular ))0,(max( ⋅×××=
18
Specular (ต่อ)
� โดยที" คือสี specular ของวสัดผุิววตัถุคือสีของแสงที"เข้ามา
คือเวกเตอร์นอร์มลัที"มีขนาด 1 หน่วย ณ จดุคือเวกเตอร์ 1 หน่วยที"ชี <ไปยงัแหลง่กําเนิดแสงจากจดุ
คือเวกเตอร์ 1 หน่วยที"ชี <ไปยงัตาของผู้ดจูากจดุ คือ mirror vector ของ เทียบกบั
คือเวกเตอร์ 1 หน่วยที"อยูค่รึ"งทางระหวา่ง และ เป็น 1 ถ้า และเป็น 0 ในกรณีนอกจากนั <น
� สมการ ถกูคดิขึ <นโดย Jim Blinn ประมาณ ค.ศ. 1977
facing
sKlightColorNLE
H LE0>⋅ LN
R E N
Blinnspecular
PP
ชื"อที"มกัใช้เรียก
Normal vector
Light vector
Eye or View vector
Reflected vector
Half vector
� Specular highlight ที"เกิดจาก Blinn-Phong lighting model มีความแตกตา่งจากที"เกิดจาก Phong light model ดงัที"แสดงให้เห็นในรูป
� Blinn-Phong lighting model คือ Phong light model ที"ถกูปรับเปลี"ยนพจน์ของ specular ให้ถกูคํานวณด้วยสมการ
� คา่ shininess (คา่ที"เป็น exponent ในสมการ) หากใช้คา่เดียวกนักบัทั <ง 2 สมการแล้ว specular highlight ที"ได้ออกมาจะมีลกัษณะแตกตา่งกนับ้าง
19
Specular (ต่อ)
Blinnspecular
อ้างองิจาก http://en.wikipedia.org/wiki/Blinn-Phong_shading_model
Lighting in OpenGL
20
21
Lighting in OpenGL� OpenGL แบง่สว่นของ lighting ออกเป็น 3 สว่นด้วยกนั คือ
� คณุลกัษณะของวสัดผุิววตัถ ุ(Material Properties) � คณุลกัษณะของแสง เช่น สี หรือ ตําแหน่ง (Light Properties)� คา่พารามิเตอร์โดยรวมในเรื"องของแสง (Global Lighting Parameters)
� Lighting model ที" OpenGL ใช้งานอยูภ่ายในมีลกัษณะที"คล้ายกบัBlinn-Phong lighting model
� ณ ตําแหน่ง vertex คา่สีจะถกูคํานวณ โดยใช้คณุลกัษณะของวสัดุผิววตัถทุี"กําหนดไว้กบั vertex ร่วมกบัคณุลกัษณะของแสงที"จดัไว้
22
Lighting in OpenGL (ต่อ)
� คา่สีของจดุ vertex จะถกูคํานวณ โดยการรวมคา่ของ 4 พจน์ตอ่ไปนี <เข้าด้วยกนั� Ambient
� Diffuse
� Specular
� Emission
� การคํานวณพจน์ทั <ง 4 นี <จะมีลกัษณะดงัที"เห็นวิธีคํานวณจากที"ผ่านมาแล้ว
23
การกาํหนดนอร์มัลให้กับจุดบนพื 6นผวิ
� ในการคํานวณ lighting เราจะเห็นวา่เวกเตอร์นอร์มลัของจดุ vertex มีความสําคญัที"ต้องใช้ในการคํานวณ
� ฟังก์ชนั glNormal*() ใช้กําหนดคา่เวกเตอร์นอร์มลัให้กบัจดุ vertex ที"จะถกูกําหนดคา่ตอ่ในภายหลงั
� ตวัอยา่งการใช้งานฟังก์ชนัglNormal3f( nx, ny, nz );
� คา่ของเวกเตอร์นอร์มลัที"ใช้ในการคํานวณ lighting จะต้องเป็นเวกเตอร์ 1 หน่วย มิฉะนั <นผลการคํานวณจะออกมาไมถ่กูต้องได้
24
การทาํให้นอร์มัลใน OpenGL มีขนาด 1 หน่วย
� โดยปกติแล้ว ฟังก์ชนั glScale*() มีผลทําให้คา่จดุ vertex เปลี"ยนไป ซึ"งฟังก์ชนันี <ก็มีผลตอ่การเปลี"ยนแปลงขนาดของนอร์มลัด้วย
� ผู้ ใช้สามารถกําหนดให้ OpenGL คํานวณนอร์มลัที"ถกูสง่เข้าไปในpipeline แล้วให้มีขนาดเป็น 1 หน่วยอยูเ่สมอโดยอตัโนมตัิได้
� ผู้ ใช้สามารถกําหนดด้วยการเรียกใช้ฟังก์ชนัglEnable( GL_NORMALIZE );
หรือglEnable( GL_RESCALE_NORMAL );
25
การทาํให้นอร์มัลใน OpenGL มีขนาด 1 หน่วย (ต่อ)
� GL_NORMALIZE สามารถใช้กบัทกุกรณีที"นอร์มลัมีการเปลี"ยนแปลง
� GL_NORMALIZE สง่ผลให้ OpenGL ต้องคํานวณขนาดนอร์มลัเพื"อแปลงให้กลายเป็นเวกเตอร์ 1 หน่วย ซึ"งการคํานวณนี <มีสว่นของการถอดรากที" 2 รวมอยู ่จงึสง่ผลให้ประสิทธิภาพการแสดงผลอาจลดลงเนื"องจากการคํานวณที"หนกันี <
� GL_RESCALE_NORMAL ใช้ในกรณีพิเศษที"นอร์มลัที"ผ่านเข้าไปใน OpenGL เป็นเวกเตอร์ 1 หน่วยตั <งแตต่้น แล้วหลงัจากนั <นนอร์มลัถกูปรับคา่สเกลในทกุแกนด้วยขนาดที"เทา่กนั (uniform scale)
� กรณีของ GL_RESCALE_NORMAL ชว่ยให้การคํานวณนอร์มลัเป็นเวกเตอร์ 1 หน่วยทําได้รวดเร็วขึ <น เพราะไมจ่ําเป็นต้องถอดรากที" 2
Material Properties
26
27
คุณลักษณะของวัสดุผวิวัตถุ (Material Properties)� ฟังก์ชนัใน OpenGL ที"ใช้กําหนดคณุลกัษณะของวสัดผุิววตัถ ุคือ
glMaterialfv( face, property, value );
� โดยที" face เป็นคา่ที"กําหนดด้านของผิววตัถหุรือโพลีกอน ซึ"งสามารถกําหนดให้เป็น GL_FRONT, GL_BACK หรือทั <ง 2 ด้านพร้อมกนัด้วย GL_FRONT_AND_BACK
� สว่น property เป็นคณุลกัษณะของวสัดผุิวที"ต้องการกําหนดให้กบัวตัถ ุซึ"งมีคา่เป็น GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_SHININESS หรือ GL_EMISSION เป็นต้น
� สว่น value เป็นคา่ที"ต้องการกําหนดให้กบั property ที"ระบไุว้
28
คุณลักษณะของวัสดุผวิวัตถุ (Material Properties) (ต่อ)
� คา่ property ของวสัดผุิวสามารถกําหนดด้วยคา่เหลา่นี <� GL_AMBIENT กําหนดสี ambient ของวสัดผุิววตัถุ� GL_DIFFUSE กําหนดสี diffuse ของวสัดผุิววตัถุ� GL_SPECULAR กําหนดสี specular ของวสัดผุิววตัถุ� GL_SHININESS กําหนดคา่ความมนัเงาของวสัดผุิววตัถ ุซึ"งมีคา่
อยูใ่นช่วงจาก 0 ถงึ 128 (คา่ยิ"งสงู ผิววตัถยุิ"งมนัเงา)� GL_EMISSION กําหนดสีที"วตัถเุรืองแสงออกมา
Light Properties
29
30
คุณลักษณะของแสง (Light Properties)� ฟังก์ชนัใน OpenGL ที"ใช้กําหนดคณุลกัษณะของแสง คือ
glLightfv( light, property, value );
� โดยที" light เป็นหมายเลขของแหลง่กําเนิดแสงใน OpenGL� โดยทั"วไปแล้ว OpenGL ในทกุระบบจะต้องมีแหลง่กําเนิดแสงอยา่ง
น้อย 8 แหลง่กําเนิดแสงที"สามารถใช้งานพร้อมกนัได้ ซึ"งมีคา่เป็นGL_LIGHT0 ถงึ GL_LIGHT7
� การตรวจสอบจํานวนแหลง่กําเนิดแสงที"สามารถใช้งานได้ในเวลาเดียวกนับนระบบที"ใช้งานอยู ่สามารถเรียกใช้ฟังก์ชนั glGetIntegerv( GL_MAX_LIGHTS, &n ); โดย n มีชนิดเป็น int และหลงัการเรียกฟังก์ชนั n จะเก็บคา่จํานวนแสงสงูสดุที"สามารถใช้งานได้พร้อมกนั
31
คุณลักษณะของแสง (Light Properties) (ต่อ)
� คา่ property ของแสงสามารถกําหนดด้วยคา่เหลา่นี <� GL_AMBIENT กําหนดสี ambient ของแหลง่กําเนิดแสง� GL_DIFFUSE กําหนดสี diffuse ของแหลง่กําเนิดแสง� GL_SPECULAR กําหนดสี specular ของแหลง่กําเนิดแสง
ภาพจากหนังสือ OpenGL Programming Guide 7th Edition หน้า 219
� GL_SPOT_DIRECTION และGL_SPOT_CUTOFF กําหนดให้แหลง่กําเนิดแสงเป็นแบบ spotlight ดงัรูป โดยมีคา่GL_SPOT_EXPONENT ใช้กําหนดอตัราการเสื"อมของความสวา่งของแสงที"เบี"ยงเบนออกจากทิศทางของ spotlight
32
คุณลักษณะของแสง (Light Properties) (ต่อ)
� คา่ property ของแสงที"สําคญัยงัมีอีกดงันี <� GL_POSITION สามารถใช้กําหนดทั <งประเภทของแหลง่กําเนิดแสง
หรือตําแหน่งของแหลง่กําเนิดแสง กลา่วคือ ถ้า <x,y,z,w> เป็นคา่ value ที"กําหนดเข้ามา� ถ้า w = 0 แล้วประเภทของแสง
จะเป็น directional light ที"มีทิศทางของแสงเป็น <x,y,z>
� ถ้า w ≠ 0 แล้วประเภทของแสงจะเป็น positional light ที"มีตําแหนง่อยูท่ี" <xw,
yw,
zw>
ภาพจาก http://jerome.jouvie.free.fr/opengl-tutorials/Tutorial13.php
33
คุณลักษณะของแสง (Light Properties) (ต่อ)
� คา่ property ของแสงที"มกันํามาใช้คือเรื"อง Light Attenuation ซึ"งเป็นการกําหนดให้แสงมีความเข้มลดลงตามระยะหา่งระหวา่งวตัถุกบัแหลง่กําเนิดแสง ซึ"งใช้กบัแสงประเภท positional light เป็นหลกั� GL_CONSTANT_ATTENUATION (kc), GL_LINEAR_ATTENUATION
(kl) และ GL_QUADRATIC_ATTENUATION (kq) ใช้กําหนดคา่สมัประสิทธิz kc, kl และ kq ให้กบัสมการ attenuation factor
attenuation factor =�
�����∙��∙�
เมื"อ d คือระยะทางระหวา่งตําแหน่งของแสงไปยงัจดุ vertex� คา่ attenuation factor จะถกูนําไปคณูกบัคา่พจน์ของ ambient,
diffuse และ specular ก่อนที"ทกุพจน์จะถกูนํามารวมกนั
Global Lighting Parameters
34
35
ค่าพารามเิตอร์โดยรวมของแสง � ฟังก์ชนัใน OpenGL ที"ใช้กําหนดลกัษณะโดยรวมของแสง คือ
glLightModelfv( property, value );
� คา่ property สามารถกําหนดได้ด้วยคา่เหลา่นี <� GL_LIGHT_MODEL_AMBIENT กําหนดสีของแสง ambient ทั <งฉาก� GL_LIGHT_MODEL_LOCAL_VIEWER กําหนดให้มีการคํานวณ
View vector สําหรับทกุจดุ vertex หากคา่ value เป็น GL_TRUE
และจะประมาณ View vector ด้วย (0,0,1) หากเป็น GL_FALSE� GL_LIGHT_MODEL_TWO_SIDE กําหนดให้มีการคํานวณคา่สีทั <ง 2
ข้างของพื <นผิว หากคา่ value เป็น GL_TRUE� GL_LIGHT_MODEL_COLOR_CONTROL กําหนดให้มีการใช้
specular สีที" 2 ด้วยคา่ GL_SEPARATE_SPECULAR_COLOR เพื"อให้สีที" 2 ของ specular สามารถปรากฏอยูบ่น texture ได้
36
การเปิดปิดแสง� แสงแตแ่หลง่กําเนิดสามารถถกูกําหนดให้เปิดและปิดผ่านฟังก์ชนั glEnable() และ glDisable() ตามลําดบั
� หากต้องการเปิดแสงแหลง่กําเนิดที" 0 สามารถทําได้โดยการเรียกglEnable( GL_LIGHT0 );
� หากต้องการปิดแสงแหลง่กําเนิดที" 4 สามารถทําได้โดยการเรียกglDisable( GL_LIGHT4 );
� ใน OpenGL ผู้ ใช้สามารถเปิดและปิดแสงทั <งหมดในฉาก โดยใช้สวิทช์รวมได้ โดยผ่านคา่พารามิเตอร์ GL_LIGHTING ไปในฟังก์ชนั glEnable() และ glDisable() ตามลําดบั อาทิเช่น
glEnable( GL_LIGHTING );
การ Transform แสง
37
38
การ Transform แสง� ตําแหน่งของแสงจะถกู transform ด้วยคา่ปัจจบุนัในเมตริกซ์
Modelview เมื"อแสงนั <นถกูกําหนดตําแหน่งใน OpenGL � หลกัการข้างต้นสามารถทําให้เกิดผลลพัธ์ที"แตกตา่งกนัได้ สําหรับ
กรณีที" 2 โปรแกรมมีการระบตุําแหน่งของแสงในฉากไว้ที"ตําแหน่งเดียวกนั แตม่ีการเรียกใช้ฟังก์ชนักําหนดตําแหน่งของแสงในโปรแกรม ณ บริเวณที"แตกตา่งกนั (อาทิเช่น ตา่งบรรทดัในโปรแกรม)
� โดยสรุปแล้ว การระบตุําแหน่งของแสงในระบบพิกดั (coordinate system) ที"แตกตา่งกนัสามารถให้ผลลพัธ์ที"ตา่งกนัออกมาได้
39
การ Transform แสง (ต่อ)
� โดยทั"วไปแล้ว ผู้ ใช้จะกําหนดตําแหน่งของแสงให้อยูใ่น 3 พิกดัตอ่ไปนี <� Eye Coordinate
� World Coordinate
� Model Coordinate
� ใน Eye Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีคา่เป็นเมตริกซ์เอกลกัษณ์
� การกําหนดตําแหน่งของแสงในช่วงนี <จะทําให้แสงอยูใ่นตําแหน่งที"สมัพทัธ์กบัตาผู้ดอูยูต่ลอดเวลา (เช่น ไฟบนหมวกที"ใช้ในถํ <า)
� แสงจะดเูสมือนวา่ถกูยดึติดอยูก่บั image plane
40
การ Transform แสง (ต่อ)
� ใน World Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีเพียงคา่ของ Viewing Transform เทา่นั <น (ไมม่ี Model Transform)
� การกําหนดตําแหน่งแสงในช่วงนี <จะทําให้แสงอยูใ่นตําแหน่งเดิมในฉากตลอดเวลา (เช่น ไฟที"ติดอยูบ่นยอดเสาไฟ)
� ใน Model Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีทั <ง Model และ Viewing Transform
� เราสามารถใช้ Model Transform ในการย้ายตําแหน่งของแสง
� เราสามารถ transform ทั <งวตัถแุละแหลง่กําเนิดแสงให้ไปด้วยกนั (เช่น ไฟหน้ารถยนต์ที"เคลื"อนที"อยู)่
Tips for Better Lighting
41
42
Tips for Better Lighting� ใน OpenGL การทําให้วตัถมุี specular highlight ที"ดสูมจริง วตัถุ
ต้องมีโพลีกอนที"ละเอียดและมีจํานวนมาก (เนื"องจาก Gouraudshading ที"ใช้ภายใน OpenGL)
� ผลที"ออกมาอาจดสูมจริงแตเ่ราต้องแลกมาด้วยการคํานวณที"หนกัขึ <น ซึ"งมีผลทําให้โปรแกรมมีประสิทธิภาพลดลง
� การคํานวณนี <ทําให้ดีขึ <นได้โดยใช้เพียง 1 แหลง่กําเนิดแสงและให้เป็น directional light เพราะจะทําให้ OpenGL ประมาณ Light vector ของทกุจดุ vertex ด้วยทิศทางของ directional light
� นอกจากนี < เราสามารถใช้ Cg บนอปุกรณ์กราฟิกส์ที"สามารถคํานวณแสงที"ระดบั fragment โดยผู้ ใช้ เพื"อให้ผลลพัธ์ออกมาดสูมจริงได้
43
แบบฝึกหดั� ให้ดาวน์โหลดโปรแกรม light.c จากเวบ็ไซต์ของวิชา� คอมไพล์และรันโปรแกรมเพื"อดกูารแสดงผลของโปรแกรม� ลองปรับย้ายการกําหนดตําแหน่งของแสงใน coordinate ตา่งๆ เพื"อ
ดผูลลพัธ์ที"ได้และสงัเกตความแตกตา่งระหวา่งแตล่ะกรณี