Gambar rangka OpenGL


18

Tidak, saya tidak mencari glPolygonMode. Saya sedang mencari metode, mungkin shader GLSL yang akan menghasilkan wireframe gaya retro mencari objek. Ada saran?

Sesuatu seperti Vector Tanks miliki.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

Lebih disukai solusinya juga bekerja pada OpenGL ES 2.0.

Setiap petunjuk dan petunjuk (selama tidak NULL) dihargai!

Jawaban:



5

Saya akan sangat merekomendasikan menggunakan tekstur, seperti kata Dave. Ini mungkin terasa menyebalkan, tetapi itu akan memberikan kinerja yang jauh lebih baik, saya pikir.

Anda dapat mencoba mencari algoritma deteksi tepi . Jika Anda membuat jerat menggunakan pewarnaan simpul dengan warna solid dan nilai alfa sedang (untuk sedikit transparansi), dan kemudian menggunakan shader deteksi tepi, itu mungkin terlihat cukup baik. Itu tidak akan sama, tetapi Anda mungkin lebih menyukainya; atau mungkin tidak.

Kalau tidak, Anda mungkin melihat solusi dua langkah, menggambar poligon transparan (sekali lagi, mengatur warna titik ke warna solid dengan nilai alfa menengah), lalu mengatur glPolygonMode (GL_LINE) dan mengubah glLineWidth sesuai keinginan (mungkin berdasarkan objek) jarak) dan menggambar poligon lagi.

Ini agak terlambat dan saya mengalami kesulitan membaca ini, tetapi diskusi forum menunjuk ke PDF ini: Single-pass Wireframe Rendering . Saya minta maaf jika itu tidak relevan.


+1: akan lebih mudah jika saya menemukan cara untuk menghasilkan tekstur. Tidak dapat menggunakan glPolygonMode karena nanti penargetan OpenGL ES (iStuff).
Kornel Kisielewicz

2

Saya tahu ini mungkin bukan yang Anda cari, tetapi sepertinya Vector Tanks hanya menggunakan model bertekstur. Teksturnya memberikan tampilan bingkai kawat, itu berjalan di iPod touch saya yang tidak mendukung shader.


Saya tahu, saya tahu, tetapi saya juga bisa menempelkan gambar Subversion, dan itu tidak menggunakan tekstur sama sekali (AFAIK)
Kornel Kisielewicz

2

Satu-satunya cara saya melihatnya dilakukan adalah dengan resolusi tinggi, sebagian besar tekstur hitam, seperti yang ada di Tron 2.0. Teksturnya hampir secara universal baik hitam pekat dengan batas tebal, berwarna, atau tekstur noise Perlin sederhana.

Mereka menerapkan beberapa post-processing sederhana untuk mencapai efek cahaya.


+1: Saya tahu artikelnya, tapi terima kasih sudah mengingatkan - ini memang artikel yang bagus (dan membantu masalah kedua yang saya punya - bersinar).
Kornel Kisielewicz

1

Anda bisa mencoba semacam fungsi jarak sederhana di pixel shader. Mungkin sesuatu seperti koordinat barycentric (menyimpan RGB yang berbeda di simpul dan rasteriser akan melakukan sebagian besar pekerjaan untuk Anda).

Kemudian shader piksel Anda akan memiliki informasi yang dibutuhkan tentang di mana pada poligon piksel saat ini - di dekat titik, dekat tepi, atau di tengah ...

Saya menduga dalam praktiknya akan lebih mudah untuk tekstur itu.


1

Bagaimana dengan ini: Ambil model Anda, dan miringkan tepi yang ingin Anda tampilkan sebagai garis besar. Warnai wajah yang dibuat dengan warna hijau buram yang cerah, sementara semua wajah tua berwarna hijau tembus gelap.

Ini tidak membutuhkan penggunaan pixel shader sama sekali. (Tidak ada tekstur, sebenarnya; hanya warna wajah.) Ini memang memerlukan beberapa model preprocessing pada bagian Anda, yang mungkin atau mungkin tidak menjadi masalah.

Anda tidak akan dapat melihat garis ketika permukaan miring tegak lurus terhadap tampilan. Jika hal ini mengganggu Anda, Anda dapat mengeluarkan sedikit permukaan miring, mewarnai ekstrusi seperti yang Anda inginkan. Anda dapat bermain-main dengan berbagai tingkat bevelling dan ekstrusi untuk membuat garis yang lebih tipis dan lebih tebal.

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.