43
01418382 สภาพแวดล้อมการทํางานคอมพิวเตอร์ กราฟิ กส์ Computer Graphics Working Environment การบรรยายครั งที 11 Lighting Fundamentals and Lighting in OpenGL สอน: อ.ชาคริต วัชโรภาส ภาคต้น ปี การศึกษา 2554

Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

01418382 สภาพแวดล้อมการทาํงานคอมพวิเตอร์กราฟิกส์Computer Graphics Working Environment

การบรรยายครั6งที8 11

Lighting Fundamentals and Lighting in OpenGL

ผู้สอน: อ.ชาคริต วัชโรภาส ภาคต้น ปีการศกึษา 2554

Page 2: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Lighting Fundamentals

2

Page 3: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

3

Lighting Fundamentals� Lighting ในคอมพิวเตอร์กราฟิกส์เป็นการจําลองปรากฏการณ์ที"วตัถมุี

ปฏิสมัพนัธ์กบัแสง

� ถ้าปราศจาก lighting แล้ว วตัถจุะดแูบน (flat) และขาดความเป็นรูปทรง

� การเพิ"มแสงเข้าไปในฉากจะสร้างความแตกตา่งของ shade ที"จะปรากฏบนวตัถแุละทําให้ภาพที"สร้างออกมาดนู่าสนใจ

� ทั <งคณุสมบตัขิองแสงและคณุสมบตัขิองวสัดพุื <นผิวของวตัถจุะเป็นสิ"งที"ทําให้รูปลกัษณ์ของวตัถถุกูแสดงออกมา

� Lighting equation หรือ lighting model (สมการแสงเงา) จะเป็นตวักําหนดวา่แสงจะมีปฏิสมัพนัธ์อยา่งไรกบัวตัถโุดยดจูากคณุลกัษณะของแสงและคณุลกัษณะของวสัดพุื <นผิวของวตัถุ

Page 4: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

4

Lighting Fundamentals (ต่อ)

� หลายปีที"ผา่นมา lighting model ถกูพฒันาขึ <นมามากมาย ซึ"งมีตั <งแตก่ารประมาณการคํานวณแสงที"ง่ายจนถงึการประมาณที"ใกล้เคียงกบัลกัษณะของแสงตามธรรมชาติ

� ในอดีตอปุกรณ์กราฟิกส์จะถกูจํากดัให้ใช้ lighting model ตามที"ถกูเลือกไว้โดยบริษัทที"ผลติอปุกรณ์ จงึทําให้ความสามารถในการสร้างภาพจะอยู่ภายใต้ขอบเขตความสามารถของ lighting model ที"ถกูเลือกนั <นทําได้

� Lighting model ในอดีตนั <นเรียกวา่ fixed-function ซึ"งมีพื <นฐานอยูบ่น Phong lighting model

� Fixed-function มีข้อดีคือให้ผลลพัธ์ที"ยอมรับได้และยงัใช้กําลงัในการคํานวณที"ตํ"า นอกจากนี <ยงัมีพารามิเตอร์ที"สามารถถกูปรับเพื"อควบคมุผลลพัธ์ที"จะได้จากการคํานวณออกมา

Page 5: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

5

Lighting Fundamentals (ต่อ)

� สว่นข้อเสียของ fixed-function lighting model ก็คือจะทํางานได้ดีเฉพาะบางลกัษณะของพื <นผิวเท่านั <น เช่น พลาสตกิ หรือ ยาง

� ในบางกรณี เราจําเป็นต้องใช้ texture map เข้ามาช่วยในการสร้างพื <นผิวที"มีลกัษณะซบัซ้อนและไมส่ามารถใช้ fixed-function lighting model ในการคํานวณให้ออกมาสมจริงได้

� แตอ่ปุกรณ์กราฟิกส์ในปัจจบุนันี < ผู้ ใช้สามารถเขียน vertex program และ fragment program เพื"อใช้ควบคมุการคํานวณในบางสว่นของ pipeline ได้

� ผู้ใช้สามารถใช้ lighting model ที"ซบัซ้อนได้โดยผา่นภาษาระดบัสงู เช่น Cg เพื"อสร้างวตัถทุี"ดสูมจริงมากกวา่ในอดีตได้

Page 6: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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

Page 7: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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 +++=

Page 8: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

8

Emissive� Emissive เป็นพจน์ที"บอกถึงการที"แสงเปลง่ออกมาจากวตัถุ� Emissive เป็นคา่ RGB ของแสดงที"เปลง่ออกมา ซึ"งถ้าเรามองวตัถนุี <ในที"มืด

