Dalam senario anda, di mana anda mempunyai format fail tersuai dengan bucu, indeks bucu dan normal dengan indeks berasingan, anda akan menghadapi cabaran yang tidak sejajar dengan model puncak OpenGL, yang menggunakan satu indeks penimbal.
Penyelesaian terletak pada penciptaan puncak OpenGL untuk setiap gabungan unik indeks puncak dan indeks biasa. Menggunakan struktur data seperti peta STL boleh memudahkan proses ini.
Memandangkan tatasusunan anda inVertices dan inNormals, tempat bucu disimpan dalam inVertices[vertexIdx] dan normal dalam inNormals[normalIdx], kod pseudo berikut menggariskan pendekatan:
nextCombinedIdx = 0 indexMap = empty foreach triangle in input file: foreach corner of triangle: read vertexIdx and normalIdx if indexMap.contains((vertexIdx, normalIdx)): combinedIdx = indexMap.get((vertexIdx, normalIdx)) else: combinedIdx = nextCombinedIdx indexMap.add((vertexIdx, normalIdx), combinedIdx) nextCombinedIdx = nextCombinedIdx + 1 combinedVertices.add(inVertices[vertexIdx], inNormals[normalIdx]) combinedIndices.add(combinedIdx)
Proses ini memastikan bahawa setiap segi tiga sudut diwakili oleh puncak OpenGL yang unik, menggabungkan kedua-dua bucu dan maklumat biasa. Dengan menggunakan struktur data seperti peta, anda boleh dengan cekap memetakan pasangan vertex-normal kepada indeks OpenGL yang sepadan dengannya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengatasi Had Penampan Indeks Tunggal OpenGL Apabila Menggunakan Pucuk Berasingan dan Indeks Normal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!