Saya perlu menggambar kontur di sekitar objek 2d dalam ruang 3d. Saya mencoba menggambar garis di sekitar objek (+ poin untuk mengisi celah), tetapi karena lebar garis, beberapa bagian darinya (~ 50%) menutupi objek. Saya mencoba menggunakan penyangga stensil, untuk menghilangkan masalah ini, tetapi saya mendapatkan sth seperti ini (kontur berwarna hijau):
http://goo.gl/OI5uc (maaf saya tidak dapat mengirim gambar, karena reputasi saya)
Anda dapat melihat (di mana panah menunjuk), bahwa beberapa bagian garis berada di belakang objek, dan beberapa di atas. Ini berubah ketika saya memindahkan kamera, tetapi selalu ada beberapa bagian, yang menutupinya. Berikut adalah kode, yang saya gunakan untuk menggambar objek:
glColorMask(1,1,1,1);
std::list<CObjectOnScene*>::iterator objIter=ptr->objects.begin(),objEnd=ptr->objects.end();
int countStencilBit=1;
while(objIter!=objEnd)
{
glColorMask(1,1,1,1);
glStencilFunc(GL_ALWAYS,countStencilBit,countStencilBit);
glStencilOp(GL_REPLACE,GL_KEEP,GL_REPLACE );
(*objIter)->DrawYourVertices();
glStencilFunc(GL_NOTEQUAL,countStencilBit,countStencilBit);
glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
(*objIter)->DrawYourBorder();
++objIter;
++countStencilBit;
}
Saya sudah mencoba berbagai pengaturan buffer stensil, tetapi saya selalu mendapatkan sth seperti itu. Inilah pertanyaannya: 1. Apakah saya salah mengatur penyangga stensil?
2. Apakah ada cara sederhana lain untuk membuat kontur pada objek seperti itu?
Terima kasih sebelumnya.
EDIT:
1. Saya tidak memiliki objek normal.
2. Objek bisa cekung.
3. Saya tidak bisa menggunakan shader (lihat alasannya di bawah).
Jawaban:
Untuk tambahan eye-candy, cobalah menggambar pass kontur ke target render terpisah dan menerapkan blur kecil, lalu gabungkan tekstur ini dengan adegan terakhir Anda menggunakan nilai Z yang sesuai.
sumber
Saya akan melakukan ini seperti itu:
Mengurutkan objek dalam urutan depan-belakang (jarak dari kamera)
Gambar batas objek (sebagai garis dan titik) dengan dinonaktifkan
GL_DEPTH_TEST
Draw objek dengan diaktifkan
GL_DEPTH_TEST
Lakukan dua langkah terakhir untuk setiap objek
Saya akan mencoba melakukan ini seperti itu, tetapi jika ada yang punya ide solusi yang lebih baik untuk masalah ini (MIND CONCAVE OBJECTS, TOLONG) - jangan ragu untuk berbagi dengan kami.
PS. Saya tidak sepenuhnya puas dengan kondisi OpenGL yang mengubah solusi sehingga seringkali dapat berbahaya. Tetapi jika tidak ada yang bisa membantu saya dengan pengaturan buffer stensil, saya kira itu satu-satunya cara bagi saya.
sumber