Създадох 2D графичен двигател и създадох система за групиране за него, така че ако имам 1000 спрайта с една и съща текстура, мога да ги нарисувам с едно извикване на openGl.
Това се постига чрез поставяне в един vbo върхов масив на всички върхове на всички спрайтове с една и съща текстура.
Вместо „отпечатайте тези върхове, отпечатайте тези върхове, отпечатайте тези върхове“, аз правя „съберете всички върхове заедно, отпечатайте“, просто за да бъда много ясен. Достатъчно лесно, но сега се опитвам да постигна същото в 3D и имам голям проблем.
Проблемът е, че използвам матрица за проекция на изглед на модел, за да поставя и изобразявам моите модели, което е общият подход за изобразяване на модел в 3D пространство.
За всеки модел на екрана трябва да предам MVP матрицата на шейдъра, така че да мога да я използвам, за да трансформирам всеки връх в правилната позиция.
Ако направя трансформацията извън шейдъра, тя ще бъде изпълнена от процесора, което не е добра идея по очевидни причини.
Но проблемът е там. Трябва да предам матрицата на шейдъра, но за всеки модел матрицата е различна.
Така че не мога да направя същото, което направих с 2d спрайтове, защото смяната на униформата на шейдър изисква равенство всеки път.
Надявам се, че бях ясен, може би имате добра идея, която аз нямах или вече сте имали същия проблем. Знам със сигурност, че някъде има решение, защото в двигател като Unity можете да използвате един и същ шейдър за множество модели и да се измъкнете с едно повикване за изтегляне