การดูและการตัด

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

การตัดจุด

การตัดจุดจากหน้าต่างที่กำหนดนั้นง่ายมาก พิจารณารูปต่อไปนี้โดยที่สี่เหลี่ยมผืนผ้าระบุหน้าต่าง การตัดจุดบอกเราว่าจุดที่กำหนด (X, Y) อยู่ในหน้าต่างที่กำหนดหรือไม่ และตัดสินใจว่าเราจะใช้พิกัดต่ำสุดและสูงสุดของหน้าต่างหรือไม่

พิกัด X ของจุดที่กำหนดอยู่ภายในหน้าต่างถ้า X อยู่ระหว่าง Wx1 ≤ X ≤ Wx2 ในทำนองเดียวกันพิกัด Y ของจุดที่กำหนดอยู่ภายในหน้าต่างถ้า Y อยู่ระหว่าง Wy1 ≤ Y ≤ Wy2

การตัดเส้น

แนวคิดของการตัดเส้นเหมือนกับการตัดจุด ในการตัดบรรทัดเราจะตัดส่วนของเส้นที่อยู่นอกหน้าต่างและเก็บเฉพาะส่วนที่อยู่ในหน้าต่างเท่านั้น

คลิปสายโคเฮน - ซัทเทอร์แลนด์

อัลกอริทึมนี้ใช้หน้าต่างการตัดตามที่แสดงในรูปต่อไปนี้ พิกัดขั้นต่ำสำหรับขอบเขตการตัดคือ $ (XW_ {min,} YW_ {min}) $ และพิกัดสูงสุดสำหรับขอบเขตการตัดคือ $ (XW_ {max,} YW_ {max}) $

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

มีความเป็นไปได้ 3 สาย -

  • เส้นสามารถอยู่ภายในหน้าต่างได้อย่างสมบูรณ์ (ควรยอมรับบรรทัดนี้)

  • เส้นสามารถอยู่นอกหน้าต่างได้อย่างสมบูรณ์ (บรรทัดนี้จะถูกลบออกจากพื้นที่โดยสิ้นเชิง)

  • เส้นสามารถอยู่ภายในหน้าต่างได้บางส่วน (เราจะพบจุดตัดกันและวาดเฉพาะส่วนของเส้นที่อยู่ในพื้นที่)

อัลกอริทึม

Step 1 - กำหนดรหัสภูมิภาคสำหรับแต่ละจุดสิ้นสุด

Step 2 - หากปลายทางทั้งสองมีรหัสภูมิภาค 0000 จากนั้นยอมรับบรรทัดนี้

Step 3 - อื่น ๆ ดำเนินการตามตรรกะ ANDการดำเนินการสำหรับรหัสภูมิภาคทั้งสอง

Step 3.1 - หากผลลัพธ์ไม่เป็น 0000, จากนั้นปฏิเสธสาย

Step 3.2 - อย่างอื่นคุณต้องตัด

Step 3.2.1 - เลือกจุดสิ้นสุดของเส้นที่อยู่นอกหน้าต่าง

Step 3.2.2 - ค้นหาจุดตัดที่ขอบหน้าต่าง (ตามรหัสภูมิภาค)

Step 3.2.3 - แทนที่จุดสิ้นสุดด้วยจุดตัดกันและอัปเดตรหัสภูมิภาค

Step 3.2.4 - ทำซ้ำขั้นตอนที่ 2 จนกว่าเราจะพบเส้นที่ถูกตัดออกว่าได้รับการยอมรับเล็กน้อยหรือปฏิเสธเล็กน้อย

Step 4 - ทำซ้ำขั้นตอนที่ 1 สำหรับบรรทัดอื่น ๆ

Cyrus-Beck Line Clipping Algorithm

อัลกอริทึมนี้มีประสิทธิภาพสูงกว่าอัลกอริทึม Cohen-Sutherland ใช้การแสดงเส้นพาราเมตริกและผลิตภัณฑ์ดอทอย่างง่าย

สมการเชิงพาราเมตริกของเส้นคือ -

P0P1:P(t) = P0 + t(P1 - P0)

ให้ N ฉันเป็นคนปกติออกไปด้านนอกขอบ E ฉัน ตอนนี้เลือกจุดใดก็ได้ตามอำเภอใจ P Eiบนขอบ E iจากนั้นผลิตภัณฑ์ดอท N i [P (t) - P Ei ] กำหนดว่าจุด P (t) อยู่“ ภายในขอบคลิป” หรือ“ นอก” ขอบคลิปหรือ "เปิด" ขอบคลิป

จุด P (t) อยู่ข้างในถ้า N i . [P (t) - P Ei ] <0

จุด P (t) อยู่นอกถ้า N i [P (t) - P Ei ]> 0

จุด P (t) อยู่ที่ขอบถ้า N i . [P (t) - P Ei ] = 0 (จุดตัด)

N ฉัน . [P (t) - P Ei ] = 0

N i . [P 0 + t (P 1 - P 0 ) - P Ei ] = 0 (การแทนที่ P (t) ด้วย P 0 + t (P 1 - P 0 ))

N i . [P 0 - P Ei ] + N i .t [P 1 - P 0 ] = 0

N i . [P 0 - P Ei ] + N i ∙ tD = 0 (แทน D สำหรับ [P 1 - P 0 ])

N i . [P 0 - P Ei ] = - N i ∙ tD

สมการของ t กลายเป็น

$$ t = \ tfrac {N_ {i}. [P_ {o} - P_ {Ei}]} {{- N_ {i} .D}} $$

