computer graphics working environment การบรรยายครั6งที8 11 ... ›...
Post on 06-Jul-2020
7 Views
Preview:
TRANSCRIPT
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 ตา่งๆ เพื"อ
ดผูลลพัธ์ที"ได้และสงัเกตความแตกตา่งระหวา่งแตล่ะกรณี
top related