คอมพิวเตอร์กราฟิกส์ใช้ OpenGL

Download Report

Transcript คอมพิวเตอร์กราฟิกส์ใช้ OpenGL

คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL
(Computer Graphics using OpenGL)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
1
บทที่ 8
การมองภาพ 3 มิตแิ ละการขริบภาพ
(3D Viewing & Clipping )
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
2
OpenGL คืออะไร
ในกราฟิ ก 2 มิติ การมองภาพจะแปลงตาแหน่งจากระนาบทาง
กายภาพไปเป็ นตาแหน่งพิกเซลในระนาบของอุปกรณ์แสดงผล
วินโดว์ขริบภาพและวิวพอร์ ตที่ใช้ ขอบเขตเป็ นสี่เหลี่ยมในกราฟิ ก 2 มิติ
จะขริบภาพแล้ วแม็พไปยังโคออร์ ดิเนตของอุปกรณ์แสดงผลได้ ทนั ที
แต่การมองภาพ 3 มิติมีสิ่งที่เกี่ยวข้ องมากมายที่เป็ นตัวเลือกที่สามารถ
สร้ างภาพ และสร้ างมุมมองของภาพบนอุปกรณ์แสดงผลได้
ถึงแม้ ออปเจ็กต์ 3 มิติต้องใช้ โคออร์ ดิเนตถึง 3 แกน แต่ภาพ 3 มิติ
เหล่านี ้จะถูกวาดลงบนระนาบเรี ยบ 2 มิติเพื่อให้ ผ้ ใู ช้ เห็นออปเจ็กต์นนั ้
ดังนันจึ
้ งต้ องมีวิธีการสร้ างภาพ 2 มิติของออปเจ็กต์ที่ถกู กาหนดไว้ ใน
โคออร์ ดิเนต 3 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
3
หลักการมองภาพ 3 มิติ
เมื่อเราสร้ างรูปทรง 3 มิติบนจอภาพ แต่ละออปเจ็กต์บนจอภาพถูก
กาหนดเป็ นชุดของพื ้นผิวปิ ดที่ประกอบรวมกันเป็ นออปเจ็กต์
บางแอปพลิเคชันเราอาจจะต้ องกาหนดข้ อมูลโครงสร้ างภายในของ
ออปเจ็กต์เพิ่มเติม
นอกจากโปรซีเดอร์ สาหรับการสร้ างมุมมองพื ้นผิวของออปเจ็กต์แล้ ว
ในบางครัง้ กราฟิ กแพ็กเกจจะต้ องมีรูทีนในการแสดงโครงสร้ างภายใน
หรื อมุมมองภาคตัดขวางของออปเจ็กต์ทบึ ด้ วย
ฟั งก์ชนั การมองจะแสดงรายละเอียดของออปเจ็กต์เป็ นชุดของโปรซี
เดอร์ ที่โปรเจ็กต์มมุ มองของออปเจ็กต์เพื่อกาหนดลงบนอุปกรณ์
แสดงผล
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
4
ภาพรวมแนวคิดการมองภาพ 3 มิติ
มีหลายขันตอนในการมองภาพ
้
3 มิติ เช่น รูทีนการขริบภาพ ที่
เหมือนกับการมองภาพ 2 มิติ
แต่ในการมองภาพ 3 มิติมีงานบางอย่างที่ไม่ได้ แสดงในการมองภาพ 2
มิติ ยกตัวอย่างเช่น ต้ องใช้ รูทีนของโปรเจ็กต์ชนั เพื่อแปลงจอภาพไป
บนผิวระนาบ ต้ องมีการกาหนดจอภาพการมองห็น
สาหรับการแสดงผลให้ สมจริงจะต้ องมีการใช้ การตกกระทบของแสง
และใช้ คณ
ุ สมบัติของพื ้นผิวประกอบด้ วย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
5
การมองภาพ 3 มิติ
การแสดงจอภาพ 3 มิติ ในขันแรกเราต้
้
องกาหนดการอ้ างอิง
โคออร์ ดิเนตสาหรับพารามิเตอร์ การมอง หรื อที่เรี ยกว่า “กล้ อง”
การอ้ างอิงโคออร์ ดิเนตนี ้จะกาหนดตาแหน่งและแนวสาหรับระนาบ
การมอง (view plane หรื อ projection plane) ที่สมั พันธ์กบั กล้ อง
ถ่ายภาพ (ดังรูป)
หลังจากนันรายละเอี
้
ยดของออปเจ็กต์จะถูกแปลงไปยังโคออร์ ดิเนตที่
อ้ างอิงการมอง แล้ วจึงโปรเจ็กต์ภาพนันไปบนระนาบ
้
เราสามารถสร้ างมุมมองของออปเจ็กต์บนอุปกรณ์แสดงผลในแบบของ
เอาต์ไลน์ได้ หรื อจะประยุกต์ใช้ เทคนิคของแสงและเงา รวมทังการ
้
เรนเดอร์ พื ้นผิวเพื่อให้ ภาพเกิดเป็ นภาพสมจริงมากยิ่งขึ ้นได้ อีกด้ วย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
6
การมองภาพ 3 มิติ
การอ้ างอิงโคออร์ ดเิ นตสาหรับมุมมองของจอภาพ 3 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
7
โปรเจ็กต์ ชัน (Projection)
สิง่ ที่แตกต่างจากกล้ องถ่ายภาพก็คือ เราสามารถเลือกวิธีโปรเจ็กต์ชนั
ภาพลงบนระนาบการมอง
วิธีการหนึง่ ที่สามารถให้ รายละเอียดของออปเจ็กต์ทบึ บนระนาบ
แสดงผลคือโปรเจ็กต์ชนั พื ้นผิวของออปเจ็กต์แบบขนานซึง่ เรี ยกเทคนิค
นี ้ว่า “โปรเจ็กต์ชนั แบบขนาน” (parallel projection) ที่ใช้ กนั บ่อยใน
การวาดทางวิศวกรรมและสถาปั ตยกรรมเพื่อแสดงออปเจ็กต์ด้วยชุด
ของมุมมองเพื่อแสดงออปเจ็กต์ได้ อย่างเที่ยงตรง ดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
8
โปรเจ็กต์ ชัน (Projection)
มุมมอง 3 มุมมองของโปรเจ็กต์ชนั แบบขนานที่ใช้ ในด้ านวิศวกรรม
และสถาปั ตยกรรม
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
9
โปรเจ็กต์ ชัน (Projection)
วิธีการอื่นในการสร้ างภาพ 3 มิตคิ ือโปรเจ็กต์ชนั ไปยังระนาบการมองตาม
เส้ นทางที่เบนเข้ าหากัน โปรเจ็กต์ชนั นี ้เรี ยกว่า โปรเจ็กต์ชนั แบบเพอร์ สเปก
ทีพ (perspective projection)
โปรเจ็กต์ชนั แบบนี ้ทาให้ ออปเจ็กต์ที่มีขนาดเท่ากันแต่อยู่ตาแหน่งที่ไกลจาก
ตาแหน่งการมองจะแสดงขนาดที่เล็กกว่าออปเจ็กต์ที่อยูใ่ กล้ กบั ตาแหน่ง
การมอง
ภาพที่สร้ างจากโปรเจ็กต์ชนั แบบนี ้จะให้ ความสมจริ งมากกว่า เนื่องจาก
เป็ นวิธีเดียวกับการการสร้ างภาพของกล้ องและตาของเรา ภาพดังรูป จะ
แสดงเส้ นขนานตามทิศทางการมองที่ปรากฏเป็ นเส้ นทางที่เบนเข้ าหากันใน
แบ็คกราวนด์ และเครื่ องบินในแบ็คกราวนด์เล็กกว่าที่ขึ ้นในฟอร์ กราวนด์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
10
การมองภาพ 3 มิติ
ภาพเพอร์ สเปกทีพของสนามบิน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
11
ความลึกของภาพ (Dept cueing)
ข้ อมูลความลึกของภาพเป็ นส่วนสาคัญของภาพ 3 มิติ
เราสามารถกาหนดทิศทางการมองโดยเฉพาะได้ ง่าย ๆ ซึง่ ทิศทางนี ้
เป็ นทิศทางของหน้ าและหลังของออปเจ็กต์ที่แสดง
รูปต่อไปแสดงรูปโครงของปิ ระมิดที่ไม่มีข้อมูลความลึกของออปเจ็กต์
มีหลายวิธีทีเราสามารถรวมข้ อมูลความลึกในการแสดงออปเจ็กต์ทบึ
ในการแสดงภาพ 2 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
12
ความลึกของภาพ (Dept cueing)
การแสดงรูปโครงของปิ ระมิด
ก) ไม่มีข้อมูลความลึกที่ชี ้ว่าทิศทางการมองเป็ นอย่างไร
ข) มองลงมาจากด้ านบนของปิ ระมิด
ค) มองขึ ้นจากด้ านล่างของปิ ระมิด
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
13
ความลึกของภาพ (Dept cueing)
วิธีการง่าย ๆ ในการแสดงความลึกในการแสดงรูปโครงร่างจะใช้ ความ
สว่างของเส้ นที่แปรเปลี่ยนไปตามระยะทางจากตาแหน่งที่มอง
โดยปกติแล้ วตาแหน่งการมองที่อยูใ่ กล้ จะแสดงความสว่างของเส้ นที่
ชัดเจนกว่าตาแหน่งการมองที่อยูไ่ กล ๆ โดยจะลดระดับความเข้ มของ
แสงสว่างลงไปเมื่ออยูไ่ กลออกไป
การกาหนดความลึกนี ้จะมีการกาหนดช่วงความเข้ มของแสงสว่างที่
เปลี่ยนไปตามตาแหน่งการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
14
ความลึกของภาพ (Dept cueing)
การกาหนดความลึกในแอปพลิเคชันอื่นคือการจาลองโมเดลเอฟเฟ็ กต์
ของบรรยากาศของออปเจ็กต์ที่มองเห็น
ยิ่งระยะไกลออกไปออปเจ็กต์จะปรากฏมัวกว่าเมื่ออยูใ่ กล้ ออปเจ็กต์
ตามการกระจายของแสงที่มีผนุ่ หมอก และควัน
ในบางเอฟเฟ็ กต์ของบรรยากาศสามารถเปลี่ยนสีของออปเจ็กต์ และ
เราสามารถจาลองเอฟเฟ็ กต์ได้ ด้วยการใช้ ความลึกเข้ ามาช่วย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
15
การกาหนดเส้ นและพืน้ ผิวที่เห็นได้
เราสามารถให้ ความชัดเจนถึงความสัมพันธ์ของความลึกในการแสดงรูป
โครงร่างโดยการใช้ เทคนิดอื่นนอกเหนือจากการกาหนดความลึก
วิธีหนึ่งที่นามาใช้ คือการไฮไลต์เส้ นที่มองเห็น หรื อแสดงด้ วยสีที่แตกต่างกัน
ส่วนเทคนิคอื่นที่มกั นามาใช้ บอ่ ย ๆ ในการวาดภาพทางวิศวกรรมคือการ
แสดงเส้ นที่มองไม่เห็นด้ วยเส้ นประ หรื อเราจะกาจัดเส้ นที่มองไม่เห็นออกไป
จากภาพก็ได้ ดังรูป ข) และ ค) ที่ผ่านมา
แต่การกาจัดเส้ นที่ซอ่ นอยูจ่ ะเป็ นการลบข้ อมูลเกี่ยวกับรู ปทรงที่พื ้นผิว
ด้ านหลังของออปเจ็กต์
การแสดงรูปโครงร่างโดยทัว่ ไปจะเป็ นการแสดงภาพรวมของออปเจ็กต์ที่มี
ทังหน้
้ าและหลังอยูแ่ ล้ ว
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
16
การกาหนดเส้ นและพืน้ ผิวที่เห็นได้
เมื่อมีการสร้ างมุมมองภาพเสมือนจริง (realistic) ของภาพ ส่วนหลัง
ของภาพจะถูกกาจัดออกไป
ดังนันจะมี
้ เพียงพื ้นผิวที่มองเห็นเท่านันที
้ ่มองเห็น ในกรณีนี ้จะมีการ
ประยุกต์ใช้ ขนตอนการเรนเดอร์
ั้
พื ้นผิว (Surface Rendering) ทาให้
พิกเซลของจอภาพจะมีเพียงแพทเทิร์นของสีพื ้นผิวด้ านหน้ าเท่านัน้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
17
การกาหนดเส้ นและพืน้ ผิวที่เห็นได้
ภาพเสมือนจริงของห้ องที่ใช้ โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
ความเข้ มของแสง และคุณสมบัติทางพื ้นผิว
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
18
การเรนเดอร์ พนื ้ ผิว (Surface Rendering)
การเพิ่มความสมจริ งในการแสดงผลทาได้ โดยการเรนเดอร์ พื ้นผิวของ
ออปเจ็กต์ด้วยการใช้ แสงในจอภาพ และการใช้ คณ
ุ สมบัติของพื ้นผิว
เรากาหนดสถานะของแสงโดยการกาหนดสี และตาแหน่งแหล่งกาเนิด
แสง
เรายังสามารถกาหนดเอ็ฟเฟ็ กต์ความเข้ มของแบ็คกราวนด์ได้ อีกด้ วย
คุณสมบัติทางพื ้นผิวของออปเจ็กต์อาจจะเป็ นแบบโปร่งแสงหรื อทึบแสง
ก็ได้
ประเภทของพื ้นผิวอาจจะเป็ นแก้ ว พลาสติก ลายไม้ หรื อผิวขรุขระ
ในรูปที่ผา่ นมาเป็ นวิธีการเรนเดอร์ พื ้นผิวรวมอยูก่ บั เพอร์ สเปกทีพและการ
กานดการมองเห็นของพิ ้นผิวเพื่อสร้ างระดับความเสมือนจริ งบนจอภาพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
19
การแตกมุมมองและภาคตัดขวาง
มีหลาย ๆ กราฟิ กแพ็กเกจยอมให้ มีการออกแบบออปเจ็กต์ในลักษณะ
โครงสร้ างเป็ นชัน้ ๆ ที่มีการเก็บรายละเอียดภายในไว้
การแตกมุมมองและภาคตัดขวางของออปเจ็กต์สามารถใช้ แสดง
โครงสร้ างภายในและความสัมพันธ์ของแต่ละชิ ้นของออปเจ็กตืได้
รูปต่อไปแสดงการแตกมุมมองที่หลากหลายในการออกแบบทาง
กลศาสตร์
นอกจากนี ้ยังมีการแตกมุมมองของออปเจ็กต์เป็ นภาคตัดขวางชิ ้นส่วน
ของออปเจ็กต์ ดังรูปถัดไปซึง่ นาพื ้นผิวออกไปเพื่อแสดงโครงสร้ าง
ภายใน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
20
ภาพเครื่ องยนต์ ก) ภาพส่วนประกอบเครื่ องยนต์ทงหมด
ั้
ข) ภาพแตกมุมมมองเป็ นเส้ น
โครง ค) ภาพแตกมุมมองเป็ นพิ ้นผิว ง) ภาพแตกมุมมองการเรนเดอร์ พิ ้นผิวและการให้ สี
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
21
ภาคตัดขวางของชิ ้นส่วนออปเจ็กต์เพื่อแสดงโครงสร้ างและความสัมพันธ์ของ
ส่วนประกอบภายใน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
22
หลักการมองภาพ 3 มิติ
ขันตอนการสร้
้
างภาพคอมพิวเตอร์ กราฟิ กในมุมมองของภาพ 3 มิติ
คล้ ายกับขันตอนของการถ่
้
ายภาพ
ขันแรกเราต้
้
องเลือกตาแหน่งการมองให้ สมั พันธ์กบั ตาแหน่งกล้ อง เรา
เลือกตาแหน่งการมองตามสิง่ ที่เราต้ องการแสดงมุมมองหน้ า, หลัง,
ข้ าง, บน และล่างของภาพ
เรายังสามารถเลือกตาแหน่งกึง่ กลางของกลุม่ ออปเจ็กต์หรื อภายใน
ออปเจ็กต์ชิ ้นเดียว เช่น ตึก หรื อโมเลกุล ก็ได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
23
หลักการมองภาพ 3 มิติ
หลังจากนันเราตั
้
ดสินใจเลือกแบบการวางกล้ อง (ดังรูป) ซึง่ เป็ นสิง่ ที่เรา
ต้ องการกาหนดจุดของกล้ องจากตาแหน่งการมองที่ต้องการ
ขันสุ
้ ดท้ าย เมื่อกดชัตเตอร์ จะมีการตัดส่วนภาพให้ มีขนาดตามวินโดว์
ขริบภาพที่เลือกซึง่ สัมพันธ์กบั ช่องรับแสง หรื อประเภทของเลนส์กล้ อง
และมีการป้องกันฟิ ล์มไม่ให้ โดนแสง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
24
หลักการมองภาพ 3 มิติ
การถ่ายภาพที่มีการเลือกตาแหน่งและแบบการวางกล้ อง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
25
หลักการมองภาพ 3 มิติ
อย่างไรก็ตามให้ คิดไว้ เสมอว่าเราสามารถนากล้ องถ่ายรูปติดตัวไปที่
ไหนไกล ๆ ได้ เท่านัน้
แต่สาหรับโปรแกรมทางคอมพิวเตอร์ กราฟิ กแล้ ว จะมีความยืดหยุน่
และมีออปชันมากมายในการสร้ างมุมมองของภาพที่มากกว่าที่ได้ จาก
กล้ อง
เราสามารถเลือกโปรเจ็กต์ชนั แบบขนานหรื อแบบเพอร์ สเปกทีพก็ได้
หรื อจะกาจัดส่วนที่ไม่ต้องการทิ ้งออกไป หรื อจะย้ ายระนาบโปรเจ็กต์
ชันออกจากตาแหน่งของกล้ องก็ได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
26
หลักการมองภาพ 3 มิติ
ในการดาเนินการกับการมองภาพ 3 มิตกิ ็เหมือนกับที่เราใช้ ในหลักการ
มองภาพ 2 มิติ
วิวพอร์ ตของภาพ 2 มิติถกู นามาใช้ กาหนดตาแหน่งมุมมองโปรเจ็กต์
ของภาพ 3 มิติบนอุปกรณ์แสดงผล
วินโดว์ขริบภาพ 2 มิติถกู นามาใช้ เลือกมุมมองที่จะถูกแม็พไปยังวิว
พอร์ ต
เมื่อเรากาหนดวินโดว์แสดงผลในโคออร์ ดิเนตของจอภาพ เราแค่เพียง
ทาในแอปพลิเคชัน 2 มิติเท่านัน้ ทังวิ
้ นโดว์ขริบภาพ วิวพอร์ ต และ
วินโดว์แสดงผลโดยปกติจะกาหนดเป็ นสี่เหลี่ยมผืนผ้ าที่มีขอบขนาน
กับแกนของโคออร์ ดิเนต
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
27
หลักการมองภาพ 3 มิติ
อย่างไรก็ตาม ในการมองภาพ 3 มิตินนั ้ วินโดว์ขริบภาพถูกกาหนด
ตาแหน่งอยูบ่ นระนาบการมอง และภาพถูกขริบออกและล้ อมรอบด้ วย
สิง่ ว่างเปล่า ซึง่ กาหนดโดยชุดของระนาบการขริบ (clipping planes)
ตาแหน่งการมอง, ระนาบการมอง, วินโดว์ขริบภาพ และระนาบการ
ขริบ ทังหมดนี
้
้ถูกกาหนดอยูภ่ ายในเฟรมอ้ างอิงของโคออร์ ดิเนตการ
มอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
28
หลักการมองภาพ 3 มิติ
รูปต่อไปแสดงขันตอนทั
้
ว่ ไปในการสร้ างและแปลงภาพ 3 มิติไปยัง
โคออร์ ดิเนตของอุปกรณ์
เริ่มต้ นที่การแปลงโมเดลของโคออร์ ดิเนตโมเดล (MC) ไปเป็ น
โคออร์ ดิเนตทางกายภาพ (WC)
หลังจากนันท
้ าการแปลงทางมุมมองให้ เป็ นโคออร์ ดิเนตของมุมมอง
(VC) โคออร์ ดิเนตของมุมมองนี ้จะกาหนดพารามิเตอร์ ของการมอง
รวมทังต
้ าแหน่งและแนวของระนาบโปรเจ็กต์ชนั (ระนาบการมอง) ซึง่
เหมือนกับระนาบของฟิ ล์มในกล้ องถ่ายรูป
วินโดว์ขริบภาพ 2 มิติที่สมั พันธ์กบั เลนส์ถกู กาหนดบนระนาบโปรเจ็กต์
ชัน และมีการสร้ างพื ้นที่ขริบภาพ 3 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
29
หลักการมองภาพ 3 มิติ
พื ้นที่ขริบภาพนี ้เรี ยกว่า ปริมาตรการมอง (view volume) โดยมีรูปร่าง
และขนาดขึ ้นกับมิติของวินโดว์ขริบภาพ, ประเภทโปรเจ็กต์ชนั ที่เรา
เลือก และขีดจากัดตาแหน่งตามทิศทางการมอง
โปรเจ็กต์ชนั จะดาเนินการเพื่อแปลงโคออร์ ดิเนตการมองของจอภาพ
เป็ นตาแหน่งโคออร์ ดิเนตบนระนาบโปรเจ็กต์ (PC)
ออปเจ็กต์จะถูกแม็พไปยังโคออร์ ดิเนตนอมอลไลซ์ (NC) และทุกส่วน
ของจอภาพที่อยูภ่ ายนอกของปริมาตรการมองจะถูกขริบออกไป
การดาเนินการขริบสามารถประยุกต์ใช้ ได้ กบั การแปลงโคออร์ ดิเนต
ของอุปกรณ์ (จากโคออร์ ดิเนตทางกายภาพไปเป็ นโคออร์ ดิเนตนอมอล
ไลซ์)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
30
หลักการมองภาพ 3 มิติ
หลักทัว่ ไปในการสร้ างและแปลงภาพ 3 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
31
หลักการมองภาพ 3 มิติ
เช่นเดียวกับการมองภาพ 2 มิติ ขีดจากัดของวิวพอร์ ตมีผลต่อ
โคออร์ ดิเนตนอมอลไลซ์ หรื อโคออร์ ดิเนตของอุปกรณ์
ในการพัฒนาอัลกอริทมึ่ ของมุมมอง เราสมมุติวา่ วิวพอร์ ตที่กาหนดใน
โคออร์ ดิเนตของอุปกรณ์ และในโคออร์ ดิเนตนอมอลไลซ์จะถูกโอนไป
เป็ นโคออร์ ดิเนตของวิวพอร์ ตตามขันตอนการขริ
้
บ
ยังมีงานอีกเล็กน้ อยต้ องทา เช่น การกาหนดพื ้นผิวการมองเห็น และ
การการเรนเดอร์ พื ้นผิว
ขันตอนสุ
้
ดท้ ายคือการแม็พโคออร์ ดิเนตของวิวพอร์ ตไปยังโคออร์ ดิเนต
ของอุปกรณ์ภายในวินโดว์แสดงผล
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
32
พารามิเตอร์ ของโคออร์ ดเิ นตการมองภาพ 3 มิติ
การสร้ างเฟรมอ้ างอิงการมองภาพ 3 มิติเหมือนกับการกาหนดเฟรม
อ้ างอิงการมองภาพ 2 มิติ
ขันแรกเราเลื
้
อกตาแหน่งโคออร์ ดิเนตทางกายภาพ P0 = (x0, y0, z0)
สาหรับจุดกาเนิดการมองซึง่ เรี ยกว่า จุดมอง (view point) หรื อ ตาแหน่ง
การมอง (viewing position) (บางครัง้ จุดมองนี ้ยังอ้ างถึงตาแหน่งของตา
หรื อ ตาแหน่งของกล้ อง)
เรากาหนด view up vector (V) ซึง่ กาหนดเป็ นทิศทาง yview สาหรับภาพ
3 มิติ
เรายังต้ องกาหนดทิศทางของแกนที่เหลือหนึง่ แกนจากสองแกน ทาให้ ได้
เวกเตอร์ ที่สองที่กาหนดเป็ นแกน zview ที่มีทิศทางการมองตามแกนนี ้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
33
พารามิเตอร์ ของโคออร์ ดเิ นตการมองภาพ 3 มิติ
ระบบโคออร์ ดิเนตการมองแบบมือขวาที่มีแกน xview,yview, zview สัมพันธ์กบั เฟรม
โคออร์ ดิเนตทางกายภาพที่เป็ นระบบมือขวา
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
34
ระนาบการมอง Normal Vector
เนื่องจากทิศทางการมองปกติจะเป็ นไปตามแกน z
ระนาบการมองซึง่ อาจจะเรี ยกว่าระนาบโปรเจ็กต์ชนั นัน้ ปกติจะสมมุติ
ให้ ตงฉากกั
ั้
บแกนนี ้
ดังนันแนวของระนาบการมองจะเป็
้
นทิศทางบวกสาหรับแกน zview
สามารถกาหนดได้ ด้วยระนาบการมอง normal vector N แสดงดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
35
ระนาบการมอง Normal Vector
แนวของระนาบการมอง และระนาบการมอง normal vector N
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
36
ระนาบการมอง Normal Vector
พารามิเตอร์ เพิ่มเติมที่นามาใช้ ในการกาหนดตาแหน่งของระนาบการ
มองที่โคออร์ ดิเนต zvp ตามแกน zview แสดงดังรูป
ค่าพารามิเตอร์ นี ้โดยปกติกาหนดเป็ นทิศทางจากจุดกาเนิดการมองไป
ตามทิศทางการมองซึง่ ส่วนมากจะมีทิศทาง - zview
ดังนันระนาบการมองมั
้
กจะขนานกับระนาบ xviewyview และโปรเจ็กต์
ชันของออปเจ็กต์ไปยังระนาบการมองที่สมั พันธ์กบั มุมมองของจอภาพ
ที่แสดงออกทางอุปกรณ์แสดงผล
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
37
ระนาบการมอง Normal Vector
ตาแหน่งที่เป็ นไปได้ 3 ตาแหน่งสาหรับระนาบการมองตามแกน zview
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
38
ระนาบการมอง Normal Vector
เวกเตอร์ N สามารถกาหนดได้ หลายวิธี ในกราฟิ กบางระบบ ทิศทาง
ของ N ถูกกาหนดตามเส้ นจากจุดกาเนิดโคออร์ ดิเนตทางกายภาพไป
ยังตาแหน่งจุดที่เลือก
ระบบอื่น ใช้ N อยูใ่ นทิศทางจากจุดอ้ างอิง Pref ไปยังจุดกาเนิดการมอง
P0 ดังรูป ในกรณีนี ้จุดอ้ างอิงจะอ้ างถึงจุด look at point ภายใน
จอภาพโดยมีทิศทางการมองตรงข้ ามกับทิศทางของ N
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
39
ระนาบการมอง Normal Vector
การกาหนดระนาบการมอง normal vector N ที่มีทิศทางจากจุดอ้ างอิง Pref ไปยังจุด
กาเนิดการมอง P0
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
40
ระนาบการมอง Normal Vector
เราสามารถกาหนดระนาบการมอง normal vector และทิศทางของ
เวกเตอร์ อื่นโดยการใช้ มมุ กาหนดทิศทาง (direction angle) โดยมี 3
มุมคือ ,  และ  ที่สร้ างด้ วยแกน x, y และ z ตามลาดับ
แต่ถ้ากาหนดทิศทางของเวกเตอร์ ด้วยตาแหน่งของจุด 2 จุด จะเป็ น
เรื่ องง่ายกว่าการกาหนดด้ วยมุมกาหนดทิศทาง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
41
View-Up Vector
เมื่อเราเลือกระนาบการมอง normal vector N เราสามารถกาหนด
ทิศทางสาหรับ View-Up Vector V ซึง่ เวกเตอร์ นี ้นามาสร้ างทิศ
ทางบวกสาหรับแกน yview
ปกติ V ถูกกาหนดโดยการเลือกตาแหน่งที่สมั พันธ์กบั จุดกาเนิด
โคออร์ ดิเนตทางกายภาพ
ดังนันทิ
้ ศทางสาหรับ View-Up Vector จะเริ่มจากจุดกาเนิดทาง
กายภาพไปยังตาแหน่งที่เลือก
เนื่องจากระนาบการมอง normal vector N กาหนดทิศทางสาหรับ
แกน zview เวกเตอร์ V ควรจะตังฉากกั
้
บN
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
42
View-Up Vector
แต่โดยปกติแล้ วเป็ นการยากที่จะกาหนดทิศทางของ V ให้ ตงฉากกั
ั้
บN
ดังนันรู
้ ทีนในการมองจะปรับแนวเวกเตอร์ V ที่ผ้ ใู ช้ กาหนด ดังรูป
ดังนัน้ V จะถูกโปรเจ็กต์ลงบนระนาบที่ตงฉากกั
ั้
บระนาบการมอง
normal vector N
เราสามารถเลือกทิศทางใด ๆ สาหรับ view-up vector V แต่ต้องไม่
ขนานกับ N ตัวเลือกที่สะดวกและนามาใช้ บอ่ ย ๆ ก็คือทิศทางที่ขนาน
กับแกน yw ที่กาหนด v = (0, 1, 0)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
43
View-Up Vector
การปรับแนว view-up vector V ให้ ตงฉากกั
ั้
บระนาบการมอง normal vector N
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
44
เฟรมอ้ างอิงโคออร์ ดเิ นตการมอง uvn
โคออร์ ดิเนตการมองแบบมือซ้ ายในบางครัง้ ก็นามาใช้ ในกราฟิ กแพ็กเกจโดยทิศ
ทางการมองในทิศทางบวก zview
ในระบบมือซ้ าย การเพิ่มค่า zview จะเป็ นการแปลค่าให้ เป็ นค่าที่อยู่ไกลออกไป
ตาแหน่งการมอง
แต่ในระบบการมองแบบมือขวาซึง่ เป็ นแบบปกติที่ใช้ กนั อยู่ เนื่องจากมีแนว
เดียวกับเฟรมอ้ างอิงทางกายภาพ สิ่งนี ้เองที่ทาให้ กราฟิ กแพ็กเกจใช้ เพียง
โคออร์ ดิเนตเดียวทังการอ้
้
างอิงทางกายภาพและการมอง
ในช่วงแรกแพ็กเกจกาหนดโคออร์ ดิเนตการมองภายในเฟรมแบบมือซ้ าย แต่
กราฟิ กแพ็กเกจปั จจุบนั จะใช้ โคออร์ ดิเนตการมองแบบมือขวาเป็ นมาตรฐาน
อย่างไรก็ตาม การอ้ างอิงโคออร์ ดิเนตแบบมือซ้ ายก็มีนามาใช้ บอ่ ยในการแสดง
โคออร์ ดิเนตของจอภาพ และการแปลงแบบนอมอลไลซ์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
45
เฟรมอ้ างอิงโคออร์ ดเิ นตการมอง uvn
เนื่องจากระนาบการมอง normal vector N จะกาหนดทิศทางสาหรับแกน
zview และ view-up vector V ถูกนามาใช้ เพื่อให้ ได้ ทิศทางสาหรับแกน yview
เราต้ องการกาหนดทิศทางสาหรับแกน xview การใช้ คา่ N และ V เราสามารถ
คานวณเวกเตอร์ U ซึง่ เป็ นเวกเตอร์ ตวั ที่สามที่ตงฉากกั
ั้
บทังเวกเตอร์
้
N และ V
หลังจากนันก
้ าหนดทิศทางเวกเตอร์ U สาหรับแกนบวก xview เรากาหนด
ทิศทางที่ถกู ต้ องสาหรับ U โดยการหาผลคูณของเวกเตอร์ V และ N
เช่นเดียวกับแบบของเฟรมการมองแบบมือขวา ผลคูณของเวกเตอร์ N และ U
สร้ างเวกเตอร์ V ที่ตงฉากทั
ั้
ง้ N และ U ตามแกนบวก yview ตามขันตอนที
้
่
กล่าวนี ้ เรากาหนดชุดของเวกเตอร์ หนึง่ หน่วยสาหรับระบบโคออร์ ดิเนตการ
มองแบบมือขวา
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
46
เฟรมอ้ างอิงโคออร์ ดเิ นตการมอง uvn
8.1
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
47
เฟรมอ้ างอิงโคออร์ ดเิ นตการมอง uvn
ระบบโคออร์ ดิเนตที่มีเวกเตอร์ ขนาดหนึง่ หน่วยนี ้เป็ นเฟรมอ้ างอิง
โคออร์ ดิเนตการมอง uvn (ดังรูป)
ระบบการมองแบบมือขวาที่กาหนดด้ วย
เวกเตอร์ หนึง่ หน่วย u, v และ n
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
48
การสร้ างเอ็ฟเฟ็ กต์ การมองภาพ 3 มิติ
การเปลี่ยนค่าพารามิเตอร์ การมองทาให้ เราเห็นออปเจ็กต์บนจอภาพ
แตกต่างกันออกไป
เช่น จากตาแหน่งการมองที่คงที่ เราสามารถเปลี่ยนทิศทางของ N เพื่อ
แสดงออปเจ็กต์ที่ตาแหน่งรอบ ๆ จุดกาเนิดโคออร์ ดิเนตการมอง
เรายังสามารถเปลี่ยนค่า N เพื่อแสดงเป็ นหลาย ๆ มุมมองจาก
ตาแหน่งกล้ องที่คงที่
ในแอปพลิเคชันที่เป็ นอินเตอร์ แอ็กทีพ เวกเตอร์ N เป็ นพารามิเตอร์ การ
มองที่มกั มีการเปลี่ยนแปลงเสมอ เมื่อเราเปลี่ยนทิศทางของ N เราต้ อง
เปลี่ยนเวกเตอร์ แกนอื่นด้ วยเพื่อให้ เป็ นไปตามระบบโคออร์ ดิเนตการ
มองแบบมือขวาไว้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
49
การสร้ างเอ็ฟเฟ็ กต์ การมองภาพ 3 มิติ
ถ้ าเราต้ องการจาลองการใช้ เอ็ฟเฟ็ กต์สาหรับภาพเคลื่อนไหว เช่นเมื่อ
กล้ องเคลื่อนเข้ าหาจอภาพ หรื อตามออปเจ็กต์ที่เคลื่อนเข้ าหาจอภาพ
เราสามารถคงสภาพทิศทางของ N ให้ คงที่ได้ เช่นเดียวกับที่เราย้ ายจุด
มอง แสดงดังรูป
เพื่อแสดงมุมมองแสดงผลที่แตกต่างของออปเจ็กต์ เช่น มุมมอง
ด้ านข้ าง และด้ านหน้ า เราสามารถย้ ายจุดมองไปรอบ ๆ ออปเจ็กต์ ดัง
รูปถัดไป
อีกทางเลือกหนึง่ ก็คือมุมมองที่แตกต่างของออปเจ็กต์หรื อกลุม่ ของ
ออปเจ็กต์สามารถสร้ างได้ ด้วยการแปลงทางเรขาคณิตโดยไม่มีการ
เปลี่ยนพารามิเตอร์ การมองอื่น ๆ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
50
การสร้ างเอ็ฟเฟ็ กต์ การมองภาพ 3 มิติ
การกวาดจอภาพโดยการเปลี่ยนตาแหน่งการมองโดยกาหนดให้ ทิศทาง N คงที่
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
51
การสร้ างเอ็ฟเฟ็ กต์ การมองภาพ 3 มิติ
มุมมองออปเจ็กต์จากทิศทางที่ตา่ งกันโดยกาหนดจุดมองให้ คงที่
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
52
การสร้ างเอ็ฟเฟ็ กต์ การมองภาพ 3 มิติ
พัฒนาการของซอฟต์แวร์ ที่ช่วย
ในการกาหนดค่าพารามิเตอร์
การมอง ที่พฒ
ั นาโดย
มหาวิทยาลัยแมนเชสเตอร์ โดย
การใช้ PHIGS Toolkit
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
53
การแปลงโคออร์ ดเิ นตทางกายภาพเป็ นโคออร์ ดเิ นตการมอง
ในหลักการมองภาพ 3 มิติ ขันแรกหลั
้
งจากการสร้ างจอภาพขึ ้นมาแล้ ว
ก็คือแปลงออปเจ็กต์ไปยังเฟรมอ้ างอิงโคออร์ ดิเนตการมอง
การแปลงออปเจ็กต์นี ้คล้ ายกับขันตอนการแปลงที
้
่ซ้อนทับเฟรมอ้ างอิง
การมองไปบนเฟรมทางกายภาพ
เราสามารถแปลงโดยใช้ วิธีการแปลงระหว่างระบบโคออร์ ดิเนต
1. เลื่อนจุดกาเนิดโคออร์ ดิเนตการมองไปยังจุดกาเนิดทางกายภาพ
2. หมุนแกนเพื่อวางแกน xview, yview และ zview ด้ วยแกน xw, yw และ zw
ตามลาดับ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
54
การแปลงโคออร์ ดเิ นตทางกายภาพเป็ นโคออร์ ดเิ นตการมอง
จุดกาเนิดโคออร์ ดิเนตการมองอยูท่ ี่ P = (x0, y0, z0) ดังนันเมทริ
้
กซ์
สาหรับการเลื่อนจุดกาเนิดการมองไปยังจุดกาเนิดทางกายภาพคือ
8.2
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
55
การแปลงโคออร์ ดเิ นตทางกายภาพเป็ นโคออร์ ดเิ นตการมอง
สาหรับการหมุน เราสามารถใช้ เวกเตอร์ หนึง่ หน่วย u, v และ n เพื่อให้
เมทริกซ์การแปลงรวมที่ซ้อนทับแกนการมองลงบนเฟรมทางกายภาพ
เมทริกซ์การแปลงคือ
8.3
โดยสมาชิกในเมทริกซ์ R เป็ นสมาชิกของเวกเตอร์ uvn
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
56
การแปลงโคออร์ ดเิ นตทางกายภาพเป็ นโคออร์ ดเิ นตการมอง
เมทริกซ์การแปลงโคออร์ ดิเนตถูกกาหนดเป็ นผลคูณของการเลื่อนก่อน
หน้ านันกั
้ บเมทริกซ์การหมุน
8.4
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
57
การแปลงโคออร์ ดเิ นตทางกายภาพเป็ นโคออร์ ดเิ นตการมอง
ทรานสเลชันแฟคเตอร์ ในเมทริกซ์นี ้คานวณเป็ นผลคูณเวกเตอร์ ของแต่ละตัวของ
เวกเตอร์ หนึง่ หน่วย u, v และ n กับ P0 ซึง่ แสดงเวกเตอร์ จากจุดกาเนิดทาง
กายภาพไปยังจุดกาเนิดการมอง อาจกล่าวได้ วา่ ทรานสเลชันแฟคเตอร์ เป็ นโปร
เจ็กต์ชนั ตรงข้ ามกับ P0 บนแต่ละแกนโคออร์ ดิเนตการมอง (ตรงข้ ามกับค่า P0 ใน
โคออร์ ดิเนตการมอง) ค่าสมาชิกของเมทริกซ์คานวณได้ จาก
8.5
เมทริกซ์ 8-4 จะโอนค่าโคออร์ ดิเนตทางกายภาพของออปเจ็กต์ไปยังเฟรมอ้ างอิงการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
58
โปรเจ็กต์ ชัน (Projection)
ในการมองภาพ 3 มิติ หลังจากการแปลงโคออร์ ดิเนตการมอง
ออปเจ็กต์จะถูกโปรเจ็กต์ลงบนระนาบการมอง
โปรเจ็กต์ชนั จึงเป็ นสิง่ สาคัญในการแสดงภาพ 3 มิติให้ เราเห็น
ปกติแล้ วในกราฟิ กแพ็กเกจจะสนับสนุนโปรเจ็กต์ชนั ทัง้ 2 แบบคือ
แบบขนาน (parallel)
แบบเพอร์ สเปกทีพ (perspective)
ประเภทโปรเจ็กต์ชนั จะเป็ นดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
59
โปรเจ็กต์ ชัน (Projection)
ประเภทโปรเจ็กต์ชนั
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
60
โปรเจ็กต์ ชันแบบขนาน (Parallel Projection)
ในโปรเจ็กต์ชนั แบบขนานนัน้ ตาแหน่งโคออร์ ดิเนตจะถูกโอนไปยัง
ระนาบการมองตามเส้ นขนาน
รูป ก) แสดงถึงโปรเจ็กต์ชนั แบบขนานของเส้ นตรงที่กาหนดด้ วย
โคออร์ ดิเนตของจุดปลาย P1 และ P2
รูป ข) เป็ นโปรเจ็กต์ชนั แบบขนานของรูปลูกบาศก์ลงบนระนาบ
การมอง โปรเจ็กต์ชนั แบบนี ้จะรักษาอัตราส่วนของออปเจ็กต์ให้ คงเดิม
ไว้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
61
โปรเจ็กต์ ชันแบบขนาน (Parallel Projection)
โปรเจ็กต์ชนั แบบขนาน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
62
โปรเจ็กต์ ชันแบบขนาน (Parallel Projection)
สาหรับโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพนัน้ ตาแหน่งออปเจ็กต์จะถูก
โอนไปยังโคออร์ ดิเนตของโปรเจ็กต์ชนั ตามเส้ นที่ลเู่ ข้ าสู่จดุ ด้ านหลัง
ระนาบการมอง
ตัวอย่างของโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพสาหรับเส้ นตรงที่กาหนด
ด้ วยโคออร์ ดิเนตของจุดปลาย P1 และ P2 แสดงดังรูป ก)
รูป ข) เป็ นโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพของรูปลูกบาศก์ลงบน
ระนาบการมอง
ข้ อที่แตกต่างจากแบบขนานก็คือ โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพนี ้จะ
ไม่รักษาอัตราส่วนของออปเจ็กต์ แต่ภาพจะมีความเหมือนจริง
มากกว่า เนื่องจากระยะออปเจ็กต์ที่แสดงออกมานันมี
้ ขนาดเล็กลง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
63
โปรเจ็กต์ ชันแบบขนาน (Parallel Projection)
โปรเจ็กต์ชนั แบบเพอร์ สเป็ กทีพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
64
โปรเจ็กต์ ชันเชิงตัง้ ฉาก (Orthogonal Projection)
การแปลงออปเจ็กต์ให้ อยูบ่ นระนาบการมองตามเส้ นที่ทกุ เส้ นขนาน
กับระนาบการมอง normal vector N เรี ยกว่า โปรเจ็กต์ชนั เชิงตังฉาก
้
(Orthogonal Projection หรื อ Orthographic Projection)
ขันตอนการแปลงโปรเจ็
้
กต์ชนั แบบขนานนี ้จะตังฉากกั
้
บระนาบการ
มอง ดังรูป
โปรเจ็กต์ชนั แบบนี ้นามาใช้ บอ่ ยในการสร้ างมุมมองด้ านหน้ า, ด้ านข้ าง
และด้ านบนของออปเจ็กต์ แสดงดังรูปถัดไป
โปรเจ็กต์ชนั เชิงตังฉากด้
้
านหน้ า, ด้ านข้ าง และด้ านบนของออปเจ็กต์
เรี ยกว่า มุมเงย (elevation) และโปรเจ็กต์ชนั เชิงตังฉากด้
้
านบน
เรี ยกว่า ระนาบ (plan)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
65
โปรเจ็กต์ ชันเชิงตัง้ ฉาก (Orthogonal Projection)
โปรเจ็กต์ชนั เชิงตังฉากของออปเจ็
้
กต์ที่กระทาตังฉากกั
้
บระนาบการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
66
โปรเจ็กต์ ชันเชิงตัง้ ฉาก (Orthogonal Projection)
โปรเจ็กต์ชนั เชิงตังฉากของออปเจ็
้
กต์ที่แสดงระนาบและมุมเงย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
67
โปรเจ็กต์ ชันเชิงตัง้ ฉาก (Orthogonal Projection)
รูปต่อไปเป็ นการแยกส่วนแสดงผลของออปเจ็กต์ที่ได้ จากโปรเจ็กต์ชนั
เชิงตังฉากตามระนาบการมองต่
้
าง ๆ ซึง่ นามาใช้ ในการวาดภาพทาง
วิศวกรรมและสถาปั ตยกรรม เนื่องจากความยาว และมุมจะแม่นยาซึง่
สามารถวัดได้ จากภาพวาด
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
68
โปรเจ็กต์ ชันเชิงตัง้ ฉาก (Orthogonal Projection)
ออปเจ็กต์ที่แยกการแสดงผลจากโปรเจ็กต์ชนั
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
69
โปรเจ็กต์ ชันเชิงตัง้ ฉากแบบ Axonometric และ Isonometric
เรายังสามารถแสดงโปรเจ็กต์แบบเชิงตังฉากให้
้
มากกว่าหนึง่ หน้ าของ
ออปเจ็กต์ได้ ซึง่ เรี ยกว่า โปรเจ็กต์ ชันเชิงตัง้ ฉากแบบ Axonometric
โปรเจ็กต์ชนั แบบนี ้โดยทัว่ ไปเรี ยกว่า โปรเจ็กต์ ชันแบบ isonometric
ซึง่ สร้ างโดยการวางระนาบโปรเจ็กต์ชนั (หรื อออปเจ็กต์) ดังนันระนาบ
้
จะตัดแต่ละแกนที่ออปเจ็กต์กาหนด เรี ยกแกนนี ้ว่า แกนหลัก (principal
axes) ที่ระยะเดียวกันจากจุดกาเนิด
รูปต่อไปแสดงโปรเจ็กต์ชนั แบบขนานแบบ axonometric ของออปเจ็กต์
รูปถัดไปแสดงโปรเจ็กต์ชนั 3 รูปแบบของ Axonometric คือ Dimetric,
Trimetric และ Isometric
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
70
โปรเจ็กต์ ชันเชิงตัง้ ฉากแบบ Axonometric และ Isonometric
โปรเจ็กต์ชนั เชิงตังฉากแบบ
้
Axonometric
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
71
โปรเจ็กต์ ชันเชิงตัง้ ฉากแบบ Axonometric และ Isonometric
ประเภทโปรเจ็กต์ชนั เชิงตังฉากแบบ
้
Axonometric
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
72
โปรเจ็กต์ ชันเชิงตัง้ ฉากแบบ Axonometric และ Isonometric
เราสามารถรักษาโปรเจ็กต์ชนั เชิงตังฉากแบบ
้
isonometric ให้ คงเดิมได้
โดยการวางระนาบการมอง normal vector N ตามเส้ นทะแยงของ
ลูกบาศก์
มุมมอง isonometric นี ้จะมี 8 ตาแหน่ง แกนหลักทัง้ 3 แกนนี ้จะเท่ากัน
ในโปรเจ็กต์ชนั แบบ isonometric
ดังนันออปเจ็
้
กต์ยงั คงรักษาอัตราส่วนของขนาดไว้ ในกรณีนี ้ไม่รวมโปร
เจ็กต์ชนั ทัว่ ๆ ไปที่มีการปรับขนาดซึง่ อาจทาให้ ขนาดทัง้ 3 แกนหลัก
แตกต่างออกไปได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
73
โคออร์ ดเิ นตโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เมื่อทิศทางโปรเจ็กต์ชนั ขนานกับแกน zview สมการการแปลงสาหรับโปร
เจ็กต์ชนั เชิงตังฉาก
้
สาหรับตาแหน่ง (x, y, z) ในโคออร์ ดิเนตการมอง
ดังรูปต่อไป โคออร์ ดิเนตโปรเจ็กต์ชนั จะเป็ น
8.6
ค่าโคออร์ ดเิ นต z สาหรับการแปลงโปรเจ็กต์ชนั จะเก็บค่าไว้ ใช้ ในการ
กาหนดค่าเพื่อให้ มองเห็นออปเจ็กต์ แต่ละจุดของโคออร์ ดิเนต 3 มิติจะ
ถูกแปลงไปเป็ นตาแหน่งพื ้นที่ปกติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
74
โคออร์ ดเิ นตโปรเจ็กต์ ชันเชิงตัง้ ฉาก
โปรเจ็กต์ชนั เชิงตังฉากของต
้
าแหน่งเชิงพื ้นที่ลงบนระนาบการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
75
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เมื่อเปรี ยบเทียบกับการทางานของกล้ องถ่ายรูป ประเภทของเลนส์เป็ นอีกปั จจัย
หนึง่ ที่กาหนดว่าจะแปลงภาพถ่ายลงฟิ ล์มได้ มากน้ อยแค่ไหน
เลนส์แบบมุมกว้ าง (wide-angle) จะเก็บภาพได้ มากกว่าเลนส์ธรรมดา
สาหรับแอปพลิเคชันของคอมพิวเตอร์ กราฟิ ก ในกรณีนี ้เราจะใช้ วินโดว์ขริบภาพ
แบบสี่เหลี่ยม ในการมองภาพกราฟิ ก 2 มิติ กราฟิ กแพ็กเกจยอมเฉพาะสี่เหลี่ยม
ขริบภาพในตาแหน่งมาตรฐานเท่านัน้
เมื่อเรากาหนดวินโดว์ขริบภาพสาหรับการมองภาพ 3 มิติก็คล้ ายกับสิ่งที่เราทากับ
ภาพ 2 มิติ โดยการเลือกตาแหน่งโคออร์ ดิเนต 2 มิติสาหรับมุมล่างซ้ าย และมุม
บนซ้ าย
สาหรับการมองภาพ 3 มิติแล้ ว วินโดว์ขริบภาพจะถูกวางบนระนาบการมองโดยมี
ขอบขนานกับแกน xview และ yview ดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
76
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
วินโดว์ขริ บภาพบนระนาบการมองที่มีจดุ โดคออร์ ดิเนตต่าสุดและสูงสุดในระบบอ้ างอิงการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
77
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ขอบของวินโดว์ขริบภาพจะกาหนดขีดจากัดค่า x และ y ของจอภาพที่
ต้ องการให้ แสดงผล
ค่าจากัดนี ้ถูกนามาใช้ กาหนดด้ านบน, ด้ านล่าง และด้ านข้ างทังสอง
้
ข้ างของพื ้นที่ขริบภาพที่เรี ยกว่า ปริมาตรการมองของโปรเจ็กต์ ชัน
เชิงตัง้ ฉาก (orthogonal-projection view volume)
เนื่องจากเส้ นโปรเจ็กต์ชนั จะตังฉากกั
้
บระนาบการมอง ขอบทัง้ สี่นี ้จึงตัง้
ฉากกับระนาบการมองและผ่านออกไปยังขอบของวินโดว์ขริบภาพด้ วย
เพื่อสร้ างพื ้นที่ขริบภาพที่เป็ นอนันต์ ดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
78
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ปริมาตรการมองของโปรเจ็กต์ชนั แบบเชิงตังฉากที
้
่เป็ นอนันต์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
79
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เราสามารถจากัดส่วนขยายของปริมาตรการมองของโปรเจ็กต์ชนั เชิงตัง้
ฉากในทิศทาง zview ได้ โดยการเลือกตาแหน่งสาหรับหนึง่ หรื อสอง
ระนาบเพิ่มเติมที่ขนานกับระนาบการมอง
ระนาบทังสองนี
้
้เรี ยกว่า ระนาบการขริบใกล้ -ไกล (near-far clipping
plane) หรื อ ระนาบการขริบหน้ า-หลัง (front-back clipping plane)
ระนาบใกล้ และไกลยอมให้ เราไม่ต้องรวมออปเจ็กต์ที่อยูห่ น้ า-หลังส่วน
ของจอภาพที่แสดงผล
เมื่อทิศทางการมองเป็ นไปตรงกันข้ ามกับแกน zview ซึง่ มักจะมี
zfar < znear ดังนันระนาบไกลจะอยู
้
ไ่ กลออกไปในทิศแกน - zview
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
80
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ในบางกราฟิ กไลบรารี ระนาบทังสองนี
้
้เป็ นออปชันให้ เลือกเท่านัน้ แต่
บางไลบรารี ก็ต้องการใช้ เมื่อมีการกาหนดระนาบใกล้ และไกล เรา
จากัดปริมาตรการมองเชิงตังฉากเป็
้
นรูปทรงสี่เหลี่ยมด้ านขนาน
(rectangle parallelepiped) ดังรูป ที่มีระนาบการมองหนึง่ ระนาบ
หลังจากนันเราจะเห็
้
นออปเจ็กต์อยูใ่ นปริมาตรการมองแสดงบน
จอภาพที่กาจัดโดยอัลกอริทมึ่ การขริบภาพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
81
วินโดว์ ขริบภาพ และปริมาตรการมองของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ปริมาตรการมองเชิงตังฉากที
้
่จากัดด้ วยระนาบการมองเป็ นรูปทรงสี่เหลี่ยมด้ านขนาน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
82
การแปลงนอมอลไลซ์ ของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
การแปลงค่าเชิงตังฉากของต
้
าแหน่งโคออร์ ดิเนตลงบนระนาบการมอง
เราได้ ตาแหน่งโปรเจ็กต์ชนั ตาแหน่งของจุด (x, y, z) เป็ น (x, y)
ธรรมดา
ดังนันเมื
้ ่อเราจากัดปริมาตรการมอง โคออร์ ดิเนตภายในรูปทรง
สี่เหลี่ยมด้ านขนานนี ้เป็ นโคออร์ ดิเนตโปรเจ็กต์ชนั และจะถูกแม็พลงใน
ปริมาตรการมองแบบนอมอลไลซ์ (normalized view volume) โดยไม่
มีขนตอนโปรเจ็
ั้
กต์ชนั
ในบางกราฟิ กแพ็กเกจจะใช้ รูปลูกบาศก์หนึง่ หน่วยสาหรับปริ มาตรการ
มองแบบนอมอลไลซ์นี ้ ในแต่ละโคออร์ ดิเนตของ x, y และ z ที่อยูใ่ นนอ
มอลไลซ์นี ้จะอยูใ่ นช่วง 0 ถึง 1 หรื อในช่วง -1 ถึง 1 ก็มี
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
83
การแปลงนอมอลไลซ์ ของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เนื่องจากโคออร์ ดิเนตของจอภาพส่วนมากจะกาหนดเฟรมอ้ างอิงแบบ
มือซ้ าย (รูปต่อไป)
โคออร์ ดิเนตแบบนอมอลไลซ์ก็กาหนดด้ วยระบบมือซ้ าย
สิง่ นี ้เองที่ทาให้ ระยะเป็ นบวกในทิศทางการมองจะถูกแปลโดยตรงเป็ น
ระยะจากจอภาพ (ระนาบการมอง)
ดังนันเราสามารถแปลงโคออร์
้
ดิเนตโปรเจ็กต์ชนั ให้ อยูใ่ นตาแหน่ง
ภายในเฟรมอ้ างอิงโคออร์ ดิเนตแบบนอมอลไลซ์แบบมือซ้ ายได้
หลังจากนันต
้ าแหน่งโคออร์ ดิเนตจะถูกแปลงไปยังโคออร์ ดิเนตจอภาพ
ในระบบมือซ้ ายด้ วยการแปลงวิวพอร์ ต
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
84
การแปลงนอมอลไลซ์ ของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เฟรมอ้ างอิงโคออร์ ดิเนตจอภาพแบบมือซ้ าย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
85
การแปลงนอมอลไลซ์ ของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ในการแปลงนอมอลไลซ์ เราสมมุติวา่ ปริมาตรการมองของโปรเจ็กต์ชนั
เชิงตังฉากจะถู
้
กแม็พลงในนอมอลไลซ์รูปลูกบาศก์จตั รุ ัสในเฟรมอ้ างอิง
แบบมือซ้ าย
เช่นเดียวกับตาแหน่งโคออร์ ดิเนต z สาหรับระนาบใกล้ และไกลที่
กาหนดเป็ น znear และ zfar ตามลาดับ รูปต่อไปแสดงถึงการแปลง
นอมอลไลซ์ ตาแหน่ง (xmin, ymin, znear) จะถูกแม็พไปยังนอมอลไลซ์
ตาแหน่ง (-1, -1, -1) และตาแหน่ง (xmax, ymax, zfar) ถูกแม็พเป็ น
(1, 1, 1)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
86
การแปลงนอมอลไลซ์ ของโปรเจ็กต์ ชันเชิงตัง้ ฉาก
การแปลงนอมอลไลซ์จากปริมาตรการมองของโปรเจ็กต์ชนั แบบเชิงตังฉากไปยั
้
ง
นอมอลไลซ์รูปลูกบาศก์จตั รุ ัสในเฟรมอ้ างอิงแบบมือซ้ าย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
87
โปรเจ็กต์ ชันแบบขนานเฉียง (Oblique Parallel Projection)
โดยปกติแล้ ว การมองภาพจากโปรเจ็กต์ชนั แบบขนานของจอภาพที่เกิด
จากการแปลงออปเจ็กต์ไปยังระนาบการมองตามเส้ นทางโปรเจ็กต์ชนั ที่
อาจจะเป็ นทิศทางที่สมั พันธ์กบั ระนาบการมอง normal vector N
เมื่อเส้ นทางโปรเจ็กต์ชนั ไม่ได้ ตงฉากกั
ั้
บระนาบการมอง การแม็พนี ้
เรี ยกว่า โปรเจ็กต์ ชันแบบขนานเฉียง (Oblique Parallel Projection)
การใช้ โปรเจ็กต์ชนั แบบนี ้ เราสามารถสร้ างมุมมองรวม เช่น ด้ านหน้ า,
ด้ านข้ าง และด้ านบนของออปเจ็กต์ได้ ดังรูปโปรเจ็กต์ชนั แบบขนาน
เฉียงสามารถกาหนดทิศทางของเวกเตอร์ โปรเจ็กต์ชนั ในทิศทางต่าง ๆ
ได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
88
โปรเจ็กต์ ชันแบบขนานเฉียง (Oblique Parallel Projection)
โปรเจ็กต์ชนั แบบขนานเฉียงที่กาหนดทิศทางของเวกเตอร์ โปรเจ็กต์ชนั ในทิศทางต่าง ๆ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
89
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
ในแอปพลิเคชันทางวิศวกรรมและการออกแบบทางสถาปั ตยกรรม
โปรเจ็กต์ชนั แบบขนานเฉียงถูกกาหนดด้ วยมุม 2 มุม ( และ )
แสดงดังรูป
ตาแหน่ง (x, y, z) ในรูป ถูกโปรเจ็กต์ไปยัง (xp, yp, zvp) บนระนาบการ
มองซึง่ อยูต่ าแหน่ง zvp ตามการมองแกน z ตาแหน่ง (x, y, zvp) ใน
ตาแหน่งโปรเจ็กต์ชนั เชิงตังฉากที
้
่สมั พันธ์กนั
เส้ นโปรเจ็กต์ชนั แบบขนานเฉียงจาก (x, y, z) ไปยัง (xp, yp, zvp) มีมมุ
ตัด  กับเส้ นบนระนาบโปรเจ็กต์ชนั ที่จดุ (xp, yp, zvp) และ (x, y, zvp)
เส้ นระนาบการมองที่มีความยาว L นี ้อยูท่ ี่มมุ  กับทิศทางแนวนอนใน
ระนาบโปรเจ็กต์ชนั
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
90
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
โปรเจ็กต์ชนั แบบขนานเฉียงของโคออร์ ดิเนตตาแหน่ง (x, y, z) ไปเป็ น (xp, yp, zvp) บน
ระนาบโปรเจ็กต์ชนั ที่ตาแหน่ง zvp ตามแกน zview
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
91
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
มุม  สามารถกาหนดค่าอยูร่ ะหว่าง 0 และ 90
มุม  เป็ นมุมอยูใ่ นช่วง 0 ถึง 360
เราสามารถกาหนดโคออร์ ดิเนตโปรเจ็กต์ชนั ในเทอมของ x, y, L และ 
เป็ น
8.7
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
92
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
ความยาว L ขึ ้นอยูก่ บั มุม  และระยะตังฉากของจุ
้
ด (x, y, z) จาก
ระนาบการมอง
8.8
ดังนัน้
แก้ ด้วยครับ
8.9
เมื่อ L1 = cot  ซึง่ ก็คือค่า L เมื่อ (zvp – z ) = 1
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
93
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
หลังจากนันเราสามารถเขี
้
ยนสมการโปรเจ็กต์ชนั แบบขนานเฉียง 8-7
ได้ เป็ น
8.10
เราจะได้ โปรเจ็กต์ชนั เชิงตังฉากเมื
้
่อ L1 = 0 (เกิดขันเมื
้ ่อมุมโปรเจ็กต์ชนั  = 90)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
94
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
สมการ 8-10 แสดงถึงการแปลงแบบเฉือนแกน z ในความเป็ นจริ ง ผลของโปร
เจ็กต์ชนั แบบขนานเฉียงก็คือการเฉือนระนาบของ z และโปรเจ็กต์ลงบน
ระนาบการมอง
ตาแหน่ง (x, y) ในแต่ละระนาบของ z ถูกย้ ายไปตามอัตราส่วนกับระยะจาก
ระนาบการมอง ดังนันทั
้ งมุ
้ ม, ระยะทาง และเส้ นขนานในระนาบจะโปรเจ็กต์
อย่างเที่ยงตรงแม่นยา ผลนี ้แสดงดังรูปต่อไป
เมื่อระนาบการมองอยูต่ าแหน่งด้ านหน้ าของรูปลูกบาศก์ ระนาบด้ านหลังถูก
เฉือนและซ้ อนทับด้ วยระนาบด้ านหน้ าในโปรเจ็กต์ชนั ไปยังพื ้นผิวการมอง
ขอบด้ านข้ างของลูกบาศก์ที่ติดกับระนาบด้ านหน้ าและด้ านหลังถูกโปรเจ็กต์
ลงบนเส้ นของความยาว L1 ที่ทามุม  กับเส้ นแนวนอนในระนาบโปรเจ็กต์ชนั
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
95
โปรเจ็กต์ ชันแบบขนานเฉียงในการออกแบบ
โปรเจ็กต์ชนั แบบขนานเฉียง
ก) รูปทรงลูกบาศก์ด้านบนที่ถกู โปรเจ็กต์ลงบนระนาบการมองที่ทบั กันสนิท
กับด้ านหน้ าของลูกบาศก์
ข) มุมมองด้ านหน้ า, ด้ สนข้ าง และด้ านบนของลูกบาศก์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
96
โปรเจ็กต์ ชันขนานเฉียงแบบคาวาเลียร์ และคาบิเนต
ตัวเลือกทัว่ ไปสาหรับมุม  คือ 30 และ 45 ซึง่ แสดงมุมมองรวมของ
ด้ านหน้ า, ด้ านข้ าง และด้ านบน (หรื อด้ านหน้ า, ด้ านข้ าง และด้ านล่าง)
ของออปเจ็กต์
ค่า  ที่ใช้ ทวั่ ไปคือค่าที่ทาให้ tan  = 1 ( = 45) และ tan  = 2
(  63.4)
ในกรณีแรก เมื่อ  = 45 เราเรี ยกว่าเป็ นโปรเจ็กต์ ชันแบบคาวา
เลียร์ (Cavalier) ทุกเส้ นที่ตงฉากกั
ั้
บระนาบโปรเจ็กต์ชนั จะถูกโปรเจ็กต์
ลงมาโดยไม่มีการเปลี่ยนความยาว
ตัวอย่างของโปรเจ็กต์ชนั แบบคาวาเลียร์ ของรูปลูกบาศก์เป็ นดังรูป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
97
โปรเจ็กต์ ชันขนานเฉียงแบบคาวาเลียร์ และคาบิเนต
โปรเจ็กต์ชนั แบบคาวาเลียร์ ของลูกบาศก์ลงบนระนาบการมองที่ใช้ คา่  2 ค่า โดยมีคา่
ความลึกของลูกบาศก์ที่โปรเจ็กต์นนเท่
ั ้ ากับความกว้ างและความสูงของลูกบาศก์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
98
โปรเจ็กต์ ชันขนานเฉียงแบบคาวาเลียร์ และคาบิเนต
เมื่อมีการใช้ มมุ  ที่ทาให้ เกิด tan  = 2 ผลที่กิดขึ ้นเรี ยกว่า
โปรเจ็กต์ ชันแบบคาบิเนต (Cabinet)
ที่มมุ นี ้ (  63.4) เส้ นที่ตงฉากกั
ั้
บพื ้นผิวการมองจะถูกโปรเจ็กต์ลงมา
ด้ วยความยาวเพียงครึ่งเดียว
โปรเจ็กต์ชนั แบบคาบิเนตนี ้จะให้ ความสมจริงมากกว่าโปรเจ็กต์ชนั แบบ
คาวาเลียร์ เนื่องจากการลดความยาวของส่วนที่ตงฉาก
ั้
รูปต่อไปเป็ น
ตัวอย่างโปรเจ็กต์ชนั แบบคาบิเนตของรูปลูกบาศก์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
99
โปรเจ็กต์ ชันขนานเฉียงแบบคาวาเลียร์ และคาบิเนต
โปรเจ็กต์ชนั แบบคาบิเนตของลูกบาศก์ลงบนระนาบการมองที่ใช้ คา่  2 ค่า โดยมีคา่
ความลึกของลูกบาศก์ที่โปรเจ็กต์นนเท่
ั ้ ากับครึ่งหนึง่ ของความกว้ างและความสูงของ
ลูกบาศก์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
100
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
ถึงแม้ วา่ ภาพจากมุมมองที่ได้ จากโปรเจ็กต์ชนั แบบขนานจะสร้ างได้ ง่าย
และคงสภาพความสัมพันธ์ทางอัตราส่วนของออปเจ็กต์ไว้ แต่การ
แสดงภาพยังไม่สมจริง
ในการจาลองภาพจากกล้ อง เราต้ องพิจารณาลาแสงที่สะท้ อนจาก
ออปเจ็กต์ในจอภาพตามระยะทางที่แปลงจากระนาบกล้ อง
เราสามารถประมาณผลของแสงทางเรขาคณิตโดยโปรเจ็กต์ชนั ออป
เจ็กต์ไปตามระนาบการมองตามระยะทางไปยังตาแหน่งที่เรี ยกว่า
จุดอ้ างอิงโปรเจ็กต์ ชัน (projection reference point) หรื อ
จุดศูนย์ กลางโปรเจ็กต์ ชัน (COP : Center of Projection)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
101
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
ลักษณะการมองภาพจะเป็ นดังรูป คุณสมบัติของการแสดงผลออป
เจ็กต์จากโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพจะเป็ นลักษณะที่ออปเจ็กต์ที่
อยูไ่ กลออกไปจากระนาบการมองจะมีขนาดเล็กกว่าออปเจ็กต์ที่มี
ขนาดเท่ากันแต่อยูใ่ กล้ กว่า (ดังรูปถัดไป)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
102
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
การมองภาพจากโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
103
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
การมองภาพจากโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพของเส้ นตรงขนาดเท่ากัน 2 เส้ น แต่
อยูร่ ะยะไกลจากระนาบการมองที่ตา่ งกัน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
104
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
ในบางครัง้ ในกราฟิ กแพ็กเกจเราสามารถเลือกจุดศุนย์กลางโปรเจ็กต์
ชันเป็ นอีกพารามิเตอร์ หนึง่ สาหรับการมองได้
แต่ในบางระบบจะวางจุดนี ้ไว้ ในตาแหน่งที่คงที่ เช่นจุดมองดังรูปต่อไป
ที่แสดงเส้ นทางโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพของจุด P ที่โคออร์ ดิเนต
(x, y, z) ไปที่จดุ ศุนย์กลางโปรเจ็กต์ชนั (xprp, yprp, zprp)
เส้ นทางโปรเจ็กต์ชนั จะตัดระนาบการมองที่โคออร์ ดิเนตตาแหน่ง
(xp, yp, zvp) เมื่อ zvp เป็ นตาแหน่งที่เลือกสาหรับระนาบการมองบน
แกน zview
เราสามารถเขียนสมการอธิบายตาแหน่งโคออร์ ดิเนตตามเส้ นทาง
โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพนี ้ได้ เป็ น
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
105
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
8.11
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
106
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพของจุด P ที่โคออร์ ดิเนต (x, y, z) ไปที่จดุ ศุนย์กลาง
โปรเจ็กต์ชนั ที่มีจดุ ตัดบนระนาบการมองที่ (xp, yp, zvp)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
107
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
ตาแหน่ง (x’, y’, z’) แสดงจุดตามเส้ นทางโปรเจ็กต์ชนั เมื่อ u = 0 เรา
จะอยูท่ ี่จดุ P = (x, y. z) อีกด้ านหนึง่ ของเส้ น เมื่อ u = 1 และเรามีจดุ
ศูนย์กลางโปรเจ็กต์ชนั อยูท่ ี่โคออร์ ดิเนต (xprp, yprp, zprp) บนระนาบ
z’ = zvp และเราสามารถแก้ สมการ z’ สาหรับพารามิเตอร์ u ที่
ตาแหน่งตามเส้ นทางโปรเจ็กต์ชนั ได้ เป็ น
8.12
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
108
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
แทนค่า u ลงในสมการสาหรับ x’, y’ เราจะได้ สมการการแปลงโปร
เจ็กต์ชนั แบบเพอร์ สเปกทีพทัว่ ไปเป็ น
8.13
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
109
โปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ (Perspective Projection)
การคานวณสาหรับการแม็พค่าแบบเพอร์ สเปกทีพมีความยุง่ ยากกว่า
สมการโปรเจ็กต์ชนั แบบขนาน เนื่องจากตัวส่วนในการคานวณของ
เพอร์ สเปกทีพในสมการ 8-12 เป็ นฟั งก์ชนั ของตาแหน่งโคออร์ ดิเนต z
ดังนันขณะนี
้
้เราต้ องกาหนดขันตอนการแปลงโปรเจ็
้
กต์ชนั แบบเพอร์
สเปกทีพนี ้ให้ แตกต่างออกไปเล็กน้ อยเพื่อให้ การแม็พนี ้สามารถรวมกับ
การแปลงการมองแบบอื่นได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
110
จุดสุดสายตาสาหรั บโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
เมื่อจอภาพถูกโปรเจ็กต์ลงบนระนาบการมองโดยใช้ การแม็พแบบ
เพอร์ สเปกทีพ เส้ นที่ขนานกับระนาบการมองจะถูกโปรเจ็กต์เป็ นเส้ น
ขนาน
แต่เส้ นขนานบนจอภาพที่ไม่ขนานกับระนาบการมองจะถูกโปรเจ็กต์ลง
ในเส้ นที่ลดู่ งั รูปที่ผา่ นมา
จุดที่ชดุ ของเส้ นขนานที่โปรเจ็กต์จะปรากฏเป็ นเส้ นลูน่ ี ้เรี ยกว่า จุดสุด
สายตา (vanishing point) แต่ละชุดของเส้ นขนานที่โปรเจ็กต์นี ้จะมีจดุ
สุดสายตาแยกจากกัน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
111
จุดสุดสายตาสาหรั บโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
สาหรับแต่ละชุดของเส้ นที่ขนานกับแกนหลักหนึง่ ของออปเจ็กต์ จุดสุด
สายตาอ้ างอิงถึงจุดสุดสายตาหลัก (principal vanishing point)
เราสามารถควบคุมจานวนจุดสุดสายตาหลัก (1, 2 หรื อ 3) โดยการวาง
ระนาบโปรเจ็กต์
โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพนี ้สามารถแบ่งได้ เป็ น 3 ประเภทคือ
โปรเจ็กต์ชนั แบบจุดเดียว, สองจุด และสามจุด ดังรูปต่อไป
จานวนของจุดสุดสายตาหลักในโปรเจ็กต์ชนั จะเท่ากับจานวนของแกน
หลักที่ตดั กับระนาบการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
112
จุดสุดสายตาสาหรั บโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
ประเภทของโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
ก) แบบจุดเดียว ข) แบบสองจุด ค) แบบสามจุด
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
113
จุดสุดสายตาสาหรั บโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
รูปถัดไป แสดงโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพแบบหนึง่ จุด และสองจุดของ
ลูกบาศก์
ในรูป ข) ระนาบการมองวางขนานกับระนาบ xy ดังนันจะตั
้ ดแกน z เพียงแกน
เดียว
การวางแบบนี ้ทาให้ เกิดโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพหนึง่ จุดกับจุดสุดสายตาที่
แกน z
รูป ค) ระนาบโปรเจ็กต์ตดั ทังแกน
้
x และแกน z (ไม่ตดั แกน y) ทาให้ เกิดโปรเจ็กต์
ชันแบบเพอร์ สเปกทีพแบบสองจุดที่มีจดุ สุดสายตาที่แกน x และแกน z
สาหรับโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพสามจุดจะไม่ให้ ความสมจริงขึ ้นมากนัก
เมื่อเทียบกับโปรเจ็กต์ชนั แบบสองจุด ทาให้ โปรเจ็กต์ชนั แบบสามจุดไม่ได้
นามาใช้ มากนักในทางสถาปั ตยกรรมและวิศวกรรม
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
114
จุดสุดสายตาสาหรั บโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
ประเภทจุดสุดสายตาหลักของการมองลูกบาศก์ในโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
ก) ลูกบาศก์ที่ถกู โปรเจ็กต์ในระนาบการมองที่ตดั เฉพาะแกน z
ข) การสร้ างจุดสุดสายตาเพียงจุดเดียวในทิศทาง z
ค) ลูกบาศก์ถกู โปรเจ็กต์ในระนาบการมองที่สร้ างจุดสุดสายตา 2 จุดตัดกับ
แกน z และ แกน x
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
115
ปริมาตรการมองโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
เราสามารถสร้ างปริมาตรการมองโดยการกาหนดตาแหน่งของวินโดว์ขริบภาพ
แบบสี่เหลี่ยมบนระนาบการมอง
แต่ตอนนี ้ระนาบที่เป็ นขอบเขตสาหรับปริมาตรการมองไม่ได้ ขนานกัน เพราะเส้ น
โปรเจ็กต์ชนั ไม่ขนานกัน
ปริมาตรการมองด้ านล่าง, ด้ านบน และด้ านข้ างเป็ นระนาบไปยังขอบวินโดว์ที่
จุดตัดทังหมดอยู
้
ท่ ี่จดุ อ้ างอิงโปรเจ็กต์ชนั
ด้ วยเหตุนี ้ทาให้ ปริมาตรการมองเป็ นปิ ระมิดรูปสี่เหลี่ยมระยะอนันต์ที่มีจดุ ปลาย
อยูท่ ี่จดุ ศูนย์กลางของโปรเจ็กต์ชนั (รูปต่อไป)
ออปเจ็กต์ทงหมดที
ั้
่อยูน่ อกปิ ระมิดนี ้จะถูกกาจัดออกไปด้ วยรู ทีนการขริบภาพ ปริ
มาตรการมองของโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพส่วนมากหมายถึง ปิ ระมิดของ
วิสัยทัศน์ (pyramid of vision)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
116
ปริมาตรการมองโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
ปริมาตรการมองของปิ ระมิดสี่เหลี่ยมระยะอนันต์สาหรับโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
117
ปริมาตรการมองโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
การเพิ่มระนาบการขริบภาพที่ระยะใกล้ และไกลที่ตงฉากกั
ั้
บแกน zview
(และขนานกับระนาบการมอง) เราตัดปริมาตรการมองโปรเจ็กต์ชนั
แบบเพอร์ สเปกทีพระยะอนันต์ออกไปเพื่อสร้ างปริมาตรการมองปิ ระ
มิดปลายตัด (truncated pyramid) หรื อปริมาตรการมองกรวยปลาย
ตัด (frustum)
รูปต่อไปแสดงถึงรูปทรงของปริมาตรการมองโปรเจ็กต์ชนั แบบเพอร์
สเปกทีพระยะอนันต์ที่มีระยะการมองวางอยูร่ ะหว่างระนาบขริ บภาพ
ระยะใกล้ และจุดอ้ างอิงโปรเจ็กต์ชนั
ในบางครัง้ ในกราฟิ กแพ็กเกจต้ องการใช้ ระนาบใกล้ และไกล แต่ใน
บางครัง้ ก็เป็ นออปชันให้ เลือก
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
118
ปริมาตรการมองโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพ
ปริมาตรการมองกรวยปลายตัดในโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพที่ระนาบการมอง
อยูห่ น้ าของระนาบขริบภาพระยะใกล้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
119
ฟั งก์ ชันการมองภาพ 3 มิตขิ อง OpenGL
OpenGL Utility Library (GLU) มีฟังก์ชนั สาหรับการกาหนด
พารามิเตอร์ การมองภาพ 3 มิติ และฟั งก์ชนั อื่นในการกาหนดค่าการ
แปลงโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพแบบสมมาตร ฟั งก์ชนั อื่น ๆ เช่น
ฟั งก์ชนั ที่ใช้ ในโปรเจ็กต์ชนั เชิงตังฉาก,
้
โปรเจ็กต์ชนั แบบเพอร์ สเปกทีพ
เฉียง และการแปลงวิวพอร์ ตก็มีอยูแ่ ล้ วในไลบรารี พื ้นฐานของ
OpenGL
นอกจากนี ้ ฟั งก์ชนั ของ GLUT ก็ได้ รวบรวมฟั งก์ชนั พื ้นฐานในการแสดง
และจัดการวินโดว์แสดงผลไว้ ให้ แล้ วด้ วย
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
120
ฟั งก์ ชันในการมองภาพ
เมื่อเราต้ องการแสดงภาพใน OpenGL จะมีการสร้ างเมทริกซ์และ
รวมเข้ ากับเมทริกซ์แสดงผลปั จจุบนั
หลังจากนันเมทริ
้
กซ์ที่ใช้ ในการมองภาพจะรวมเข้ ากับการแปลงทาง
เรขาคณิตที่เรากาหนด
เมทริกซ์รวมจะแปลงจากโคออร์ ดิเนตทางกายภาพไปเป็ นโคออร์ ดิเนต
สาหรับการมอง เรากาหนดโหมดการมองด้ วยคาสัง่
glMatrixMode (GL_MODELVIEW);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
121
ฟั งก์ ชันในการมองภาพ
พารามิเตอร์ ในการมองกาหนดได้ ด้วยฟั งก์ชนั GLU ซึง่ อยูใ่ นไลบรารี
OpenGL Utility ดังนี ้
gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz);
 ฟั งก์ชนั นี ้กาหนดเฟรมอ้ างอิงการมองไว้ ที่จดุ กาเนิดที่โคออร์ ดิเนต
