Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengendalikan Vertex Tidak Padan dan Indeks Normal dalam Penampan Indeks OpenGL?
Penimbal Indeks OpenGL: Menangani Indeks Berbeza
Apabila mengimport data mesh tersuai daripada perisian pihak ketiga seperti 3ds Max, anda mungkin menghadapi percanggahan antara puncak dan indeks normal. Memandangkan OpenGL menggunakan penimbal indeks tunggal untuk kedua-dua bucu dan normal, ini menimbulkan cabaran.
Penyelesaian 1: Gabungkan Data Puncak dan Normal
Satu pendekatan ialah mencipta penimbal bucu gabungan yang mengandungi kedua-dua bucu dan data normal. Ini memerlukan mengenal pasti pasangan unik (indeks puncak, indeks biasa) dan mencipta bucu baharu untuk setiap pasangan.
Menggunakan peta STL, buat kunci untuk setiap pasangan (indeks puncak, indeks biasa). Lelaran di atas segi tiga, dapatkan pasangan (indeks puncak, indeks biasa) di setiap sudut dan semak sama ada terdapat entri sedia ada dalam peta. Jika tidak, buat bucu baharu dengan bucu yang sepadan dan koordinat normal dalam tatasusunan combinedVertices dan kemas kini peta. Akhir sekali, tambahkan indeks gabungan untuk setiap bucu pada tatasusunan indeks gabungan.
Contoh Kod Pseudo:
nextCombinedIdx = 0 indexMap = empty for triangle in input file: for corner in triangle: vertexIdx = ... normalIdx = ... if key(vertexIdx, normalIdx) in indexMap: combinedIdx = indexMap[key(vertexIdx, normalIdx)] else: combinedIdx = nextCombinedIdx indexMap[key(vertexIdx, normalIdx)] = combinedIdx nextCombinedIdx = nextCombinedIdx + 1 combinedVertices[combinedIdx] = inVertices[vertexIdx], inNormals[normalIdx] combinedIndices[combinedIdx] = combinedIdx
Penyelesaian 2: Isih Data
Sebagai alternatif, anda boleh mengisih bucu/data normal untuk menjadikannya serasi dengan glDrawArrays. Walau bagaimanapun, ini boleh menjadi masalah jika anda mempunyai bucu pendua.
Anda perlu membuat pemetaan daripada indeks bucu asal kepada indeks diisih baharunya. Apabila menemui bucu pendua, tetapkan indeks rakan sejawatannya yang dilihat sebelum ini. Walau bagaimanapun, pendekatan ini mungkin memerlukan pemprosesan dan penstrukturan data yang meluas.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Vertex Tidak Padan dan Indeks Normal dalam Penampan Indeks OpenGL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!