Próbuję zbudować silnik wokselowy i zrobić to, muszę stworzyć setki tysięcy wokseli, a ja miałem nadzieję, żebym mógł użyć instancji renderowania. Jednak w sprawie renderowania kształt jest całkowicie ...

-3
octopirate 15 marzec 2021, 02:38

1 odpowiedź

Najlepsza odpowiedź

Ostatnim razem, użyłeś geometrii także jako macierzy transformacji. Tym razem używasz macierzy transformacji również geometrii.

Tutaj wypełniasz VBO za pomocą danych wierzchołków:

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);

Teraz skonfigurowałeś swoją pozycję Pattribute, aby źródło danych z tego VBO, tak daleko, więc dobrze:

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(vec3), (void*)0);

Teraz skonfigurujesz atrybuty instancji 3 do 7, aby również źródłować dane wierzchołkowe z VIBO:

// set attribute pointers for matrix (4 times vec4)
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (void*)0);
[...]

To już nie ma sensu, ale tylko pogarsza:

GLABUFFERDATA (GL_ARRAY_Buffer, Voxelnum * sizeof (MAT4), & Modelmatrices [0], GL_STATIC_DRAW);

Teraz masz całkowicie całkowicie Dane geometrii za pomocą macierzy transformacji, rzeczywista geometria twojego sześcianu jest stracona . Twój atrybut położenia nadal wskazuje na VBO, więc interpretuje matryce jako geometrię.

W schemacie, którego używasz, potrzebujesz dwa odrębne VBO, jeden dla danych geomerty, a jeden dla matryc transformacji per-oinstance . (Można oczywiście przechowywać zarówno dane w jednym VBO, ale niż trzeba sobie poradzić ze przechowywaniem obu części bez nadpisywania siebie nawzajem, a dzięki dostarczaniu odpowiednich przesunięć, więc ignorujmy tę opcję tutaj).

Kiedy piszę (podkreślenie dodane przeze mnie teraz):

Musisz przenieść konfigurację Atrybut dla atrybutu instancji z Voxel::generateElement() i do Chunk::Chunk(), więc możesz Powiedz mu, aby użyć tego VBO jako źródła dla matryc.

Miałem dokładnie to znaczyć. Musisz skonfigurować instancjonowane atrybuty 3 do 7 - i tylko Te - aby Źródło Model Matrix VBO i pozostawić atrybut położenia do źródła z geometrii VBO, gdzie początkowo był.

0
derhass 15 marzec 2021, 02:05