ตาแหน่ง P0 = (x0, y0, z0) ตาแหน่งอ้ างอิงเป็ น Pref = (xref, yref,
zref) และ view-up vector V = (Vx, Vy, Vz) แกนบวก zview สาหรับ
เฟรมการมองอยูใ่ นทิศทาง N = P0 – Pref
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
122
ฟั งก์ ชันในการมองภาพ
ถ้ าไม่ได้ กาหนดค่าพารามิเตอร์ ในฟั งก์ชนั ค่าดีฟอลต์ใน OpenGL จะ
กาหนดเป็ น
P0 = (0, 0, 0)
Pref = (0, 0, -1)
V = (0, 1, 0)
ค่าดีฟอลต์เหล่านี ้ เฟรมอ้ างอิงการมองจะเหมือนกับเฟรมทางกายภาพ
ที่มีทิศทางกับแกน - zview ในหลาย ๆ แอปพลิเคชัน เพื่อความสะดวก
เราสามารถใช้ คา่ ดีฟอลต์สาหรับพารามิเตอร์ การมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
123
ฟั งก์ ชันโปรเจ็กต์ ชันเชิงตัง้ ฉาก
เนื่องจากเมทริกซ์ในโปรเจ็กต์ชนั ถูกเก็บอยูใ่ นโหมดโปรเจ็กต์ชนั ของ
OpenGL ดังนันจะต้
้ องมีการกาหนดโหมดในการแสดงเมทริกซ์เพื่อโปร
เจ็กต์ชนั ขึ ้นมาก่อน โดยใช้ คาสัง่
glMatrixMode (GL_PROJECTION);
พารามิเตอร์ ในโปรเจ็กต์ชนั เชิงตังฉากจะใช้
้
ฟังก์ชนั
glOrtho (xwmin, xwmax, ywmin, ymax, dnear, dfar);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
124
ฟั งก์ ชันโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ผลลัพธ์ของปริมาตรการมองสาหรับโปรเจ็กต์ชนั นี ้จะเป็ นทรงสี่เหลี่ยม
ด้ านขนาน ตาแหน่งโคออร์ ดิเนตภายในปริมาตรการมองจะถูกแปลงไป
ยังตาแหน่งภายในลูกบาศก์เชิงสมมาตรในเฟรมอ้ างอิงแบบมือซ้ าย
ด้ วยค่า znear = - dnear และ zfar = - dfar
ค่าดีฟอลต์ของพารามิเตอร์ ในฟั งก์ชนั ในโปรเจ็กต์ชนั เชิงตังฉากคื
้
อ 1
ซึง่ จะมีการสร้ างปริมาตรการมองที่เป็ นลูกบาศก์เชิงสมมาตรในระบบ
การมองแบบมือขวา ค่าดีฟอลต์ของฟั งก์ชนั จะเป็ น
glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
125
ฟั งก์ ชันโปรเจ็กต์ ชันเชิงตัง้ ฉาก
ค่าดีฟอลต์ของปริมาตรการมองของโปรเจ็กต์ชนั เชิงสมมาตร ค่าโคออร์ ดิเนตสาหรับ
ลูกบาศก์เชิงสมมาตรในช่วง -1 ถึง 1 ในแต่ละทิศทาง ระนาบการขริบระยะใกล้ อยู่ที่
znear =1 และ ระนาบการขริบระยะไกลอยูท่ ี่ zfar = -1
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
126
ฟั งก์ ชันโปรเจ็กต์ ชันเชิงตัง้ ฉาก
สาหรับแอปพลิเคชันที่เป็ น 2 มิติ เราใช้ ฟังก์ชนั gluOrtho2D เพื่อ
กาหนดวินโดว์ขริบภาพ
เราสามารถใช้ ฟังก์ชนั glOrtho เพื่อกาหนดวินโดว์ขริบภาพ โดย
ค่าพารามิเตอร์ dnear และ dfar จะกาหนดด้ วยค่าที่อยูต่ รงข้ ามกับ
ด้ านของโคออร์ ดิเนตของจุดกาเนิด
ในความเป็ นจริง การเรี ยกใข้ ฟังก์ชนั gluOrtho2D จะเหมือนกับการ
เรี ยก glOrtho ที่มีคา่ dnear = -1.0 และ dfar = 1.0 นัน่ เอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
127
ฟั งก์ ชันโปรเจ็กต์ ชันเชิงตัง้ ฉาก
Ex08_01.cpp เป็ นโปรเจ็กต์ชนั เชิงตังฉากของรู
้
ปลูกบาศก์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
128
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพเชิงสมมาตร
มีฟังก์ชนั 2 ฟั งก์ชนั ที่ใช้ ในการสร้ างจอภาพการมองภาพแบบเพอร์
สเปกทีพ
ฟั งก์ชนั หนึง่ สร้ างปริมาตรการมองกรวยรูปตัดเชิงสมมาตรที่เกี่ยวกับ
ทิศทางการมอง (แกน - zview)
ฟั งก์ชนั อื่นสามารถใช้ ได้ ทงโปรเจ็
ั้
กต์ชนั แบบเพอร์ สเปกทีพแบบ
สมมาตร หรื อโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพเฉียง
สาหรับทังสองฟั
้
งก์ชนั จุดอ้ างอิงโปรเจ็กต์ชนั อยูท่ ี่จดุ กาเนิดโคออร์ ดิเนต
การมอง และระนาบการขริบระยะใกล้ คือระนาบการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
129
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพเชิงสมมาตร
ปริมาตรการมองกรวยรูปตัดโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพเชิงสมมาตรกาหนด
gluPerspective (theta, aspect, dnear, dfar);
พารามิเตอร์ 2 ตัวแรกกาหนดเป็ นขนาดและตาแหน่งของวินโดว์ขริบภาพบน
ระนาบระยะใกล้
ส่วนพารามิเตอร์ อีก 2 ตัวกาหนดระยะทางจากจุดมอง (จุดกาเนิด) ไปยังระนาบ
การขริบระยะใกล้ และระยะไกล
พารามิเตอร์ theta แสดงถึงมุมการมองซึง่ เป็ นมุมระหว่างระนาบการขริบด้ านบน
และด้ านล่าง มุมนี ้สามารถกาหนดได้ ตงแต่
ั ้ 0 ถึง 180
พารามิเตอร์ aspect เป็ นค่าของอัตราส่วนแอสเป็ กต์ (aspect ratio) ซึง่ เป็ นค่า
ความกว้ าง/ความสูง ของวินโดว์ขริบภาพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
130
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพเชิงสมมาตร
มุม  สาหรับปริมาตรการมองโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพเชิงสมมาตร ที่มีวินโดว์
ขริบภาพอยูร่ ะหว่างระนาบบการขริบระยะใกล้ กับจุดอ้ างอิงโปรเจ็กต์ชนั
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
131
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพเชิงสมมาตร
สาหรับโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพใน OpenGL ระนาบการขริ บ
ระยะใกล้ และระยะไกลต้ องอยูท่ ี่ใดที่หนึง่ บนแกน - zview เสมอและไม่
สามารถอยูห่ ลังจุดการมองได้
ข้ อจากัดนี ้ไม่ได้ จากัดเฉพาะโปรเจ็กต์ชนั เชิงตังฉากเท่
้
านัน้ แต่ใช้ ไม่ได้
เมื่อเป็ นโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพของออปเจ็กต์ที่ระนาบการมอง
อยูห่ ลังจุดการมอง
ดังนันทั
้ งค่
้ า dnear และ dfar ต้ องกาหนดเป็ นค่าบวก และตาแหน่ง
ของระนาบใกล้ และไกลถูกคานวณเป็ น znear = - dnear และ zfar = dfar
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
132
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพทั่วไป
เราสามารถใช้ ฟังก์ชนั ต่อไปนี ้เพื่อกาหนดโปรเจ็กต์ชนั แบบเพอร์ สเปก
ทีพได้ ทงปริ
ั ้ มาตรการมองกรวยรูปตัดเชิงสมมาตรและปริมาตรการมอง
กรวยรูปตัดแบบเฉียง
glFrustum (xwmin, xwmax, ywmin, ywmax, dnear, dfar) ;
ค่าพารามิเตอร์ ทกุ ตัวในฟั งก์ชนั นี ้กาหนดเป็ นเลขทศนิยม เช่นเดียวกับ
โปรเจ็กต์ชนั การมองอื่น ๆ
ระนาบระยะใกล้ คือระนาบการมอง และจุดอ้ างอิงโปรเจ็กต์ชนั อยู่ที่จดุ
การมอง (จุดกาเนิดโคออร์ ดิเนต)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
133
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพทั่วไป
ฟั งก์ชนั นี ้มีพารามิเตอร์ เช่นเดียวกับฟั งก์ชนั ของโปรเจ็กต์ชนั แบบขนาน
และเชิงตังฉากอื
้
่น ๆ
แต่ขณะนี ้ระยะระนาบการขริบระยะใกล้ และระยะไกลต้ องเป็ นบวก
พารามิเตอร์ ตวั แรกกาหนดโคออร์ ดิเนตของวินโดว์ขริบภาพบนระนาบ
ระยะใกล้
ส่วนพารามิเตอร์ 2 ตัวท้ ายกาหนดระยะจากจุดกาเนิดโคออร์ ดิเนตไป
ยังระนาบการขริบระยะใกล้ และระยะไกลตามแกน -zview ตาแหน่ง
สาหรับระนาบระยะใกล้
ระยะไกลสามารถคานวณได้ จาก znear = - dnear และ zfar = - dfar
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
134
ฟั งก์ ชันโปรเจ็กต์ ชันแบบเพอร์ สเปกทีพทั่วไป
วินโดว์ขริบภาพสามารถกาหนดที่ใดก็ได้ บนระนาบระยะใกล้
ถ้ าเราเลือกโคออร์ ดิเนตของวินโดว์ขริบภาพ ดังนัน้ xwmin = - xwmax
และ ywmin = - ywmax
เราจะได้ กรวยรูปตัดเชิงสมมาตร (ที่แกน – zview เป็ นเส้ นกลาง) ถ้ าเรา
ไม่กาหนดคาสัง่ โปรเจ็กต์ชนั OpenGL จะกาหนดค่าดีฟอลต์โปรเจ็กต์
ชันเชิงตังฉากลงบนจอภาพ
้
ปริมาตรการมองในกรณีนี ้จะเป็ นลูกบาศก์
เชิงสมมาตร (ดังรูป)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
135
วิวพอร์ ตและวินโดว์ แสดงผล
หลังจากมีการใช้ รูทีนการขริบภาพในโคออร์ ดิเนตทัว่ ไปแล้ ว
รายละเอียดของวินโดว์ขริบภาพที่มีข้อมูลความลึกจะถูกแม็พไปยัง
โคออร์ ดิเนตของจอภาพ 3 มิติ
ค่าของสีในแต่ละตาแหน่ง xy บนวิวพอร์ ตจะถูกเก็บค่าในรี เฟรช
บัพเฟอร์ (บัพเฟอร์ สี)
ข้ อมูลความลึกของแต่ละตาแหน่ง xy จะเก็บลงในบัพเฟอร์ เก็บความลึก
สาหรับวิวพอร์ ตรูปสี่เหลี่ยมสามารถกาหนดได้ ด้วยฟั งก์ชนั
glViewport (xvmin, yvmin, vpWidth, vpHeight);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
136
วิวพอร์ ตและวินโดว์ แสดงผล
พารามิเตอร์ 2 ตัวแรกในฟั งก์ชนั นี ้กาหนดเป็ นตัวเลขจานวนเต็มของมุม
ล่างซ้ ายของวิวพอร์ ตที่สมั พันธ์กบั มุมล่างซ้ ายของวินโดว์แสดงผล
ส่วนพารามิเตอร์ 2 ตัวท้ ายจะเป็ นค่าจานวนเต็มของความกว้ างและ
ความสูงของวิวพอร์ ต
การคงสภาพของอัตราส่วนของออปเจ็กต์ในจอภาพให้ เรากาหนด
อัตราส่วนแอสเป็ กต์ของวิวพอร์ ตให้ เท่ากับอัตราส่วนแอสเป็ กต์ของ
วินโดว์ขริบภาพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
137
วิวพอร์ ตและวินโดว์ แสดงผล
Ex08_02.cpp แสดงรูป
สี่เหลี่ยมจัตรุ ัสที่แสดงออก
ทางจอภาพโดยใช้ โปรเจ็กต์
ชันแบบเพอร์ สเปกทีพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
138
วิวพอร์ ตและวินโดว์ แสดงผล
Ex08_03.cpp แสดงการมองภาพรูปลูกบาศก์เมื่อมีโปรเจ็กต์ชนั แบบ
เพอร์ สเปกทีพ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
139
วิวพอร์ ตและวินโดว์ แสดงผล
Ex08_04.cpp แสดง
การมองภาพกาน ้าชา
แบบโปร่งสีน ้าเงิน
(WireTeapot) และ
แผ่นรองสี่เหลี่ยมสีแดง
ใน 4 วิวพอร์ ต 4
มุมมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
140
อัลกอริท่มึ การขริบภาพ 3 มิติ (3D clipping algorithm)
เราสามารถประยุกต์การขริบภาพให้ กบั ภาพ 3 มิติได้ ด้วย
การขริบภาพ 3 มิติจะใช้ ขอบเขตแบบนอมอลไลซ์กบั ปริมาตรการมอง
แต่ละขอบเขตการขริบภาพในปริมาตรการมองแบบนอมอลไลซ์นี ้ก็คือ
ระนาบที่ขนานกับระนาบหนึง่ ของระนาบคาร์ ทีเซียน ไม่เกี่ยวกับวิธีโปร
เจ็กต์ชนั หรื อรูปทรงดังเดิ
้ มของปริมาตรการมอง ขึ ้นอยูก่ ับปริมาตรการ
มองที่นอมอลไลซ์เป็ นรูปลูกบาศก์หนึง่ หน่วย หรื อรูปลูกบาศก์เชิง
สมมาตรที่มีความยาวขอบเป็ น 2 ระนาบการขริบมีตาแหน่งโคออร์ ดิเนต
ที่ 0 และ 1 หรื อที่ 1 และ -1
สาหรับรูปลูกบาศก์เชิงสมมาตร สมการสาหรับระนาบการขริบ 3 มิติ
เป็ น
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
141
อัลกอริท่มึ การขริบภาพ 3 มิติ (3D clipping algorithm)
8-14
ขอบเขตการขริบ x และ y ถูกจากัดอยูใ่ นวินโดว์ขริบภาพ ส่วนขอบเขตการขริบ z
จะเป็ นตาแหน่งสาหรับระนาบระยะใกล้ และระยะไกล
อัลกอริทมึ่ สาหรับการมองภาพ 3 มิติจะบันทึกทุกส่วนของออปเจ็กต์ภายในปริ
มาตรการมองเพื่อแสดงบนอุปกรณ์แสดงผล ทุกส่วนของออปเจ็กต์ที่อยู่ภายนอก
ระนาบการขริบของปริมาตรการมองจะถูกกาจัดออกไป
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
142
การขริบภาพในโคออร์ ดเิ นตแบบโฮโมจีเนียส 3 มิติ
ไลบรารี ของคอมพิวเตอร์ กราฟิ กมีการดาเนินการตาแหน่งเชิงพื ้นที่
เหมือนโคออร์ ดิเนตแบบโฮโมจีเนียส 4 มิติ
ดังนันการแปลงทุ
้
กแบบสามารถแสดงได้ ด้วยเมทริกซ์ 4x4 แต่ละ
ตาแหน่งโคออร์ ดิเนตจะแปลงเป็ นการแสดงในรูปแบบ 4 มิติ
หลังจากส่งผ่านค่าตาแหน่งไปยังการแปลงทางเรขาคณิต, การแปลง
การมอง และการแปลงโปรเจ็กต์ชนั ทาให้ ได้ รูปแบบโฮโมจีเนียสเป็ น
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
143
การขริบภาพในโคออร์ ดเิ นตแบบโฮโมจีเนียส 3 มิติ
8-15
เมื่อเมทริกซ์ M เป็ นเมทริกซ์ที่รวมการแปลงทังหลายจากโคออร์
้
ดิเนตทางกายภาพ
เป็ นนอมอลไลซ์
โคออร์ ดิเนตโปรเจ็กต์ชนั แบบโฮโมจีเนียส และค่าโฮโมจีเนียสพารามิเตอร์ h อาจมี
ค่าไม่ใช่ 1 ในความเป็ นจริง h อาจจะเป็ นค่าจริงใด ๆ ขึ ้นอยูก่ บั วิธีการแสดงออป
เจ็กต์บนจอภาพและประเภทของโปรเจ็กต์ชนั ที่เราใช้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
144
การขริบภาพในโคออร์ ดเิ นตแบบโฮโมจีเนียส 3 มิติ
ถ้ าค่าโฮโมจีเนียสพารามิเตอร์ h มีคา่ เป็ น 1 โคออร์ ดิเนตแบบโฮโมจีเนียสเป็ นค่า
เดียวกับโคออร์ ดิเนตจากโปรเจ็กต์ชนั ซึง่ เป็ นกรณีทวั่ ไปที่เกิดขึ ้นบ่อย ๆ ในโปร
เจ็กต์ชนั แบบขนาน
แต่ในโปรเจ็กต์ชนั แบบเพอร์ สเปกทีพจะสร้ างโฮโมจีเนียสพารามิเตอร์ ที่เป็ นฟั งก์ชนั
ของโคออร์ ดิเนต z
สาหรับตาแหน่งเชิงพื ้นที่ ค่าโฮโมจีเนียสพารามิเตอร์ ของโปรเจ็กต์ชนั แบบเพอร์
สเปกทีพมีคา่ เป็ นลบได้ ซงึ่ จะเกิดขึ ้นเมื่อตาแหน่งโคออร์ ดิเนตอยู่หลังจุดอ้ างอิงโปร
เจ็กต์ชนั อัตราส่วนที่แสดงสาหรับพื ้นผิวออปเจ็กต์ที่กาหนดในโคออร์ ดิเนตแบบโฮ
โมจีเนียสซึง่ โฮโมจีเนียสพารามิเตอร์ อาจจะเป็ นค่าบวกหรื อลบก็ได้
ถ้ าเกิดการขริบในโคออร์ ดิเนตโปรเจ็กต์ชนั หลังจากหารด้ วยโฮโมจีเนียสพารา
มิเตอร์ h ข้ อมูลโคออร์ ดิเนตอาจจะสูญหายไปและการขริบอาจจะไม่ถกู ต้ องก็ได้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
145
รหัสพืน้ ที่ของภาพ 3 มิติ
เราขยายแนวคิดรหัสพื ้นที่ (region code) จากหัวข้ อ 7.7.1 เพื่อใช้ กบั
ภาพ 3 มิติโดยการเพิ่ม 2 บิตสาหรับระนาบการขริบระยะใกล้ และ
ระยะไกล ดังนันตอนนี
้
้เราจะมีรหัสพื ้นที่ 6 บิต แสดงดังรูปต่อไป
ตาแหน่งบิตในรหัสพื ้นที่ตวั อย่างตัวเลขจากขวาไปซ้ ายอ้ างอิงกับระนาบ
การขริบด้ านซ้ าย, ขวา, ล่าง, บน, ใกล้ และไกล ตามลาดับ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
146
รหัสพืน้ ที่ของภาพ 3 มิติ
เงื่อนไขสาหรับการกาหนดค่าบิตในรหัสพื ้นที่เป็ นพื ้นฐานเช่นเดียวกับใน
หัวข้ อ 7.7.1 บวกกับอีก 2 เงื่อนไขเพิ่มเติมสาหรับระนาบการขริบ
ระยะใกล้ และระยะไกล
สาหรับจอภาพ 3 มิติ เราต้ องประยุกต์ใช้ รูทีนการขริบให้ กบั โคออร์ ดิเนต
โปรเจ็กต์ชนั ซึง่ แปลงเป็ นพื ้นที่นอมอลไลซ์
หลังจากโปรเจ็กต์แล้ ว แต่ละจุดในจอภาพจะมี 4 องค์ประกอบ
P = (xh, yh, zh, h)
สมมุติวา่ เรากาลังขริบขอบเขตของรูปลูกบาศก์เชิงสมมาตรที่นอมอล
ไลซ์ (สมการ 8-13) จุดที่อยูภ่ ายในปริมาตรการมองแบบนอมอลไลซ์ถ้า
โคออร์ ดิเนตของโปรเจ็กต์ชนั ของจุดนันเป็
้ นไปตาม 6 อสมการนี ้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
147
รหัสพืน้ ที่ของภาพ 3 มิติ
8-16
ค่าของโฮโมจีเนียสพารามิเตอร์ h จะไม่ใช่ 0 นอกจากจะเกิด
ข้ อผิดพลาด
ก่อนที่จะแสดงขันตอนการท
้
างานของรหัสพื ้นที่ เราสามารถตรวจสอบ
ได้ ก่อนถึงความเป็ นไปได้ ของโฮโมจีเนียสพารามิเตอร์ ด้วยค่า 0 หรื อ
ค่าที่น้อยมาก ๆ ดังนันค่
้ าโฮโมจีเนียสพารามิเตอร์ สามารถเป็ นได้ ทงค่
ั้ า
บวกและค่าลบ ดังนันสมมั
้
ติวา่ h  0 เราสามารถเขียนอสมการก่อน
หน้ านี ้ในรูปแบบของ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
148
รหัสพืน้ ที่ของภาพ 3 มิติ
8-17
โฮโมในกรณีทวั่ ไปที่ h > 0 และเราสามารถกาหนดค่าบิตในรหัสพื ้นที่
สาหรับตาแหน่งโคออร์ ดิเนตตามการทดสอบดังนี ้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
149
รหัสพืน้ ที่ของภาพ 3 มิติ
8-18
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
150
รหัสพืน้ ที่ของภาพ 3 มิติ
ดังนันค่
้ าบิตสามารถกาหนดได้ เช่นเดียวกับในการขริบภาพ 2 มิติ นัน่ ก็
คือ เราใช้ บติ เครื่ องหมายของการคานวณค่าใดค่าหนึง่ ของ h  xh,
h  yh หรื อ h  zh เพื่อกาหนดความสัมพันธ์ของค่าบิตกับรหัสพื ้นที่
รูปที่ผา่ นมาแสดงรหัสพื ้นที่ 27 รหัสของปริมาตรการมอง ในกรณี
เหล่านันเมื
้ ่อ h < 0 ในบางจุดเราสามารถประยุกต์การขริบโดยใช้ ชดุ ที่
สองของอสมการ 8.15 หรื อเราสามารถเปลี่ยนโคออร์ ดิเนตเป็ นค่าตรง
ข้ าม และขริบโดยการใช้ ทดสอบสาหรับ h >0
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
151
การขริบจุดและเส้ น 3 มิติ
สาหรับตาแหน่งจุดและเส้ นตรงที่อยูบ่ นจอภาพและไม่ได้ อยูห่ ลังจุดอ้ างอิงโปร
เจ็กต์ชนั ค่าโฮโมจีเนียสพารามิเตอร์ ทงหมดเป็
ั้
นค่าบวกและสามารถสร้ างรหัส
พื ้นที่ได้ ตามสมการ 8-17
หลังจากนันเราก
้
าหนดรหัสพื ้นที่สาหรับแต่ละตาแหน่งบนจอภาพเพียงครัง้ เดียว
เราก็สามารถบอกได้ อย่างง่าย ๆ ว่าตาแหน่งของจุดนันอยู
้ ภ่ ายนอกหรื อภายในปริ
มาตรการมอง
เช่น รหัสพื ้นที่ 101000 บอกว่าจุดนันอยู
้ ด่ ้ านบนและอยูห่ ลังโดยตรงกับปริมาตร
การมอง ในขณะที่รหัสพื ้นที่ 000000 บอกว่าจุดอยูใ่ นปริมาตรการมอง (รูปต่อไป)
ดังนัน้ สาหรับการขริบจุด เราเพียงแค่กาจัดจุดที่รหัสพื ้นที่ไม่ใช่ 000000 หรื อ
อาจจะกล่าวได้ วา่ ถ้ ามีเงื่อนไขในการทดสอบข้ อใดก็ตามในสมการ 8-17 เป็ นค่า
ลบ จุดนันอยู
้ ภ่ ายนอกปริมาตรการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
152
การขริบจุดและเส้ น 3 มิติ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
153
การขริบจุดและเส้ น 3 มิติ
ขันแรกเราสามารถทดสอบรหั
้
สพื ้นที่ของจุดปลายของเส้ นเพื่อยอมรับหรื อ
กาจัดเส้ นนันออกไป
้
ถ้ ารหัสพื ้นที่ของจุดปลายทังสองข้
้
างเป็ น 000000 เส้ นนันอยู
้ ่ภายในอย่าง
สมบูรณ์ของปริ มาตรการมอง เช่นเดียวกัน เราสามารถยอมรับเส้ นนันได้
้
อย่างชัดเจน
ถ้ าใช้ ตวั ดาเนินการทางตรรกะด้ วย or กับรหัสพื ้นที่ของจุดปลายทังสองของ
้
เส้ นแล้ วเกิดค่า 0 และเราสามารถกาจัดเส้ นนันอย่
้ างชัดเจน
ถ้ าใช้ and กับรหัสพื ้นที่ของจุดปลายทังสองของเส้
้
นแล้ วเกิดค่าที่ไม่ใช่ 0
ค่าที่ไม่ใช่ 0 นี ้บอกว่ารหัสพื ้นที่ของจุดปลายทังสองมี
้
ค่า 1 ในตาแหน่งบิต
เดียวกัน เส้ นนี ้อยูภ่ ายนอกอย่างสมบูรณ์จากระนาบการขริ บด้ านใดด้ านหนึ่ง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
154
การขริบจุดและเส้ น 3 มิติ
ตัวอย่างเส้ นจาก P3 ไป P4 ในรูป 8.53 มีคา่ รหัสพื ้นที่ของจุดปลายเป็ น
010101 และ 100110
ดังนันเส้
้ นนี ้อยูด่ ้ านล่างอย่างสมบูรณ์จากระนาบการขริบด้ านล่าง
ถ้ าเส้ นตรงไม่ผา่ นการทดสอบทัง้ 2 ข้ อนี ้ เราต้ องวิเคราะห์สมการของ
เส้ นตรงเพื่อกาหนดมีสว่ นใดของเส้ นตรงนันที
้ ่จะบันทึกไว้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
155
การขริบจุดและเส้ น 3 มิติ
รหัสพื ้นที่ของภาพ 3 มิติสาหรับเส้ นตรงสองเส้ น โดยเส้ น P1P2 ตัดกับขอบเขตการขริ บด้ านขวาและ
ด้ านบนของปริ มาตรการมอง ในขณะที่เส้ น P3P4 อยู่ด้านล่างอย่างสมบูรณ์จากระนาบการขริ บด้ านล่าง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
156
การขริบจุดและเส้ น 3 มิติ
สมการสาหรับเส้ นตรง 3 มิติเขียนอยูใ่ นรูปสมการ และวิธีการขริบเลียงบาร์ สกี ้ (Liang-Barsky) ในหัวข้ อ 7.7.2 สามารถขยายเพื่อใช้ กบั ภาพ 3
มิติได้ สาหรับเส้ นตรงที่มีจดุ ปลาย P1 = (xh1, yh1, zh1, h1) และ
P2 = (xh2, yh2, zh2, h2) เราสามารถเขียนสมการเส้ นตรงได้ เป็ น
8-19
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
157
การขริบจุดและเส้ น 3 มิติ
เมื่อพารามิเตอร์ u = 0 เราอยูท่ ี่ตาแหน่ง P1 และเมื่อ u = 1 เราจะอยูท่ ี่
ตาแหน่ง P2 เราสามารถเขียนสมการในรูปแบบของโคออร์ ดิเนตโฮโมจี
เนียสได้ เป็ น
8-20
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
158
การขริบจุดและเส้ น 3 มิติ
การใช้ รหัสพื ้นที่สาหรับเส้ นตรง ในขันแรกเราสามารถก
้
าหนดได้ วา่ มี
การตัดระนาบการขริบหรื อไม่
ถ้ ามีรหัสพื ้นที่ของจุดปลายรหัสใด มีคา่ 0 ในขณะที่รหัสพื ้นที่อื่นมีคา่
เป็ น 1 ณ ตาแหน่งบิตเดียวกันแสดงว่าเส้ นตรงนันตั
้ ดผ่านขอบเขตการ
ขริบ อาจกล่าวได้ วา่ ในการทดสอบจุดปลายด้ านหนึง่ ตามสมการ 8-18
ถ้ าการทดสอบใดเป็ นค่าลบ ในขณะที่การทดสอบเดียวกันกับจุดปลาย
อีกด้ านหนึง่ ไม่ได้ คา่ ลบ การหาตาแหน่งที่ตดั กับระนาบการขริบนี ้ ขัน้
แรกเราต้ องหาสมการที่เหมาะสมในสมการ 8-20 เพื่อกาหนดค่าที่
สัมพันธ์กนั ของพารามิเตอร์ u หลังจากนันจึ
้ งค่อยคานวณตาแหน่ง
โคออร์ ดิเนต
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
159
การขริบจุดและเส้ น 3 มิติ
ตัวอย่างของขันตอนการค
้
านวณจุดตัด P1P2 ให้ เราพิจารณาส่วนของ
เส้ นตรงตามรูป 8.52 จะเห็นว่าเส้ นนี ้จะตัดระนาบการขริบด้ านขวาซึง่
สามารถอธิบายได้ ด้วยสมการ xmax = 1
ดังนัน้ เรากาหนดค่าการตัดสาหรับพารามิเตอร์ u โดยโคออร์ ดิเนตโปร
เจ็กต์ชนั x มีคา่ เท่ากับ 1
8-21
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
160
การขริบจุดและเส้ น 3 มิติ
เมื่อแก้ สมการหาค่า u เราจะได้
8-22
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
161
การขริบจุดและเส้ น 3 มิติ
หลังจากนันเราก
้
าหนดค่าของ yp และ zp บนระนาบการขริบนี ้ ใช้ คา่
ของ u ที่คานวณได้ ในกรณีนี ้ค่าจุดตัด yp และ zp อยูใ่ นขอบเขต 1
ของปริมาตรการมอง และเส้ นตรงตัดผ่านปริมาตรการมองภายใน
ขันต่
้ อไป เราหาตาแหน่งการตัดด้ วยระนาบการขริบด้ านบน ขันตอนนี
้
้
เสร็จสมบูรณ์เพราะจุดตัดบนระนาบการขริบด้ านบนและด้ านขวาบอก
ได้ วา่ ส่วนของเส้ นที่อยูใ่ นปริมาตรการมองและทังเส้
้ นอยู่นอกปริมาตร
การมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
162
การขริบจุดและเส้ น 3 มิติ
เมื่อเส้ นตรงตัดขอบเขตการขริบแต่ไม่เข้ าไปในปริมาตรการมอง เราทา
ต่อไปเหมือนกับในภาพ 2 มิติ
ส่วนของเส้ นตรงที่อยูภ่ ายนอกขอบเขตการขริบถูกกาจัดออกไป
แล้ วเราก็อปั เดทข้ อมูลรหัสพื ้นที่และค่าสาหรับพารามิเตอร์ u ของเส้ น
ตรงที่อยูภ่ ายในขอบเขต
หลังจากนันเราท
้
าการทดสอบส่วนที่เหลือของเส้ นกับระนาบการขริบ
อื่น ๆ เพื่อกาจัด หรื อการคานวณจุดตัดในอนาคต
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
163
การขริบรูปหลายเหลี่ยม 3 มิติ
ออปเจ็กต์ทางกราฟิ กที่มีขอบเขตอธิบายได้ ด้วยสมการเส้ นตรง ดังนัน้
แต่ละออปเจ็กต์ประกอบด้ วยชุดของพื ้นผิวรูปหลายเหลี่ยม
ดังนันการขริ
้
บออปเจ็กต์ในจอภาพ 3 มิติ เราต้ องประยุกต์ใช้ รูทีนการ
ขริบกับพื ้นผิวรูปหลายเหลี่ยม
ตัวอย่าง รูปต่อไป ส่วนของปิ ระมิดที่ถกู ขริบออก ส่วนเส้ นประแสดง
ส่วนของพื ้นผิวรูปหลายเหลี่ยมที่อยูภ่ ายในปริมาตรการมอง
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
164
การขริบรูปหลายเหลี่ยม 3 มิติ
การขริบออปเจ็กต์ 3 มิติสว่ นของพื ้นผิวที่อยูภ่ ายนอกระนาบการขริบของปริมาตรการ
มองที่ถกู กาจัดออกไปและอาจจะต้ องสร้ างพื ้นผิวขึ ้นมาใหม่
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
165
การขริบรูปหลายเหลี่ยม 3 มิติ
ขันแรกเราสามารถทดสอบรู
้
ปหลายเหลี่ยมเพื่อยอมรับหรื อกาจัดได้
อย่างชัดเจนโดยใช้ โคออร์ ดิเนต, ขอบเขตทรงกลม หรื อเครื่ องมืออื่นที่
จากัดโคออร์ ดิเนต
ถ้ าขีดจากัดของออปเจ็กต์อยูภ่ ายในขอบเขตการขริบทังหมด
้
เราบันทึก
ไว้ ทงออปเจ็
ั้
กต์
แต่ถ้าขีดจากัดโคออร์ ดิเนตอยูภ่ ายนอกทังหมดจากขอบเขตการขริ
้
บ
ด้ านใดด้ านหนึง่ เรากาจัดทังออปเจ็
้
กต์
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
166
การขริบรูปหลายเหลี่ยม 3 มิติ
เมื่อเราสามารถบันทึกหรื อกาจัดทังออปเจ็
้
กต์ ต่อไปเราสามารถแสดง
รายการเวอร์ เท็กซ์ของชุดรูปหลายเหลี่ยมที่กาหนดเป็ นพื ้นผิวออปเจ็กต์
การประยุกต์ใช้ วิธีการนี ้จะคล้ ายกับการขริบรูปหลายเหลี่ยม 2 มิติ
เราสามารถขริบขอบเพื่อให้ เกิดรายการเวอร์ เท็กซ์ใหม่ของพื ้นผิวออป
เจ็กต์
เราอาจจะต้ องสร้ างรายการเวอร์ เท็กซ์ใหม่สาหรับพื ้นผิวเพิ่มเติมที่เป็ น
ผลมาจากการขริบ ตารางรูปหลายเหลี่ยมจะถูกอัปเดทเพื่อเพิ่มพื ้นผิว
รูปหลายเหลี่ยมใหม่และปรับแต่งข้ อมูลการเชื่อมต่อและขอบของพื ้นผิว
ที่แชร์ กนั อยู่
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
167
การขริบรูปหลายเหลี่ยม 3 มิติ
การขริบรูปมุมหลายหน้ า, พื ้นผิวรูปหลายเหลี่ยมส่วนมากจะแบ่งเป็ น
ส่วนของรูปสามเหลี่ยมและแผ่นรูปสามเหลี่ยม
หลังจากนันเราขริ
้
บแผ่นสามเหลี่ยมด้ วยอัลกอริทมึ่ ของซูเธอร์ แลนด์ฮอดจ์แมน (7.8.1) แต่ละแผ่นรูปสามเหลี่ยมนามาพิจารณากับระนาบ
การขริบทัง้ 6 ระนาบ เพื่อให้ ได้ รายการเวอร์ เท็กซ์ครัง้ สุดท้ ายของแผ่น
นัน้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
168
การขริบรูปหลายเหลี่ยม 3 มิติ
สาหรับรูปหลายเหลี่ยมแบบคอนเคฟ เราสามารถใช้ วิธีการแยกเพื่อให้
ได้ ชดุ ของสามเหลี่ยม
หลังจากนันท
้ าการขริบรูปสามเหลี่ยม
เรายังสามารถขริบรูปหลายเหลี่ยม 3 มิติแบบคอนเคฟได้ ด้วยอัลกอริ
ทึม่ ของเวลเลอร์ -เอเธอร์ ตนั ตามหัวข้ อ 7.8.2
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
169
การขริบเส้ นโค้ ง 3 มิติ
ขันแรกเราต้
้
องทดสอบเพื่อกาหนดว่าโคออร์ ดิเนตของเส้ นโค้ ง เช่น ทรง
กลม นันอยู
้ ภ่ ายในปริมาตรการมองอย่างสมบูรณ์
หลังจากนันเราสามารถทดสอบเพื
้
่อกาหนดว่าออปเจ็กต์นนอยู
ั ้ ภ่ าย
นอกจากระนาบการขริบระนาบใดระนาบหนึง่ ของ 6 ระนาบนัน้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
170
การขริบเส้ นโค้ ง 3 มิติ
ถ้ าการทดสอบการยอมรับหรื อกาจัดนันล้
้ มเหลว ให้ เรากาหนดตาแหน่ง
ด้ วยระนาบการขริบ
การกระทาเช่นนี ้ เราต้ องแก้ สมการพื ้นผิวไปพร้ อม ๆกับสมการระนาบ
การขริบ
กราฟิ กแพ็กเกจจึงไม่ได้ รวมรูทีนการขริบสาหรับออปเจ็กต์ที่เป็ นเส้ นโต้ ง
มาให้ ด้วย แต่พื ้นผิวโค้ งถูกประมาณว่าเป็ นชุดของรูปหลายเหลี่ยม และ
ใช้ การขริบออปเจ็กต์ด้วยรูทีนการขริบรูปหลายเหลี่ยม
เมื่อมีการประยุกต์ใช้ ขนตอนการเรนเดอร์
ั้
พื ้นผิวให้ กบั รู ปหลายเหลี่ยม
ทาให้ มีการแสดงพื ้นผิวโค้ งมีความสมจริงมากขึ ้น
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
171
ระนาบการขริบของ OpenGL
นอกเหนือจากระนาบการขริบทัง้ 6 ระนาบที่ประกอบเป็ นปริมาตรการ
มองแล้ ว
OpenGL ยังมีระนาบการขริบบนจอภาพเพิ่มเติมอีกด้ วย ไม่เหมือนกับ
ระนาบการขริบของปริมาตรการมองซึง่ แต่ละระนาบตังฉากกั
้
บแกน
โคออร์ ดิเนตแกนใดแกนหนึง่ เราสามารถเลือกระนาบและกระตุ้นให้
ระนาบนันท
้ างานได้ ด้วยคาสัง่
glClipPlane (id, planeParameters);
glEnable (id);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
172
ระนาบการขริบของ OpenGL
ค่าพารามิเตอร์ id ใช้ เป็ นตัวระบุสาหรับระนาบการขริบ
พารามิเตอร์ นี ้อาจกาหนดเป็ น GL_CLIP_PLANE0,
GL_CLIP_PLANE1 หรื ออื่น ๆ
หลังจากนันระนาบจะมี
้
การกาหนดตัวแปรอาร์ เรย์ขนาดเป็ น 4 ที่ชื่อ
planeParameters ซึง่ สมาชิกเป็ นตัวเลขทศนิยมสาหรับค่าพารามิเตอร์
4 ตัวของสมการระนาบ A, B, C และ D ระนาบการขริบที่แอ็กทีพอยูซ่ งึ่
กาหนด id ไว้ แล้ วสามารถปิ ดการใช้ งานได้ ด้วย
glDisable (id);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
173
ระนาบการขริบของ OpenGL
พารามิเตอร์ A, B, C และ D จะถูกโอนไปยังโคออร์ ดิเนตการมองและถูก
นามาใช้ เพื่อทดสอบตาแหน่งโคออร์ ดิเนตการมองบนจอภาพ
การเปลี่ยนแปลงระดับในการแปลงการมอง และการแปลงทางเรขาคณิตไม่
มีผลกระทบกับค่าพารามิเตอร์ ของระนาบที่เก็บอยู่
ดังนันถ้
้ าเรากาหนดระนาบการขริ บก่อนการกาหนดการแปลงการมอง หรื อ
การแปลงทางเรขาคณิตใด ๆ ค่าพารามิเตอร์ ของระนาบที่เก็บอยูย่ งั คงเป็ น
เหมือนพารามิเตอร์ ที่ใส่เข้ ามา
และเนื่องจากรูทีนการขริ บของระนาบเหล่านันถู
้ กนามาประยุกต์ใช้ กบั
โคออร์ ดิเนตการมอง และไม่ได้ อยูใ่ นโคออร์ ดิเนตแบบนอมอลไลซ์
ประสิทธิภาพของโปรแกรมอาจลดต่าลงเมื่อมีการกระตุ้นระนาบการขริ บนี ้
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
174
ระนาบการขริบของ OpenGL
ใน OpenGL มีระนาบการขริบให้ ใช้ งาน 6 ระนาบ แต่อาจจะมีมากกว่า
นี ้ก็ได้ เราสามารถหาจานวนระนาบการขริบได้ ด้วยคาสัง่
glGetIntegerv (GL_MAX_CLIP_PLANES, numPlanes);
พารามิเตอร์ numPlanes เป็ นชื่อของอารร์ เรย์จานวนเต็มที่ถกู กาหนด
เป็ นค่าจานวนเต็มที่มีคา่ เท่ากับจานวนระนาบการขริบที่เราต้ องการ
ค่าดีฟอลต์ของฟั งก์ชนั glClipPlane คือพารามิเตอร์ A, B, C และ D
ของระนาบการขริบที่แต่ละตัวกาหนดด้ วยค่า 0 ในทุกระนาบ และเมื่อ
เริ่มใช้ งานระนาบการขริบจะยังใช้ งานไม่ได้ ต้องกระตุ้นก่อน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
175
ระนาบการขริบของ OpenGL
ex08_05.cpp แสดงการ
ขริบทรงกลม 2 ระนาบ
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
176
รูปทรงสาเร็จรูปใน GLU
GLU (OpenGL Utility) มีฟังก์ชนั ที่ใช้ วาดรูปทรงพิเศษให้ เลือกใช้ งาน
รูปทรงเหล่านี ้เป็ น Quadric ในการใช้ งานจะต้ องประกาศตัวแปรให้ เป็ น
Quadric ก่อน หลังจากนันจึ
้ งเรี ยกใช้ งานได้ รูปทรงพิเศษดังกล่าวมี
ดังนี ้
gluSphere(); รูปทรงกลม
gluCylinder(); รูปทรงกระบอก
gluDisk(); รูปแผ่นจาน
gluPartialDisk(); รูปส่วนของแผ่นจาน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
177
รูปทรงสาเร็จรูปใน GLU
การเรี ยกใช้ งานมีคาสัง่ ประกอบ ดังนี ้
GLUquadricObj *theObj; ประกาศตัวแปร Quadric ชื่อ theObj
theObj = gluNewQuadric(); สร้ าง Quadric Object ให้ theObj
gluDeleteQuadric(theObj); ลบ Quadric Object ชื่อ theObj ซึง่ ไม่ได้
ใช้ งานแล้ ว
gluQuadricDrawStyle(theObj, GLenum drawStyle); กาหนด
ลักษณะการวาดรูปทรงของ theObj โดย drawStyle มี 3 แบบหลักคือ
GLU_FILL วาดเป็ นรูปทรงทึบ (เป็ นค่าดีฟอลต์)
GLU_LINE วาดเป็ นรูปทรงลายเส้ น
GLU_POINT วาดรูปทรงเป็ นจุด
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
178
รูปทรงกลม (Sphere)
เป็ นการวาดรูปทรงกลมศูนย์กลางที่จดุ กาเนิด โดยมีรูปแบบของฟั งก์ชนั
ที่ใช้ ในการวาดรูปทรงกลมคือ
gluSphere (theObj, GLdouble radius, GLint slices, Glint stacks);
โดยที่ radius คือรัศมีของทรงกลม
slices คือจานวนเส้ นรอบแกน z (เทียบได้ กบั เส้ นลองจิจดู )
stacks คือจานวนชันตามแกน
้
z (เทียบได้ กบั เส้ นละติจดู )
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
179
รูปทรงกระบอก (Cylinder)
เป็ นการวาดรูปทรงกระบอกมีแกนกลางอยูบ่ นแกน z โดยฐานอยูท่ ี่ z=0
โดยมีรูปแบบของฟั งก์ชนั ที่ใช้ ในการวาดรูปทรงกระบอกคือ
gluCylinder(theObj, GLdouble baseRadius, GLdouble
topRadius, GLdouble height, GLint slices, GLint stacks);
โดยที่ baseradius คือรัศมีที่ฐาน
topradius คือรัศมีที่ยอด
height คือความสูงของทรงกระบอก
slices คือจานวนเส้ นรอบแกน z (เทียบได้ กบั เส้ นลองจิจดู )
stacks คือจานวนชันตามแกน
้
z (เทียบได้ กบั เส้ นละติจดู )
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
180
รูปแผ่ นจาน (Disk)
เป็ นการวาดแผ่นจานบนระนาบ z=0 โดยมีรูปแบบของฟั งก์ชนั ที่ใช้ ใน
การวาดรูปแผ่นจานคือ
gluDisk(theObj, GLdouble innerRadius, GLdouble outerRadius,
Glint slices, Glint loops);
โดยที่ innerradius คือรัศมีวงใน
outerradius คือรัศมีวงนอก
slices คือจานวนเส้ นตรงที่มาต่อกันเป็ นวงกลม
loops คือจานวนวงแหวน ด้ าน +z ถือเป็ นด้ านบนของแผ่นจาน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
181
รูปส่ วนของแผ่ นจาน (Partial Disk)
เป็ นการวาดส่วนของแผ่นจานบนระนาบ z=0 โดยรูปแบบของฟั งก์ชนั ที่
ใช้ ในการวาดรูปแผ่นจานคือ
gluPartialDisk(theObj, GLdouble innerRadius, GLdouble
outerRadius, GLint slices, GLint loops, GLdouble startAngle,
GLdouble sweepAngle );
โดยที่ startAngle คือมุมเริ่มต้ นที่เริ่มกวาด (เป็ นองศา)
sweepAngle คือมุมที่กวาดไป (เป็ นองศา)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
182
รูปทรงกลม (Sphere)
หมายเหตุ
- glRotatef(180, 0.0, 1.0, 1.0);
- gluSphere(theObj, 40.0, 50, 20);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
183
รูปทรงกระบอก (Cylinder)
หมายเหตุ
- glRotatef(180, 0.0, 1.0, 1.0);
- gluCylinder(theObj, 10, 20, 40, 20, 20);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
184
รูปแผ่ นจาน (Disk)
หมายเหตุ
- glRotatef(0, 0.0, 1.0, 1.0);
- gluDisk(theObj, 10, 40, 20, 10);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
185
รูปส่ วนของแผ่ นจาน (Partial Disk)
หมายเหตุ
- glRotatef(0, 0.0, 1.0, 1.0);
- gluPartialDisk(theObj, 10, 40, 20, 10,
0, 270)
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
186
รูปทรงสาเร็จรูปใน GLUT
GLUT (OpenGL Utility Toolkit) เตรี ยมฟั งก์ชนั ในการสร้ างรูปทรง
สาเร็จรูปขึ ้นมาเพิ่มเติมอีกจานวนหนึง่ นอกเหนือจากรู ปทรงสาเร็จรูป
ใน GLU ฟั งก์ชนั เหล่านี ้สามารถเรี ยกใช้ งานได้ ทนั ทีโดยไม่ต้องประกาศ
ตัวแปรเป็ นออปเจ็กต์เหมือน GLU (เพียง include ไฟล์ glut .h ก่อน
เท่านัน)
้ รูปทรงสาเร็จรูปดังกล่าว ได้ แก่
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
187
รูปทรงสาเร็จรูปใน GLUT
glutSolidSphere( ) / glutWireSphere() : รูปทรงกลมทึบ / โปร่ง
glutSolidCube ( ) / glutWireCube ( ) : รูปลูกบาศก์
glutSolidCone ( ) / glutWireCone ( ) : รูปกรวย
glutSolidTorus ( ) / glutWireTorus ( ) : รูปโดนัท
glutSolidDodecahedron ( ) / glutWireDodecahedron ( ) : รูปสิบสอง
เหลี่ยมทึบ / โปร่ง
glutSolidOctahedron ( ) / glutWireOctahedron ( ) : รูปแปดเหลี่ยม
glutSolidTetrahedron ( ) / glutWireTetrahedron ( ) : รูปสี่เหลี่ยม
glutSolidIcosahedron ( ) / glutWireIcosahedron ( ) : รูปยี่สบิ เหลี่ยม
glutSolidTeapot ( ) / glutWireTeapot ( ) : รูปกาน ้าชา
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
188
รูปทรงกลม (Sphere)
เป็ นการวาดรูปทรงกลมศูนย์กลางที่จดุ กาเนิด โดยมีรูปแบบของฟั งก์ชนั
ที่ใช้ ในการวาดรูปทรงกลมคือ
glutSolidSphere (GLdouble radius, GLint slices, GLint stacks);
glutWireSphere (GLdouble radius, GLint slices, GLint stacks);
โดยที่ radius คือรัศมีของทรงกลม
slices คือจานวนเส้ นรอบแกน z (เทียบได้ กบั เส้ นลองจิจดู )
stacks คือจานวนชันตามแกน
้
z (เทียบได้ กบั เส้ นละติจดู )
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
189
รูปลูกบาศก์ (Cube)
เป็ นการวาดรูปลูกบาศก์ศนู ย์กลางที่จดุ กาเนิด โดยมีรูปแบบของ
ฟั งก์ชนั ที่ใช้ ในการวาดรูปลูกบาศก์คือ
glutSolidCube (GLdouble size);
glutWireCube (GLdouble size);
โดยที่ size คือขนาดของแต่ด้าน
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
190
รูปกรวย (Cone)
เป็ นการวาดรูปกรวยบนระนาบ z=0 โดยมีรูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidCone (GLdouble base, GLdouble height, GLint slices,
GLint stacks);
glutWireCone (GLdouble base, GLdouble height, GLint slices,
GLint stacks);
โดยที่ base คือรัศมีของฐานกรวย
height คือความสูงของกรวย
slices คือจานวนเส้ นรอบแกน z (เทียบได้ กบั เส้ นลองจิจดู )
stacks คือจานวนชันตามแกน
้
z (เทียบได้ กบั เส้ นละติจดู )
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
191
รูปโดนัท (Torus)
เป็ นการวาดรูปโดนัทจุดศูนย์กลางที่จดุ กาเนิดไปตามแกน z โดยมี
รูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidTorus (GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings);
glutWireTorus (GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings);
โดยที่ innerRadius คือรัศมีวงในของโดนัท
outerRadius คือรัศมีวงนอกของโดนัท
nsides คือจานวนด้ านของแต่ละวง
rings คือจานวนวงของโดนัท
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
192
รูปสิบสองเหลี่ยม (Dodecahedron)
เป็ นการวาดรูปสิบสองเหลี่ยมจุดศูนย์กลางที่จดุ กาเนิดรัศมี 3 โดยมี
รูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidDodecahedron ( );
glutWireDodecahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
193
รูปแปดเหลี่ยม (Octahedron)
เป็ นการวาดรูปแปดเหลี่ยมจุดศูนย์กลางที่จดุ กาเนิดรัศมี 1.0 โดยมี
รูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidOctahedron ( );
glutWireOctahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
194
รูปสี่เหลี่ยม (Tetrahedron)
เป็ นการวาดรูปสี่เหลี่ยมจุดศูนย์กลางที่จดุ กาเนิดรัศมี 3 โดยมีรูปแบบ
ของฟั งก์ชนั ที่ใช้ คือ
glutSolidTetrahedron ( );
glutWireTetrahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
195
รูปยี่สิบเหลี่ยม (Icosahedron)
เป็ นการวาดรูปยี่สบิ เหลี่ยมจุดศูนย์กลางที่จดุ กาเนิดรัศมี 1.0 โดยมี
รูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidIcosahedron ( );
glutWireIcosahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
196
รูปกานา้ ชา (Teapot)
เป็ นการวาดรูปกาน ้าชาที่สามารถกาหนดพื ้นผิวได้ ด้วยคาสัง่ OpenGL
โดยมีรูปแบบของฟั งก์ชนั ที่ใช้ คือ
glutSolidTeapot (GLdouble size);
glutWireTeapot (GLdouble size);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
197
รูปทรงกลม (Sphere)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (90.0, 0.0, 1.0, 1.0);
- glutWireSphere (40, 50, 20);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
198
รูปลูกบาศก์ (Cube)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (90.0, 0.0, 1.0, 1.0);
- glutWireCube (40);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
199
รูปกรวย (Cone)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (90.0, 0.0, 1.0, 1.0);
- glutWireCone (20, 40, 10, 8);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
200
รูปโดนัท (Torus)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (45.0, 0.0, 1.0, 1.0);
- glutWireTorus (5, 20, 10, 10);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
201
รูปสิบสองเหลี่ยม (Dodecahedron)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (15, 1.0, 1.0, 1.0);
- glScalef (20, 10, 20);
- glutWireDodecahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
202
รูปแปดเหลี่ยม (Octahedron)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (15.0, 1.0, 1.0, 1.0);
- glScalef (20, 20, 20);
- glutWireOctahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
203
รูปสี่เหลี่ยม (Tetrahedron)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (45.0, 1.0, 1.0, 1.0);
- glScalef (20, 20, 30);
- glutWireTetrahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
204
รูปยี่สิบเหลี่ยม (Icosahedron)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (55.0, 1.0, 1.0, 1.0);
- glScalef (20, 20, 30);
- glutWireIcosahedron ( );
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
205
รูปกานา้ ชา (Teapot)
ตัวอย่าง ex08_07.cpp ใช้
- glRotatef (0.0, 0.0, 1.0, 1.0);
- glutWireTeapot (25);
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
206
สรุ ปฟั งก์ ชันการมองและการขริบภาพ 3 มิตขิ อง OpenGL
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
207
สรุ ปฟั งก์ ชันการมองและการขริบภาพ 3 มิตขิ อง OpenGL
คอมพิวเตอร์ กราฟิ กส์ ใช้ OpenGL (Computer Graphics using OpenGL)
208