1 / 82

คอมพิวเตอร์กราฟิกส์ใช้ OpenGL (Computer Graphics using OpenGL)

คอมพิวเตอร์กราฟิกส์ใช้ OpenGL (Computer Graphics using OpenGL). บทที่ 10 แสง และการจัดแสง ( Light & Lighting ). นอกจากออปเจ็กต์ที่แสดงเป็นสีบนจอภาพแล้ว ยังมีแสงที่แสดงบนจอภาพเพื่อให้ออปเจ็กต์นั้นสะท้อนหรือดูดซับแสงเหล่านี้ไว้ เช่น มหาสมุทรที่ให้สีสดและสว่างในเวลากลางวันมากกว่าในเวลากลางคืน

Download Presentation

คอมพิวเตอร์กราฟิกส์ใช้ OpenGL (Computer Graphics using OpenGL)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. คอมพิวเตอร์กราฟิกส์ใช้ OpenGL(Computer Graphics using OpenGL)

  2. บทที่ 10แสง และการจัดแสง(Light & Lighting)

  3. นอกจากออปเจ็กต์ที่แสดงเป็นสีบนจอภาพแล้ว ยังมีแสงที่แสดงบนจอภาพเพื่อให้ออปเจ็กต์นั้นสะท้อนหรือดูดซับแสงเหล่านี้ไว้ เช่น มหาสมุทรที่ให้สีสดและสว่างในเวลากลางวันมากกว่าในเวลากลางคืน ในความเป็นจริง เราไม่สามารถเห็นออปเจ็กต์เป็น 3 มิติได้ ถ้าไม่มีแสงเข้าช่วย ดังนั้นแสงจึงมีความสำคัญในการแสดงภาพ 3 มิติ แสง และการจัดแสง

  4. แสง และการจัดแสง รูปทรงกลม ก) ใช้แสดงช่วยในการแสดงผล ข) ไม่ใช้แสงช่วยในการแสดงผล

  5. เมื่อมองที่ผิวของออปเจ็กต์ทั่วไป การรับสีของดวงตาขึ้นอยู๋กับการกระจายของพลังงานที่เข้ามา และกระตุ้นเซลล์รูปกรวยในดวงตาคน แสงเหล่านั้นมาจากแหล่งกำเนิดแสง หรือการรวมตัวกันของแหล่งกำเนิดแสงหลายแหล่ง บ้างก็มาจากการดูดซับ บ้างก็มาจากการสะท้อนจากพื้นผิวอื่น ความแตกต่างของพื้นผิวอาจทำให้คุณสมบัติแตกต่างกันไป บ้างก็สว่างจ้าและมีการสะท้อนที่มีทิศทางแน่นอน บ้างก็กระจายไปทุกทิศทางในลักษณะที่เท่าเทียมกัน แสง

  6. แสงประกอบด้วยองค์ประกอบของสีแดง, สีเขียว และสีน้ำเงิน ดังนั้นสีของแหล่งกำเนิดแสงมีคุณสมบัติในเรื่องของปริมาณของแสงสีแดง, แสงสีเขียว และแสงสีน้ำเงินที่แพร่กระจายออกมา รวมทั้งพื้นผิวของวัสดุ (material) ก็มีคุณสมบัติเฉพาะของส่วนประกอบของแสงสีแดง, แสงสีเขียว และแสงสีน้ำเงินที่สะท้อนเข้ามาในทิศทางต่าง ๆ สมการสำหรับการส่องแสงใน OpenGL เป็นเพียงค่าโดยประมาณ ถ้าคุณต้องการความแม่นยำสูงต้องคำนวณรายละเอียดเพิ่มเติม แสง

  7. โมเดลการส่องแสงของ OpenGL แสงมาจากหลายแหล่งกำเนิดที่อาจจะปิดหรือเปิดก็ได้ บ้างก็มาจากทิศทางหรือตำแหน่งโดยเฉพาะ บ้างก็กระจายมาจากที่อื่น เช่น เมื่อเราเปิดดวงไฟในห้อง แสงส่วนมากมาจากดวงไฟ แต่บางส่วนสะท้อนมาจากผนัง แสงที่มาจากรอบด้านนี้ (เรียกว่า ambient) สมมุติว่ากระจายมาโดยบอกไม่ได้ถึงทิศทางต้นกำเนิด แต่แสงเหล่านี้จะหายไปเมื่อปิดแหล่งกำเนิดแสง บนจอภาพอาจจะมีแสงกระจายเข้ามาแต่ไม่ทราบแหล่งที่แน่ชัดอาจเป็นเพราะกระจายมาหลายครั้งหลายหนจะไม่สามารถบอกแหล่งกำเนิดได้ แสง

  8. ในโมเดลของ OpenGL แหล่งกำเนิดแสงจะมีผลเฉพาะเมื่อพื้นผิวมีการดูดซับ หรือสะท้อนแสง เท่านั้น แต่ละพื้นผิวอาจจะประกอบด้วยวัสดุที่แตกต่างกันทำให้มีคุณสมบัติที่ต่างกัน วัสดุเหล่านั้นอาจจะเปล่งแสงออกมาเอง หรืออาจจะกระจายแสงที่เข้ามาออกไปทุกทิศทาง หรืออาจจะสะท้อนบางส่วนออกไปเหมือนกระจก หรือพื้นผิวที่เรียบ ในโมเดลการส่องแสงของ OpenGL แบ่งองค์ประกอบเป็น 4 ส่วนคือ แสงเปล่ง (Emissive), แสงโดยรอบ (Ambient), แสงแพร่ (Defuse) และแสงกล้า (Specular) แสง

  9. มีหลายโมเดลทางกายภาพที่กำหนดปฏิกริยาของแสงที่กระทำกับวัสดุ โมเดลเหล่านี้มีความซับซ้อนสำหรับกราฟิกแบบเรียลไทม์ โมเดลที่นิยมนำมาใช้งานคือโมเดล Phong ซึ่งเป็นโมเดลกำหนดการส่องแสงโดยประมาณที่คำนวณได้ง่ายและมีประโยชน์ในคอมพิวเตอร์กราฟิก OpenGL ใช้โมเดล Phong เข้ามาช่วยคำนวณในการให้แสงและเงา โมเดลนี้ยังรวมมากับฮาร์ดแวร์บนการ์ดแสดงผลอีกด้วย โมเดล Phong ได้กำหนดการกระจายของแสงเพื่อให้เกิดการปรับแสงเป็นจุดไว้ 4 ประเภทคือ การสะท้อนจากแสงแพร่ (Defuse reflection), การสะท้อนจากแสงกล้า (Specular reflection), การสะท้อนจากแสงโดยรอบ (Ambient reflection) และแสงเปล่ง (Emmissive) แสง

  10. ในโลกความเป็นจริง แหล่งกำเนิดแสงเป็นพื้นที่อนันต์ และเห็นได้บ่อยครั้งบนจอภาพ บนพื้นผิวอาจจะมีทั้งแสงเปล่ง หรือแสงสะท้อนที่มากระทบวัสดุได้ ในโมเดล Phong เราสามารถเพิ่มแสงเปล่งซึ่งไม่ได้รับผลกระทบจากแสงที่ส่องเข้ามา และสามารถช่วยให้โมเดลเห็นแหล่งกำเนิดแสง หรือความสว่างของออปเจ็กต์ได้ การกระจายของแสงเปล่งจากพื้นผิวไม่ได้นำมาคำนวณการจัดแสง ดังนั้นพื้นผิวที่เปล่งแสงจะปรากฎเช่นเดียวกับแหล่งกำเนิดแสงอื่น หรือวัสดุอื่น แสงเปล่งจะไม่มีผลกระทบกับตำแหน่งของการมอง แสงเปล่ง (Emissive)

  11. แสงโดยรอบไม่ได้มาจากทิศทางที่แน่นอน ถึงแม้จะมีแหล่งกำเนิด แต่ลำแสงมาโดยรอบห้องหรือจอภาพจนไม่มีทิศทางที่แน่นอน ความสว่างที่เกิดจากแสงโดยรอบนี้มีความสว่างทุกพื้นผิว และทุกทิศทาง เหมือนกับว่าในห้องนั้นเราเห็นออปเจ็กต์ที่ได้รับแสงหลายแสงที่แผ่กระจายออกมา แสงโดยรอบนี้มีบางส่วนที่ดูดซับ และบางส่วนที่สะท้อน รูปต่อไปแสดงออปเจ็กต์ที่ได้รับแสงโดยรอบ แสงโดยรอบ (Ambient)

  12. แสงโดยรอบ (Ambient) แสงโดยรอบที่กระทำกับออปเจ็กต์

  13. แสงแพร่มาจากทิศทางที่แน่นอน แต่สะท้อนออกจากพื้นผิวออปเจ็กต์ แสงแพร่ที่กระทบพื้นผิวก็มีทั้งส่วนที่ดูดซับ และส่วนที่สะท้อนออกไป การสะท้อนจะมีทุกทิศทาง ถึงแม้ว่าจะมีการสะท้อนแสงออกมา พื้นผิวของออปเจ็กต์ยังคงสว่างอยู่ ถ้าแสงนั้นพุ่งตรงที่พื้นผิวมากกว่าถ้าแสงส่องทำมุมกับพื้นผิว ตัวอย่างที่ดีของแหล่งกำเนิดแสงแพร่ก็คือแสงจากหลอดนีออน หรือลำแสงจากพระอาทิตย์ขอบหน้าต่างเวลากลางวัน รูปต่อไปเป็นออปเจ็กต์ที่สว่างอันเนื่องมาจากแสงแพร่ แสงแพร่ (Defuse)

  14. แสงแพร่ (Defuse) แสงแพร่ที่กระทำกับออปเจ็กต์

  15. แสงกล้ามีทิศทางที่แน่นอน ถึงแม้จะมีทั้งการดูดซับและการสะท้อน แต่การสะท้อนของแสงกล้านอกจากจะมีทิศทางที่แน่นอนแล้ว ยังมีความเข้มของแสงที่ชัดเจน แสงกล้าคุณภาพสูงทำให้เกิดความสว่างเป็นจุดที่พื้นผิวของออปเจ็กต์ แสงจากสปอตไลต์และแสงอาทิตย์เป็นตัวอย่างของแสงกล้า รูปต่อไปแสดงออปเจ็กต์ได้รับแสงจากแหล่งแสงกล้า แสงกล้า (Specular)

  16. แสงกล้า (Specular) แสงกล้าที่กระทำกับออปเจ็กต์

  17. แสงกล้า (Specular) ก) มีเฉพาะแสงโดยรอบ ข) มีเฉพาะแสงแพร่ ค) มีเฉพาะแสงกล้า ง) มีแสงทั้งสามประเภท

  18. เราจะไม่สามารถมองเห็นออปเจ็กต์ใด ๆ ได้เลยถ้าปราศจากแสง แสงมีอิทธิพลต่องานศิลปะในงานด้านต่าง ๆ ตั้งแต่ ขนาด มิติ สีสัน อุณหภูมิ ความชัดเจน รายละเอียด เพราะสรรพสิ่งต่าง ๆ ที่เรามองเห็นล้วนอยู่ภายใต้อิทธิพลจากตัวแปรของแสง เช่น ตำแหน่งแสง อุณหภูมิแสง ความสว่าง ประเภทของแสง เป็นต้น เราสามารถกำหนดเงื่อนไขตัวแปรเหล่านี้ได้ด้วย การจัดแสง (lighting) ซึ่งเป็นศิลปะที่มีความละเอียด และอาศัยประสบการณ์จากการสังเกต และจินตนาการของศิลปิน หรือผู้ชม แหล่งกำเนิดแสง

  19. แสงที่ส่องกระทบออปเจ็กต์ทำให้เรามองเห็นออปเจ็กต์ แสงเกิดจากแหล่งกำเนิดแสง (Light source) ช่วยให้เอฟเฟ็กต์ในการจัดแสงกับออปเจ็กต์ เราสามารถจำลองแหล่งกำเนิดแสงที่มีรูปทรงและคุณสมบัติที่หลากหลายได้ เราอาจจะต้องการสร้างออปเจ็กต์ที่เป็นได้ทั้งแหล่งกำเนิดแสงและตัวสะท้อนแสง ยกตัวอย่างเช่น ลูกกลมพลาสติกที่ล้อมรอบหลอดไฟจะทำหน้าที่ทั้งเปล่งแสงและสะท้อนแสงจากผิวของลูกกลมนั้น เป็นต้น แสงจากแหล่งกำเนิดแสง เช่น ดวงอาทิตย์ หรือหลอดไฟ แล้วมีปฏิสัมพันธ์ร่วมกับพื้นผิวของออปเจ็กต์ ทำให้ออปเจ็กต์แสดงคุณสมบัติที่พื้นผิวออกมา รวมทั้งการปรากฏตัวของเงาซึ่งเป็นพื้นที่ของช่องว่างที่ปราศจากแสง แหล่งกำเนิดแสง

  20. ในการจัดแสง เราอาจแบ่งลักษณะของแสงออกได้เป็น 5 ประเภทคือ แสงปฐมภูมิ(Primary light) เป็นลำแสงที่สว่างที่สุด และมักเป็นแสงที่ส่องจากแหล่งกำเนิดแสง เช่น ดวงอาทิตย์ หรือหลอดไฟที่ให้แสงจ้าเป็นรัศมีทุกทิศทาง ทำให้ออปเจ็กต์ที่อยู่ภายใต้อิทธิพลของแสงประเภทนี้ปรากฏเงาอย่างชัดเจน แสงเสริม(Fill light) เป็นแสงที่มีกำลังน้อยไม่ค่อยกระด้าง มักเป็นแสงที่เกิดจากการสะท้อน เช่น แสงจากโคมไฟที่ส่องขึ้นบนเพดานห้องแล้วสะท้อนลงมาสู่พื้น ทำให้ห้องสว่างนุ่มนวล ถ้าใช้กับการถ่ายแบบมักมีวัตถุประสงค์เพื่อลบเงาเข้มที่เกิดจากแสงปฐมภูมิเพื่อทำให้พื้นผิวของออปเจ็กต์แลดูนุ่มนวลขึ้น แหล่งกำเนิดแสง

  21. การแสงหลัง(Back light) เป็นการจัแสงให้ส่องจาก้านหลังออปเจ็กต์ โดยกล้องจะวางจะวางอยู่หน้าออปเจ็กต์ ทำให้ภาพออปเจ็กต์ปรากฏเป็ฯเงาดำของรูปร่างออปเจ็กต์นั้น หรือที่เรียกว่า ภาพโครงทึบ (Silhouette) เช่นเยวกับภาพหนังตะลุง แสงฉาย(Projector light) เป็นแสงที่เกิดจากการฉายไปยังออปเจ็กต์โปร่งแสงทำให้เกิดสีสันรูปร่างของออปเจ็กต์ที่แสงนั้นส่องผ่านไปตกบนฉาก ตัวอย่างเช่น แสงอาทิตย์ที่ส่องผ่านกระจกแก้วสีที่หน้าต่างไปกระทบลงบนพื้นภายในอาคาร หรือภาพที่เกิดจากเครื่องโปรเจ๊กเตอร์ แสงส่องเฉียง(Grazed light) เมื่อแหล่งกำเนิดแสงอยู่ใกล้กับออปเจ็กต์มาก จะทำให้ออปเจ็กต์แสงระดับที่ต่างกนของพื้นผิวออกมา แสงประเภทนี้มักเกิดกับพื้นผิวของออปเจ็กต์ที่มีความสาก หรือหยาบ หากแหล่งกำเนิดแสงทำมุมกับพื้นผิวไม่เกิน 45 จะปรากฏเงาบนตัวผิวออปเจ็กต์ แหล่งกำเนิดแสง

  22. แหล่งกำเนิดแสงมี 2 ประเภทคือ แสงรอบทิศ หรือแสงออมนิ (Omni light) และแสงสปอตไลต์ (Spotlight)ออกมา รวมทั้งการปรากฏตัวของเงาซึ่งเป็นพื้นที่ของช่องว่างที่ปราศจากแสง แสงรอบทิศ หรือแสงออมนิ (Omni light) เป็นแหล่งกำเนิดแสงที่ส่องออกมารอบตัวเองมีลักษณะเป็นดวง หรือจุด เช่น ดวงอาทิตย์ ดวงดาว หลอดไฟ หรือแสงเทียน เป็นต้น แสงรอบทิศนี้จะมีอิทธิพลต่อออปเจ็กต์ต่าง ๆ ที่อยู่รอบแหล่งกำเนิดแสงนั้น โดยด้านของออปเจ็กต์ที่หันเข้าหาแหล่งกำเนิดแสงจะสว่างที่สุด ในขณะที่ด้านตรงข้ามจะมืดที่สุด แหล่งกำเนิดแสง

  23. สำหรับภาพคอมพิวเตอร์กราฟิก พบว่าแสงรอบทิศนี้จะไม่ทำให้เกิดเงาที่ชัดเจนมากนักเมื่อเทียบกับแสงสปอตไลต์ในความสว่างที่เท่ากัน วัตถุประสงค์ของแสงรอบทิศนี้จึงนำมาใช้เป็นแสงเสริมประเภทหนึ่ง ซึ่งเราสามารถลบเงาที่เกิดขึ้นบนตัวออปเจ็กต์ได้ดี โดยเฉพาะเมื่อติดตั้งแสงรอบทิศไว้ในระยะไกล ๆ จะช่วยลดความกร้านของผิวออปเจ็กต์ได้อย่างดี ตัวอย่างของแสงรอบทิศก็คือแสงจากดวงอาทิตย์ แสงจากดวงจันทร์ และแสงเทียม เช่น แสงหลอดทังสะเตน แสงหลอฟลูออเรสเซนต์ หรือแสงหลอดไฟสี เป็นต้น แหล่งกำเนิดแสง

  24. แสงสปอตไลต์(Spotlight) เป็นแสงที่ส่องออกมาเป็นลำเพื่อเน้นความสำคัญของออปเจ็กต์ที่ถูกส่อง แสงประเภทนี้จะมีความเข้มกว่าแสงประเภทอื่นเพื่อให้ออปเจ็กต์ที่ถูกส่องเป็นออปเจ็กต์หลัก และไม่ไปรบกวนออปเจ็กต์อื่นที่อยู่ในฉาก องค์ประกอบของแสงสปอตไลต์จะมีลักษณะที่คล้ายคลึงกับแสงรอบทิศ คือมีตำแหน่งในที่ว่าง 3 มิติ รวมทั้งมีความเกี่ยวข้องกับส่วนจำเพาะ HLS สิ่งที่เป็นลักษณะพิเศษของแสงสปอตไลต์ก็คือการฉายแสงออกมาเป็นลำโดยสามารถกำหนดความเข้มของแสงได้ ทำให้มี จุดเข้ม(Hotspot) ซึ่งเป็นส่วนที่มีความสว่างมากที่สุดของไฟสปอตไลต์ แหล่งกำเนิดแสง

  25. สีของออปเจ็กต์ที่ปรากฏในจุดเข้มจะมีความสดใสและมีการตัดกันมาก รอบ ๆ จุดเข้มเป็นแสงที่มีกำลังอ่อนให้ความเข้มของแสงลดลง การใช้แสงสปอตไลต์ในงานคอมพิวเตอร์กราฟิกยังทำให้นักออกแบบสร้างเงาให้เกิดขึ้นกับออปเจ็กต์ได้อย่างงดงาม ในขณะที่แสงรอบทิศให้แต่ความสว่างโดยทั่วไปเท่านั้น แหล่งกำเนิดแสง

  26. มีรูทีนมากมายใน OpenGL ให้คุณเลือกใช้เพื่อกำหนดแหล่งกำเนิดแสง, เลือกสัมประสิทธิ์การสะท้อนของพื้นผิว และเลือกค่าสำหรับพารามิเตอร์อื่น ๆ ในโมเดลการส่องสว่างพื้นฐาน เรายังสามารถจำลองความโปร่งใส และแสดงการเรนเดอร์พื้นผิวของออปเจ็กต์ได้อีกด้วย การกำหนดแสงใน OpenGL

  27. ใน OpenGL สามารถใช้แหล่งกำเนิดแสงได้มากถึง 8 แหล่ง รวมทั้งสามารถกำหนดคุณสมบัติได้หลากหลาย เช่น ตำแหน่ง, ประเภท, สี, ความเข้มแสง และเอฟเฟ็กต์ของสปอตไลต์ให้แต่ละแหล่งกำเนิดแสงได้ เรากำหนดค่าให้แหล่งกำเนิดแสงด้วยฟังก์ชัน glLight* (lightName, lightProperty, propertyValue); รหัสนำหน้า i หรือ f นำมาใช้กับชื่อฟังก์ชัน ขึ้นอยู่กับประภทข้อมูล (i สำหรับจำนวนเต็ม และ f สำหรับจำนวนทศนิยม) สำหรับข้อมูลที่เป็นเวกเตอร์ จะใช้รหัส v เพิ่มเข้าไป ฟังก์ชันแหล่งกำหนดแสง

  28. พารามิเตอร์ propertyValue เป็นพอยเตอร์ไปยังอาร์เรย์ แต่ละแหล่งกำเนิดแสงอ้างอิงด้วยตัวชี้เฉพาะ พารามิเตอร์ lightName ถูกกำหนดด้วยสัญลักษณ์เฉพาะ GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, …, GL_LIGHT7 ถึงแม้ว่าในบางครั้งจะใช้แหล่งกำเนิดแสงมากกว่า 8 แหล่งก็ตาม พารามิเตอร์ lightProperty ต้องกำหนดด้วยค่าสัญลักษณ์ของคุณสมบัติหนึ่งในสิบของ OpenGL ค่าของพารามิเตอร์จะเป็นGL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION และ GL_QUADRATIC_ATTENUATION ฟังก์ชันแหล่งกำหนดแสง

  29. หลังจากกำหนดทุกคุณสมบัติให้กับแหล่งกำเนิดแสงแล้ว เราเปิดใช้ฟังก์ชันด้วยคำสั่ง glEnable (lightName); กระตุ้นรูทีนการจัดแสงของ OpenGL ด้วยคำสั่ง glEnable (GL_LIGHTING); หลังจากนั้นพื้นผิวออปเจ็กต์จะถูกเรนเดอร์โดยการคำนวณการใช้แสงที่รวมการกระจายจากแหล่งกำเนิดแต่ละแหล่งที่เปิดใช้งานอยู่ ฟังก์ชันแหล่งกำหนดแสง

  30. ฟังก์ชันแหล่งกำหนดแสงฟังก์ชันแหล่งกำหนดแสง ตาราง 10-1 ค่าดีฟอลต์ของพารามิเตอร์ lightProperty ในฟังก์ชัน gllight*()

  31. ค่าสัญลักษณ์ของคุณสมบัติใน OpenGL ในการกำหนดตำแหน่งแหล่งกำเนิดแสงคือ GL_POSITIONในพารามิเตอร์ lightProperty จริง ๆ แล้วสัญลักษณ์นี้ใช้ในการกำหนดคุณสมบัติแหล่งกำเนิดแสง 2 คุณสมบัติในเวลาเดียวกันคือตำแหน่งแหล่งกำเนิดแสง และประเภทแหล่งกำเนิดแสง มีการแบ่งแหล่งกำเนิดแสงใน OpenGL เป็น 2 กลุ่มเพื่อให้จอสว่าง แหล่งกำเนิดแสงที่เป็นจุดจะอยู่ใกล้ออปเจ็กต์ที่ต้องการให้สว่าง หรือใช้เมื่อแหล่งกำเนิดอยู่ระยะอนันต์จากจอภาพ และกลุ่มนี้มีความเป็นอิสระของตำแหน่งที่เรากำหนดแหล่งกำเนิดแสง การกำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง

  32. สำหรับแหล่งกำเนิดที่อยู่ใกล้ แสงจะเปล่งออกมาในทุกทิศทาง และตำแหน่งของแหล่งกำเนิดจะรวมอยู่ในการคำนวณการใช้แสง แต่แสงที่เปล่งจากแหล่งกำเนิดที่อยู่ไกล ๆ จะกระจายเพียงทิศทางเดียว และทิศทางนี้ถูกประยุกต์ใช้กับทุกพื้นผิวบนจอภาพ ซึ่งเป็นอิสระในการกำหนดตำแหน่งของแหล่งกำเนิดแสง ทิศทางของแสงที่กำหนดเป็นแสงจากระยะไกลจะถูกคำนวณเป็นทิศทางจากตำแหน่งที่กำหนดของแหล่งกำเนิดแสงไปยังจุดกำเนิด การกำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง

  33. ค่าเวกเตอร์ที่เป็นค่าทศนิยม 4 ค่าถูกนำมาใช้เพื่อกำหนดทั้งประเภทของแสง และค่าโคออร์ดิเนตสำหรับตำแหน่งแสง ค่า 3 ตัวแรกเวกเตอร์นี้ให้ค่าตำแหน่งโคออร์ดิเนตทางกายภาพ ค่าที่ 4 ใช้เพื่อกำหนดประเภทแหล่งกำเนิด ถ้าเรากำหนดค่าเป็น 0.0 ให้กับค่าที่ 4 ของตำแหน่งเวกเตอร์ จะเป็นแสงที่อยู่ไกลมาก ๆ (ใน OpenGL จะเป็นแสงแบบ directional) หลังจากนั้นตำแหน่งของแหล่งกำเนิดแสงจะใช้เพียงเพื่อกำหนดทิศทางของแสง นอกนั้นแสงจะเป็นแสงจากแหล่งใกล้ ๆ (ใน OpenGL จะเป็นแสงแบบ positional) การกำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง

  34. ตำแหน่งแสงจะนำไปใช้ในรูทีนจัดแสงเพื่อกำหนดทิศทางของแสงไปยังแต่ละออปเจ็กต์บนจอภาพ ในตัวอย่างต่อไปนี้ light1 ถูกกำหนดเป็นแสงระยะใกล้ที่ตำแหน่ง (2.0, 0.0, 3.0) ในขณะที่ light2 เป็นแสงจากระยะไกลที่แสงเปล่งในทิศทาง –y GLfloat light1PosType [] = {2.0, 0.0, 3.0, 1.0}; GLfloat light2PosType [] = {0.0, 1.0, 0.0, 0.0}; glLightfv (GL_LIGHT1, GL_POSITION, light1PosType); glEnable (GL_LIGHT1); glLightfv (GL_LIGHT2, GL_POSITION, light2PosType); glEnable (GL_LIGHT2); การกำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง

  35. ถ้าเราไม่ได้กำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง ค่าดีฟอลต์คือ (0.0, 0.0, 1.0, 0.0) ซึ่งบอกว่าเป็นแสงจากระยะไกลที่มีทิศทางของแสงในทิศทาง –z ตำแหน่งของแหล่งกำเนิดแสงถูกรวมอยู่ในรายละเอียดของออปเจ็กต์บนจอภาพ และถูกแปลงไปยังโคออร์ดิเนตการมองตามตำแหน่งของออปเจ็กต์โดยเมทริกซ์การแปลงทางเรขาคณิตและเมทริกซ์การแปลงการมอง ดังนั้นถ้าเราต้องการเก็บแหล่งกำเนิดแสงให้อยู่คงที่สัมพันธ์กับออปเจ็กต์บนจอภาพ เราต้องกำหนดตำแหน่งของออปเจ็กต์หลังจากการกำหนดการแปลงทางเรขาคณิตและการแปลงการมองในโปรแกรม แต่ถ้าเราต้องการให้แหล่งกำเนิดแสงย้ายไปตามที่การย้ายของจุดมอง ให้เรากำหนดตำแหน่งก่อนการแปลงการมอง และเราสามารถย้าย หรือหมุนแหล่งกำเนิดแสงไปรอบ ๆ จอภาพได้ การกำหนดตำแหน่งและประเภทของแหล่งกำเนิดแสง

  36. แสงใน OpenGL จะต่างกับแสงจริงตรงที่ แสง OpenGL มีคุณสมบัติสี RGBA แตกต่างกัน 3 คุณสมบัติ ตามกฎที่ตั้งไว้ สี 3 สีจากแหล่งกำเนิดมีออปชันสำหรับเอฟเฟ็กต์ของแสงที่หลากหลายบนจอภาพ เรากำหนดสีเหล่านี้โดยใช้สัญลักษณ์ของคุณสมบัติ GL_AMBIENT, GL_DIFFUSE และ GL_SPECULAR แต่ละคุณสมบัติเหล่านี้ถูกกำหนดขึ้นด้วยชุดของค่าทศนิยม 4 ค่า องค์ประกอบของแต่ละสีกำหนดในรูปแบบ (R, G, B, A) ซึ่งค่า A เป็นค่าแอลฟ่าที่นำมาใช้เพื่อให้สีกลืนกันโดยจะต้องใช้ฟังก์ชัน glEnable(GL_BLEND) ร่วมกับฟังก์ชัน glBlendFunc() การกำหนดสีของแหล่งกำเนิดแสง

  37. จากสัญลักษณ์ของคุณสมบัติพอจะเดาได้ว่า แสงแรกเป็นแสงที่รวมเป็นแสงแบ็คกราวนด์ (Ambient) บนจอภาพ อีกแสงหนึ่งใช้เพื่อคำนวณแสงที่แพร่ (Deffuse) ออกมา แสงสุดท้ายใช้เพื่อคำนวณเอฟเฟ็กต์ของแสงกล้า (Specular) ที่มีต่อพื้นผิวของออปเจ็กต์ เพื่อความสมจริงเราจะใช้แสงจากแหล่งกำเนิดเดียว แต่เราสามารถใช้แหล่งกำเนิดแสง 3 สีใน OpenGL เพื่อสร้างเอฟเฟ็กต์จากแสง ใน ตัวอย่างโค้ดข้างล่างนี้ เรากำหนดแสงโดยรอบให้กับแหล่งกำเนิดระยะใกล้ที่ชื่อ GL_LIGHT3 เป็นสีดำ และเรากำหนดแสงแพร่และแสงกล้าเป็นสีขาว การกำหนดสีของแหล่งกำเนิดแสง

  38. GLfloat blackColor [] = {0.0, 0.0, 0.0, 1.0}; GLfloat whiteColor [] = {1.0, 1.0, 1.0, 1.0}; glLightfv (GL_LIGHT3, GL_AMBIENT, blackColor); glLightfv (GL_LIGHT3, GL_DIFFUSE, whiteColor); glLightfv (GL_LIGHT3, GL_SPECULAR, whiteColor); ค่าสีดีฟอลต์สำหรับแหล่งกำเนิด 0 คือสีดำสำหรับแสงโดยรอบ และสีขาวสำหรับแสงแพร่และแสงกล้า ส่วนแหล่งกำเนิดแสงอื่นทั้งหมดค่าสีดีฟอลต์ของทั้งแสงโดยรอบ, แสงแพร่ และแสงกล้าจะเป็นสีดำ การกำหนดสีของแหล่งกำเนิดแสง

  39. เราสามารถประยุกต์ใช้การลดความเข้มของแสงจากแสงที่เปล่งจากแหล่งกำเนิดแสงระยะใกล้ของ OpenGL รูทีนการจัดแสงจะมีสูตรคำนวณเพื่อลดความเข้มแสง ค่าคงที่ที่เป็นคุณสมบัติของ OpenGL มี 3 ค่าในการลดความเข้มของแสงคือ GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION ซึ่งเป็นค่าที่สัมพันธ์กับสัมประสิทธิ์ในสูตรการคำนวณ เราสามารถใช้ค่าจำนวนเต็มบวก และค่าทศนิยมบวกเพื่อกำหนดเป็นค่าสัมประสิทธิ์ของการลดความเข้ม การกำหนดสัมประสิทธิ์การลดความเข้มของแหล่งกำเนิดแสง

  40. เช่น เราสามารถกำหนดค่าสัมประสิทธิ์การลดความเข้มแสงเป็น glLightf (GL_LIGHT6, GL_CONSTANT_ATTENUATION, 1.5); glLightf (GL_LIGHT6, GL_LINEAR_ATTENUATION, 0.75); glLightf (GL_LIGHT6, GL_QUADRATIC_ATTENUATION, 0.4); เมื่อเรากำหนดค่าสัมประสิทธิ์การลดความเข้มเพียงครั้งเดียว ฟังก์ชันในการลดความเข้มจะใช้กับแสงทั้ง 3 (แสงโดยรอบ, แสงแพร่ และแสงกล้า) ค่าดีฟอลต์จะไม่มีการลดค่าความเข้ม ถึงแม้ว่าการลดความเข้มแสงจะสามารถสร้างภาพได้สมจริงก็ตาม แต่จะใช้เวลาในการคำนวณมากกว่า การกำหนดสัมประสิทธิ์การลดความเข้มของแหล่งกำเนิดแสง

  41. ex10_01.cpp ใช้ฟังก์ชันเพื่อจัดแสงให้กับรูปทรงกลม การกำหนดสัมประสิทธิ์การลดความเข้มของแหล่งกำเนิดแสง

  42. ex10_02.cpp ใช้เมาส์ปุ่มเพื่อเลื่อนตำแหน่งของแสงไปรอบ ๆ รูปโดนัท การกำหนดสัมประสิทธิ์การลดความเข้มของแหล่งกำเนิดแสง

  43. สำหรับแสงจากระยะใกล้ (ไม่คิดที่ระยะอนันต์) เราสามารถกำหนดเอฟเฟ็กต์ของแสงสปอต์ไลต์ได้ ข้อจำกัดนี้เป็นของแสงที่ปล่อยออกจากแหล่งกำเนิดแสงพื้นที่รูปกรวย เรากำหนดพื้นที่รูปกรวยด้วยเวกเตอร์กำหนดทิศทางตามแกนของกรวยและมุมการแพร่ l จากแกนของกรวยแสดงดังรูปต่อไปนอกจากนี้ เรายังสามารถกำหนดค่า angular-attenuation exponent al สำหรับแหล่งกำเนิดที่กำหนดปริมาณความเข้มแสงที่ลดลงเมื่อเรายายออกจากศูนย์กลางของกรวยไปยังผิวของกรวย ตามทิศทางภายในกรวยของแสง การกำหนดแสงสปอตไลต์

  44. ค่า angular attenuation factor คือ cosalโดย cos เป็นการคำนวณ dot product ของเวกเตอร์แกนของกรวย กับเวกเตอร์จากแหล่งกำเนิดไปยังตำแหน่งออปเจ็กต์ เราคำนวณค่าแต่ละส่วนของแสงโดยรอบ, แสงแพร่ และแสงกล้าที่มุม  โดยการคูณองค์ประกอบความเข้มแสงด้วยค่าแฟคเตอร์นี้ ถ้า  > lออปเจ็กต์นั้นอยู่นอกกรวยแหล่งกำเนิดแสง และออปเจ็กต์ไม่ได้สว่างเพราะแหล่งกำเนิดแสงนี้ สำหรับลำแสงที่อยู่ภายในกรวย เรายังสามารถลดทอนค่าความเข้มในการปล่อยแสงอีกด้วย การกำหนดแสงสปอตไลต์

  45. การกำหนดแสงสปอตไลต์ การเปล่งแสงรูปกรวยวงกลมจากแหล่งกำเนิดแสงของ OpenGL

  46. มีคุณสมบัติใน OpenGL 3 คุณสมบัติที่เป็นเอฟเฟ็กต์ในการใช้แสงสปอต์ไลต์คือ GL_SPOT_DIRECTION, GL_SPOT_CUTOFF และ GL_SPOT_EXPONENT เราสามารถกำหนดทิศทางของแสงเป็นเวกเตอร์ของโคออร์ดิเนตทางกายภาพได้ด้วยเลขจำนวนเต็มหรือเลขทศนิยมก็ได้ มุมของกรวย l เป็นค่ามุมที่กำหนดเป็นเลขจำนวนเต็ม หรือเลขทศนิยมก็ได้ มุมนี้อาจจะเป็น 180 หรือค่าที่อยู่ระหว่าง 0ถึง 90 เมื่อมุมของกรวยกำหนดเป็น 180 ลำแสงของแหล่งกำเนิดแสงมีทุกทิศทาง (360) การกำหนดแสงสปอตไลต์

  47. เรากำหนดเลขชี้กำลังสำหรับการลดความเข้มแสงเป็นเลขจำนวนเต็ม หรือเลขทศนิยมในช่วงตั้งแต่ 0 ถึง 128 คำสั่งต่อไปนี้เป็นเอฟเฟ็กต์สำหรับแหล่งกำเนิดแสง 3 ดังนั้นแกนของกรวยอยู่ในทิศทาง +x มุมของกรวย l คือ 30 และเลขชี้กำลังของการลดทอนคือ 2.5 GLfloat dirVector [] = {1.0, 0.0, 0.0}; Gllightfv (GL_LIGHT3, GL_SPOT_DIRECTION, dirVector); Gllightf (GL_LIGHT3, GL_SPOT_CUTOFF, 30.0); Gllightf (GL_LIGHT3, GL_SPOT_EXPONENT, 2.5); การกำหนดแสงสปอตไลต์

  48. ถ้าเราไม่ต้องการกำหนดทิศทางของแหล่งกำเนิดแสง ค่าดีฟอลต์ของทิศทางคือขนานกับแกน –z นั่นคือที่ (0.0, 0.0, -1.0) ค่าดีฟอลต์ของกรวยคือ 180 ค่าดีฟอลต์ของเลขชี้กำลังการลดความเข้มแสงคือ 0 ดังนั้นค่าดีฟอลต์คือแหล่งกำเนิดเป็นจุดที่ปล่อยแสงรอบทิศทางที่ไม่มีมุมการลดความเข้มแสง การกำหนดแสงสปอตไลต์

  49. ex10_03.cpp แสดงการใช้แสงสปอต์ไลต์และคุณสมบัติต่าง ๆ การกำหนดแสงสปอตไลต์

  50. มีพารามิเตอร์ในการจัดแสงของ OpenGL หลายพารามิเตอร์ที่อยู่ในระดับโกลบอล ค่าเหล่านี้ใช้ในการควบคุมวิธีการที่ใช้ในการคำนวณเพื่อการจัดแสง ค่าโกลบอลพารามิเตอร์ถูกกำหนดได้ด้วยคำสั่ง glLightModel*(paramName, paramValue); เราเพิ่มรหัสนำหน้า i หรือ f ขึ้นกับประเภทข้อมูลของค่าพารามิเตอร์ และสำหรับข้อมูลเวกเตอร์ สามารถเพิ่มรหัสนำหน้า v ได้ พารามิเตอร์ paramName เป็นสัญลักษณ์กำหนดคุณสมบัติทางโกลบอล พารามิเตอร์ paramValue กำหนดเป็นค่าเดี่ยว หรือค่าเป็นชุดก็ได้ การกำหนดโมเดลของแสง

More Related