สนิท เราจะเป็นวตัถมุีสีเป็นคา่ emissive นี <� การคํานวณพจน์ emissive นี <ไมไ่ด้มีความซบัซ้อน เพราะพจน์นี <เป็นเพียง

คา่คงที"� รูปด้านลา่งแสดงลกัษณะของพจน์ emissive

Page 9: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

9

Emissive (ต่อ)

� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ emissive

โดยที" คือสี emissive ของวสัดผุิวของวตัถุ

eKemissive=

eK

Page 10: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

10

Ambient� Ambient เป็นพจน์ที"แสดงถึงการที"แสงกระจายตวัและสะท้อนไปมาใน

สภาพแวดล้อมจนรู้สกึวา่มีแสงมาจากทกุทิศทาง� พจน์ ambient จะไมไ่ด้ขึ <นอยูก่บัตําแหน่งหรือทิศทางของแสงแตอ่ยา่งใด� รูปด้านลา่งแสดงลกัษณะการทํางานของแสง ambient คือปริมาณแสงที"เข้า

มายงัพื <นผิวจะมีคา่เท่ากนัในทกุทิศทางและจะเทา่กบัปริมาณที"สะท้อนออกไป

Page 11: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

11

Ambient (ต่อ)

� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ ambient

โดยที" คือสี ambient ของวสัดผุิวของวตัถุคือสีของแสง ambient ที"เข้ามายงัวตัถุ

� รูปด้านขวาแสดงลกัษณะของวตัถทุี"ได้รับแสง ambient แตเ่พียงอยา่งเดียว� หากสงัเกต วตัถจุะดแูบนและขาดปริมาตร

entglobalAmbiKambient a ×=

aKentglobalAmbi

Page 12: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

12

Diffuse� Diffuse เป็นพจน์ที"บอกถึงการที"แสงกระจายออกจากพื <นผิวของวตัถใุนทกุ

ทิศทางออกมาเท่าๆ กนั� พื <นผิว diffuse มกัจะเกิดบนพื <นผิวที"มีลกัษณะละเอียด� รูปด้านลา่งแสดงการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิว diffuse

Page 13: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

13

Diffuse (ต่อ)

� ปริมาณการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิวจะเป็นสดัสว่นกบัมมุของแสงที"เข้ามายงัพื <นผิว

� ตวัอยา่งของพื <นผิว diffuse มีเช่น พื <นผิวที"ด้าน ไมม่นัเงา หรือกระดานชอล์คเป็นต้น

� ไมว่า่จะเป็นมมุมองใดจากผู้สงัเกตก็ตาม diffuse จะกระจายตวัออกจากจดุที"อยูบ่นพื <นผิวด้วยปริมาณเท่ากนัทกุทิศทาง ดงัรูปที"แสดง

Page 14: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

14

Diffuse (ต่อ)

� ด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ของพจน์ diffuse

โดยที" คือสี diffuse ของวสัดผุิววตัถุคือสีของแสงที"เข้ามา

คือเวกเตอร์นอร์มลัที"มีขนาด 1 หน่วย ณ จดุคือเวกเตอร์ 1 หน่วยที"ชี <ไปยงัแหลง่กําเนิดแสงจากจดุ และ

