Mam prostą grę, która używa 3D reprezentacji siatki, coś jak:3D Gra Geometria
Blocks grid[10][10][10];
Osoba w grze jest reprezentowana przez punkt i wektor widok:
double x,y,z, dx,dy,dz;
narysować siatkę z 3 zagnieżdżonej pętli:
for(...) for(...) for(...)
draw(grid[i][j][k]);
oczywistym problem polega na tym, gdy rozmiar siatki rośnie w hun dreds, fps dramatycznie spada. Z pewną intuicję, zdałem sobie sprawę, że:
- bloków, które zostały ukryte przez inne bloki w sieci nie muszą być świadczone
- bloków, które nie były w polu wizyjnym osoby również nie muszą być świadczone (np. bloki, które były za osobę)
Moje pytanie jest, biorąc pod uwagę grid[][][]
, osoby x,y,z
, a wzrok wektor dx,dy,dz
, w jaki sposób mogę dowiedzieć się, które potrzebują bloki mają być świadczone, a które don” t?
Jest to dość ogromny temat, objęty również [Wykrywaniem ukrytych powierzchni] (http : //en.wikipedia.org/wiki/Hidden_surface_determination). –
Jeśli używasz biblioteki OpenGL lub dowolnej innej biblioteki 3D, robi to automatycznie _culling_ w ostatecznym renderowaniu. – toto2
Więc jeśli używam OpenGL, to dodanie optymalizacji geometrycznej nie wpłynie na ogólną wydajność? –