Cara menemukan garis kontur untuk Algoritma Penghapusan Garis Tersembunyi Appel


10

Untuk bersenang-senang saya mencoba membuat penampil bingkai kawat untuk DCPU-16 . Saya mengerti bagaimana melakukan semuanya kecuali bagaimana menyembunyikan garis-garis yang disembunyikan dalam bingkai kawat. Semua pertanyaan di sini pada SO semuanya menganggap Anda memiliki akses ke OpenGL, sayangnya saya tidak memiliki akses ke hal seperti itu untuk DCPU-16 (atau segala jenis akselerasi perangkat keras).

Saya menemukan deskripsi algoritma Appel yang cukup bagus di Google Books . Namun ada satu masalah yang membuat saya kesulitan mencari tahu.

Appel mendefinisikan garis kontur sebagai tepi yang terbagi oleh poligon yang menghadap ke depan dan yang menghadap ke belakang, atau tepi yang tidak dibagi dari poligon yang menghadap ke depan yang bukan bagian dari polyhedron tertutup. Tepi yang dibagikan oleh dua poligon menghadap ke depan tidak menyebabkan perubahan visibilitas dan karenanya bukan garis kontur. Pada Gambar 8.4, tepi AB, EF, PC, GK dan CH adalah garis kontur, sedangkan tepi ED, DC dan GI tidak.

Gambar 8.4

Saya memahami aturan algoritme dan cara kerjanya setelah Anda memiliki garis kontur, namun saya tidak mengerti adalah apa yang harus saya lakukan untuk menentukan apakah suatu tepi " dibagi oleh poligon menghadap ke depan dan belakang, atau tepi yang tidak dibagi dari poligon menghadap ke depan yang bukan bagian dari polihedron tertutup "dari sudut pandang kode. Saya dapat melihat bentuk dan saya bisa tahu garis apa yang merupakan garis kontur di kepala saya, tetapi saya tidak memiliki petunjuk tentang cara mentransfer "pemahaman" itu ke algoritma berkode.


Memperbarui

Saya telah membuat beberapa kemajuan dalam menentukan garis kontur. Saya menemukan ini dua catatan kuliah dari University of Buffalo kelas pada komputer grafis.

masukkan deskripsi gambar di sini

Pertimbangkan ujung-ujungnya. Ini termasuk dalam tiga kategori.

  1. Tepi bergabung dengan dua wajah yang tak terlihat itu sendiri tidak terlihat Ini akan dihapus dari daftar dan diabaikan.
  2. Tepi yang bergabung dengan dua wajah yang berpotensi terlihat disebut 'tepi material' dan akan membutuhkan pemrosesan lebih lanjut.
  3. Tepi bergabung dengan wajah yang berpotensi terlihat dan wajah yang tidak terlihat adalah kasus khusus dari 'tepi material' dan juga disebut 'tepi kontur'.

Dengan menggunakan dua informasi di atas saya dapat lebih dekat untuk dapat menulis ini sebagai kode, tetapi saya masih memiliki jalan panjang.



1
Periksa jawaban ini untuk menghitung normal segitiga. Produk titik dari vektor normal dengan vektor garis pandang menentukan apakah segitiga menghadap ke depan.

Jawaban:


3

Agar aturan "-facing" dipegang, Anda harus memastikan bahwa semua wajah berorientasi dengan benar. Misalnya, gunakan aturan tangan kanan, yang berarti bahwa simpul wajah harus diberi nomor sedemikian rupa sehingga rotasi positif pada bidang wajah sesuai dengan titik normal di luar polyhedron. (Mengerti?) Atau lebih sederhananya, setiap wajah harus datang dengan penampilan luarnya yang normal.

Menggantung wajah, yaitu tidak termasuk polyhedron tertutup dapat dilihat sebagai memiliki orientasi yang tidak ditentukan.

Sekarang menghitung bagian-bagian tepi yang disembunyikan oleh poligon kontur adalah hidangan utama. Masalah ini sangat dekat dengan memotong segmen garis dengan jendela poligon dalam 2D. Pertama pertimbangkan garis dukungan dari segmen garis dan temukan persimpangan dengan poligon. Dengan menggunakan aturan paritas, Anda dapat dengan mudah menentukan bagian di dalam dan di luar poligon.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.