คือจดุที"เราต้องการคํานวณหาคา่ของ diffuse

)0,max( LNlightColorKdiffuse d ⋅××=dK

lightColorNL PP

P

Page 15: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

15

Specular� Specular เป็นพจน์ที"บอกถึงการที"แสงกระจายตวัสว่นใหญ่ออกจากพื <นผิว

วตัถใุนทิศทาง mirror vector กบัทิศทางของแสง (ดกูารคํานวณ mirror vector ในการบรรยายที" 4)

� สว่นมากแล้วเราเห็น specular ในพื <นผิวที"ราบเรียบและมนัวาว เช่น โลหะขดัมนั เป็นต้น

� รูปด้านลา่งแสดงการกระจายของแสงเมื"อตกกระทบลงบนพื <นผิว specular

Page 16: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

� Specular ขึ <นอยูก่บัมมุมองผู้สงัเกต ซึ"งตา่งพจน์อื"นที"ได้กลา่วมาแล้ว� ถ้าผู้สงัเกตไมไ่ด้มองไปยงัทิศทางของ Reflected Specular Light (จากภาพ

ก่อนหน้า) ผู้สงัเกตจะไมส่ามารถมองเห็นบริเวณที"มีแสงสวา่งจ้าบนพื <นผิวได้ � บริเวณสวา่งจ้าบนพื <นผิวมกัถกูเรียกวา่ specular highlight� นอกจากการที"พจน์ specular ขึ <นอยูก่บัสี specular ของแหลง่กําเนิดแสงและ

สี specular ของวสัดผุิววตัถุ พจน์ specular นี <ยงัขึ <นอยูก่บัปริมาณความมนัวาว (shininess) ของวสัดผุิววตัถดุ้วย

� วตัถทุี"มีผิวมนัวาวมาก specular highlight จะเลก็และบีบตวักนัแน่น ดงัรูป

16

Specular (ต่อ)

Page 17: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

� สมการด้านลา่งแสดงสตูรทางคณิตศาสตร์ที"บอกถึงคา่ของพจน์ specular

17

Specular (ต่อ)

shininesssPhong REfacinglightColorKspecular ))0,(max( ⋅×××=

shininesssBlinn NHfacinglightColorKspecular ))0,(max( ⋅×××=

Page 18: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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

Page 19: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

� 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

Page 20: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Lighting in OpenGL

20

Page 21: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

21

Lighting in OpenGL� OpenGL แบง่สว่นของ lighting ออกเป็น 3 สว่นด้วยกนั คือ

� คณุลกัษณะของวสัดผุิววตัถ ุ(Material Properties) � คณุลกัษณะของแสง เช่น สี หรือ ตําแหน่ง (Light Properties)� คา่พารามิเตอร์โดยรวมในเรื"องของแสง (Global Lighting Parameters)

� Lighting model ที" OpenGL ใช้งานอยูภ่ายในมีลกัษณะที"คล้ายกบัBlinn-Phong lighting model

� ณ ตําแหน่ง vertex คา่สีจะถกูคํานวณ โดยใช้คณุลกัษณะของวสัดุผิววตัถทุี"กําหนดไว้กบั vertex ร่วมกบัคณุลกัษณะของแสงที"จดัไว้

Page 22: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

22

Lighting in OpenGL (ต่อ)

� คา่สีของจดุ vertex จะถกูคํานวณ โดยการรวมคา่ของ 4 พจน์ตอ่ไปนี <เข้าด้วยกนั� Ambient

� Diffuse

� Specular

� Emission

� การคํานวณพจน์ทั <ง 4 นี <จะมีลกัษณะดงัที"เห็นวิธีคํานวณจากที"ผ่านมาแล้ว

Page 23: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

23

การกาํหนดนอร์มัลให้กับจุดบนพื 6นผวิ

� ในการคํานวณ lighting เราจะเห็นวา่เวกเตอร์นอร์มลัของจดุ vertex มีความสําคญัที"ต้องใช้ในการคํานวณ

� ฟังก์ชนั glNormal*() ใช้กําหนดคา่เวกเตอร์นอร์มลัให้กบัจดุ vertex ที"จะถกูกําหนดคา่ตอ่ในภายหลงั

� ตวัอยา่งการใช้งานฟังก์ชนัglNormal3f( nx, ny, nz );

� คา่ของเวกเตอร์นอร์มลัที"ใช้ในการคํานวณ lighting จะต้องเป็นเวกเตอร์ 1 หน่วย มิฉะนั <นผลการคํานวณจะออกมาไมถ่กูต้องได้

Page 24: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

24

การทาํให้นอร์มัลใน OpenGL มีขนาด 1 หน่วย

� โดยปกติแล้ว ฟังก์ชนั glScale*() มีผลทําให้คา่จดุ vertex เปลี"ยนไป ซึ"งฟังก์ชนันี <ก็มีผลตอ่การเปลี"ยนแปลงขนาดของนอร์มลัด้วย

� ผู้ ใช้สามารถกําหนดให้ OpenGL คํานวณนอร์มลัที"ถกูสง่เข้าไปในpipeline แล้วให้มีขนาดเป็น 1 หน่วยอยูเ่สมอโดยอตัโนมตัิได้

� ผู้ ใช้สามารถกําหนดด้วยการเรียกใช้ฟังก์ชนัglEnable( GL_NORMALIZE );

หรือglEnable( GL_RESCALE_NORMAL );

Page 25: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

25

การทาํให้นอร์มัลใน OpenGL มีขนาด 1 หน่วย (ต่อ)

� GL_NORMALIZE สามารถใช้กบัทกุกรณีที"นอร์มลัมีการเปลี"ยนแปลง

� GL_NORMALIZE สง่ผลให้ OpenGL ต้องคํานวณขนาดนอร์มลัเพื"อแปลงให้กลายเป็นเวกเตอร์ 1 หน่วย ซึ"งการคํานวณนี <มีสว่นของการถอดรากที" 2 รวมอยู ่จงึสง่ผลให้ประสิทธิภาพการแสดงผลอาจลดลงเนื"องจากการคํานวณที"หนกันี <

� GL_RESCALE_NORMAL ใช้ในกรณีพิเศษที"นอร์มลัที"ผ่านเข้าไปใน OpenGL เป็นเวกเตอร์ 1 หน่วยตั <งแตต่้น แล้วหลงัจากนั <นนอร์มลัถกูปรับคา่สเกลในทกุแกนด้วยขนาดที"เทา่กนั (uniform scale)

� กรณีของ GL_RESCALE_NORMAL ชว่ยให้การคํานวณนอร์มลัเป็นเวกเตอร์ 1 หน่วยทําได้รวดเร็วขึ <น เพราะไมจ่ําเป็นต้องถอดรากที" 2

Page 26: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Material Properties

26

Page 27: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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 ที"ระบไุว้

Page 28: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

28

คุณลักษณะของวัสดุผวิวัตถุ (Material Properties) (ต่อ)

� คา่ property ของวสัดผุิวสามารถกําหนดด้วยคา่เหลา่นี <� GL_AMBIENT กําหนดสี ambient ของวสัดผุิววตัถุ� GL_DIFFUSE กําหนดสี diffuse ของวสัดผุิววตัถุ� GL_SPECULAR กําหนดสี specular ของวสัดผุิววตัถุ� GL_SHININESS กําหนดคา่ความมนัเงาของวสัดผุิววตัถ ุซึ"งมีคา่

อยูใ่นช่วงจาก 0 ถงึ 128 (คา่ยิ"งสงู ผิววตัถยุิ"งมนัเงา)� GL_EMISSION กําหนดสีที"วตัถเุรืองแสงออกมา

Page 29: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Light Properties

29

Page 30: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

30

คุณลักษณะของแสง (Light Properties)� ฟังก์ชนัใน OpenGL ที"ใช้กําหนดคณุลกัษณะของแสง คือ

glLightfv( light, property, value );

� โดยที" light เป็นหมายเลขของแหลง่กําเนิดแสงใน OpenGL� โดยทั"วไปแล้ว OpenGL ในทกุระบบจะต้องมีแหลง่กําเนิดแสงอยา่ง

น้อย 8 แหลง่กําเนิดแสงที"สามารถใช้งานพร้อมกนัได้ ซึ"งมีคา่เป็นGL_LIGHT0 ถงึ GL_LIGHT7

� การตรวจสอบจํานวนแหลง่กําเนิดแสงที"สามารถใช้งานได้ในเวลาเดียวกนับนระบบที"ใช้งานอยู ่สามารถเรียกใช้ฟังก์ชนั glGetIntegerv( GL_MAX_LIGHTS, &n ); โดย n มีชนิดเป็น int และหลงัการเรียกฟังก์ชนั n จะเก็บคา่จํานวนแสงสงูสดุที"สามารถใช้งานได้พร้อมกนั

Page 31: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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

Page 32: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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

Page 33: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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 ก่อนที"ทกุพจน์จะถกูนํามารวมกนั

Page 34: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Global Lighting Parameters

34

Page 35: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

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 ได้

Page 36: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

36

การเปิดปิดแสง� แสงแตแ่หลง่กําเนิดสามารถถกูกําหนดให้เปิดและปิดผ่านฟังก์ชนั glEnable() และ glDisable() ตามลําดบั

� หากต้องการเปิดแสงแหลง่กําเนิดที" 0 สามารถทําได้โดยการเรียกglEnable( GL_LIGHT0 );

� หากต้องการปิดแสงแหลง่กําเนิดที" 4 สามารถทําได้โดยการเรียกglDisable( GL_LIGHT4 );

� ใน OpenGL ผู้ ใช้สามารถเปิดและปิดแสงทั <งหมดในฉาก โดยใช้สวิทช์รวมได้ โดยผ่านคา่พารามิเตอร์ GL_LIGHTING ไปในฟังก์ชนั glEnable() และ glDisable() ตามลําดบั อาทิเช่น

glEnable( GL_LIGHTING );

Page 37: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

การ Transform แสง

37

Page 38: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

38

การ Transform แสง� ตําแหน่งของแสงจะถกู transform ด้วยคา่ปัจจบุนัในเมตริกซ์

Modelview เมื"อแสงนั <นถกูกําหนดตําแหน่งใน OpenGL � หลกัการข้างต้นสามารถทําให้เกิดผลลพัธ์ที"แตกตา่งกนัได้ สําหรับ

กรณีที" 2 โปรแกรมมีการระบตุําแหน่งของแสงในฉากไว้ที"ตําแหน่งเดียวกนั แตม่ีการเรียกใช้ฟังก์ชนักําหนดตําแหน่งของแสงในโปรแกรม ณ บริเวณที"แตกตา่งกนั (อาทิเช่น ตา่งบรรทดัในโปรแกรม)

� โดยสรุปแล้ว การระบตุําแหน่งของแสงในระบบพิกดั (coordinate system) ที"แตกตา่งกนัสามารถให้ผลลพัธ์ที"ตา่งกนัออกมาได้

Page 39: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

39

การ Transform แสง (ต่อ)

� โดยทั"วไปแล้ว ผู้ ใช้จะกําหนดตําแหน่งของแสงให้อยูใ่น 3 พิกดัตอ่ไปนี <� Eye Coordinate

� World Coordinate

� Model Coordinate

� ใน Eye Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีคา่เป็นเมตริกซ์เอกลกัษณ์

� การกําหนดตําแหน่งของแสงในช่วงนี <จะทําให้แสงอยูใ่นตําแหน่งที"สมัพทัธ์กบัตาผู้ดอูยูต่ลอดเวลา (เช่น ไฟบนหมวกที"ใช้ในถํ <า)

� แสงจะดเูสมือนวา่ถกูยดึติดอยูก่บั image plane

Page 40: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

40

การ Transform แสง (ต่อ)

� ใน World Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีเพียงคา่ของ Viewing Transform เทา่นั <น (ไมม่ี Model Transform)

� การกําหนดตําแหน่งแสงในช่วงนี <จะทําให้แสงอยูใ่นตําแหน่งเดิมในฉากตลอดเวลา (เช่น ไฟที"ติดอยูบ่นยอดเสาไฟ)

� ใน Model Coordinate เป็นช่วงที"เมตริกซ์ Modelview มีทั <ง Model และ Viewing Transform

� เราสามารถใช้ Model Transform ในการย้ายตําแหน่งของแสง

� เราสามารถ transform ทั <งวตัถแุละแหลง่กําเนิดแสงให้ไปด้วยกนั (เช่น ไฟหน้ารถยนต์ที"เคลื"อนที"อยู)่

Page 41: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

Tips for Better Lighting

41

Page 42: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

42

Tips for Better Lighting� ใน OpenGL การทําให้วตัถมุี specular highlight ที"ดสูมจริง วตัถุ

ต้องมีโพลีกอนที"ละเอียดและมีจํานวนมาก (เนื"องจาก Gouraudshading ที"ใช้ภายใน OpenGL)

� ผลที"ออกมาอาจดสูมจริงแตเ่ราต้องแลกมาด้วยการคํานวณที"หนกัขึ <น ซึ"งมีผลทําให้โปรแกรมมีประสิทธิภาพลดลง

� การคํานวณนี <ทําให้ดีขึ <นได้โดยใช้เพียง 1 แหลง่กําเนิดแสงและให้เป็น directional light เพราะจะทําให้ OpenGL ประมาณ Light vector ของทกุจดุ vertex ด้วยทิศทางของ directional light

� นอกจากนี < เราสามารถใช้ Cg บนอปุกรณ์กราฟิกส์ที"สามารถคํานวณแสงที"ระดบั fragment โดยผู้ ใช้ เพื"อให้ผลลพัธ์ออกมาดสูมจริงได้

Page 43: Computer Graphics Working Environment การบรรยายครั6งที8 11 ... › ~ckw › 418382 › Lecture-11.pdf · Specular เป็นพจน์ทีบอกถึงการทีแสงกระจายตัวส่วนใหญ่ออกจากพื

43

แบบฝึกหดั� ให้ดาวน์โหลดโปรแกรม light.c จากเวบ็ไซต์ของวิชา� คอมไพล์และรันโปรแกรมเพื"อดกูารแสดงผลของโปรแกรม� ลองปรับย้ายการกําหนดตําแหน่งของแสงใน coordinate ตา่งๆ เพื"อ

ดผูลลพัธ์ที"ได้และสงัเกตความแตกตา่งระหวา่งแตล่ะกรณี