Selamat Pagi StackOverflow, saya mengalami sedikit masalah sekarang karena saya tidak bisa menemukan cara untuk membuat bagian dari tekstur secara transparan dengan openGL.
Berikut adalah pengaturan saya: Saya memiliki quad, mewakili dinding, ditutupi dengan tekstur ini (dikonversi ke PNG untuk keperluan pengunggahan). Jelas, saya ingin dinding menjadi buram, kecuali untuk panel kaca. Ada pesawat lain di belakang dinding yang seharusnya menunjukkan pemandangan. Saya ingin melihat pemandangan dari balik jendela. Setiap tekstur adalah TGA dengan saluran alfa.
"Lansekap" dirender terlebih dahulu, lalu dinding. Saya pikir itu akan cukup untuk mencapai efek ini tetapi ternyata bukan itu masalahnya. Bagian jendela yang seharusnya transparan berwarna hitam dan pemandangan hanya muncul ketika saya melewati dinding.
Saya mencoba bermain-main dengan GLBlendFunc () setelah mengaktifkannya tetapi sepertinya tidak berhasil.
Apakah saya lupa langkah penting?
Terima kasih :)
sumber
Jawaban:
Selain semua yang Anda nyatakan (tekstur dengan saluran alfa, menggambar lansekap sebelum menggambar dinding + jendela), Anda juga perlu melakukan dua hal lagi.
Pertama, Anda harus mengaktifkan fungsi blending OpenGL:
Kedua, Anda perlu memberi tahu OpenGL bagaimana cara menghitung warna-warna piksel campuran (yang oleh OpenGL disebut "fragmen"). Dalam hal ini, Anda akan baik-baik saja dengan sesuatu yang sederhana seperti ini:
Setelah blending dihidupkan, OpenGL akan menggabungkan warna pixel sesuai dengan parameter fungsi yang Anda berikan di glBlendFunc. Secara khusus, ia akan melakukan "source.color * source.alpha + destination.color * (1-source.alpha)", di mana "sumber" adalah tekstur yang sedang Anda render, dan "tujuan" adalah warna yang sudah ada dalam framebuffer (lanskap). Jadi di mana pun saluran alfa Anda berwarna putih, Anda akan mendapatkan warna dinding, dan di mana pun saluran alfa berwarna hitam, Anda akan mendapatkan warna lanskap. Jika saluran alpha berwarna abu-abu, maka Anda akan mendapatkan beberapa fade silang di antara kedua warna.
Jika jendela Anda sepenuhnya transparan maka ada cara lain untuk melakukan ini, di mana urutan di mana Anda menggambar dua poligon tidak penting, tetapi itu mulai masuk ke konsep yang lebih maju seperti ambang batas alfa. Mungkin tidak diperlukan untuk situasi Anda saat ini.
sumber