ใช้ได้กับเงื่อนไขต่อไปนี้ -

  • N i ≠ 0 (ข้อผิดพลาดไม่สามารถเกิดขึ้นได้)
  • D ≠ 0 (P 1 ≠ P 0 )
  • N i ∙ D ≠ 0 (P 0 P 1ไม่ขนานกับ E i )

รูปหลายเหลี่ยม (Sutherland Hodgman Algorithm)

นอกจากนี้ยังสามารถตัดรูปหลายเหลี่ยมได้โดยระบุหน้าต่างการตัด อัลกอริทึมการตัดรูปหลายเหลี่ยมของ Sutherland Hodgeman ใช้สำหรับการตัดรูปหลายเหลี่ยม ในอัลกอริทึมนี้จุดยอดทั้งหมดของรูปหลายเหลี่ยมจะถูกตัดกับขอบแต่ละด้านของหน้าต่างการตัด

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

ในขณะที่ประมวลผลขอบของรูปหลายเหลี่ยมที่มีหน้าต่างการตัดจะพบจุดตัดหากขอบไม่สมบูรณ์ภายในหน้าต่างการตัดและขอบบางส่วนจากจุดตัดไปยังขอบด้านนอกจะถูกตัดออก ภาพต่อไปนี้แสดงคลิปขอบซ้ายขวาบนและล่าง -

การตัดข้อความ

มีการใช้เทคนิคต่าง ๆ ในการตัดข้อความในคอมพิวเตอร์กราฟิก ขึ้นอยู่กับวิธีการที่ใช้ในการสร้างตัวละครและข้อกำหนดของแอปพลิเคชันเฉพาะ มีสามวิธีในการตัดข้อความตามรายการด้านล่าง -

  • การตัดสตริงทั้งหมดหรือไม่มีเลย
  • การตัดอักขระทั้งหมดหรือไม่มีเลย
  • การตัดข้อความ

รูปต่อไปนี้แสดงการตัดสตริงทั้งหมดหรือไม่มีเลย -

ในวิธีการตัดสตริงทั้งหมดหรือไม่มีเลยไม่ว่าเราจะเก็บสตริงทั้งหมดหรือเราปฏิเสธสตริงทั้งหมดตามหน้าต่างการตัด ดังที่แสดงในรูปด้านบน STRING2 จะอยู่ภายในหน้าต่างการตัดดังนั้นเราจึงเก็บไว้และ STRING1 อยู่ในหน้าต่างเพียงบางส่วนเท่านั้นเราจึงปฏิเสธ

รูปต่อไปนี้แสดงการตัดอักขระทั้งหมดหรือไม่มีเลย -

วิธีการตัดนี้ขึ้นอยู่กับอักขระแทนที่จะเป็นสตริงทั้งหมด ในวิธีนี้หากสตริงทั้งหมดอยู่ในหน้าต่างการคลิปเราจะเก็บไว้ หากอยู่นอกหน้าต่างบางส่วน -

  • คุณปฏิเสธเฉพาะส่วนของสตริงที่อยู่ภายนอก

  • หากอักขระอยู่บนขอบเขตของหน้าต่างคลิปเราจะทิ้งอักขระนั้นทั้งหมดและเก็บสตริงส่วนที่เหลือไว้

รูปต่อไปนี้แสดงการตัดข้อความ -

วิธีการตัดนี้ขึ้นอยู่กับอักขระแทนที่จะเป็นสตริงทั้งหมด ในวิธีนี้หากสตริงทั้งหมดอยู่ในหน้าต่างการคลิปเราจะเก็บไว้ หากอยู่นอกหน้าต่างบางส่วน

  • คุณปฏิเสธเฉพาะส่วนของสตริงที่อยู่ภายนอก

  • หากอักขระอยู่ในขอบเขตของหน้าต่างการตัดเราจะทิ้งเฉพาะส่วนของอักขระที่อยู่นอกหน้าต่างการตัด

กราฟิกบิตแมป

บิตแมปคือชุดของพิกเซลที่อธิบายรูปภาพ เป็นคอมพิวเตอร์กราฟิกประเภทหนึ่งที่คอมพิวเตอร์ใช้ในการจัดเก็บและแสดงรูปภาพ ในกราฟิกประเภทนี้รูปภาพจะถูกจัดเก็บทีละนิดและด้วยเหตุนี้จึงมีชื่อว่ากราฟิก Bit-map เพื่อความเข้าใจที่ดีขึ้นให้เราพิจารณาตัวอย่างต่อไปนี้ที่เราวาดหน้ายิ้มโดยใช้กราฟิกบิตแมป

ตอนนี้เราจะมาดูกันว่าใบหน้าที่ยิ้มนี้ถูกจัดเก็บทีละนิดในคอมพิวเตอร์กราฟิกอย่างไร

จากการสังเกตใบหน้าสไมลี่ดั้งเดิมอย่างใกล้ชิดเราจะเห็นว่ามีเส้นสีน้ำเงินสองเส้นซึ่งแสดงเป็น B1, B2 และ E1, E2 ในรูปด้านบน

ในทำนองเดียวกันสไมลี่จะแสดงโดยใช้บิตผสมของ A4, B5, C6, D6, E5 และ F4 ตามลำดับ

ข้อเสียเปรียบหลักของกราฟิกบิตแมปคือ -

  • เราไม่สามารถปรับขนาดภาพบิตแมปได้ หากคุณพยายามปรับขนาดพิกเซลจะเบลอ

  • บิตแมปสีอาจมีขนาดใหญ่มาก