Java 三维游戏几何
我有一个使用3D网格表示的简单游戏,类似于:Java 三维游戏几何,java,c++,geometry,computational-geometry,Java,C++,Geometry,Computational Geometry,我有一个使用3D网格表示的简单游戏,类似于: Blocks grid[10][10][10]; 游戏中的人物由一个点和一个视线向量表示: double x,y,z, dx,dy,dz; 我使用3个嵌套for循环绘制网格: for(...) for(...) for(...) draw(grid[i][j][k]); 明显的问题是当网格的大小增长到几百以内时,fps会急剧下降。凭直觉,我意识到: 网格中被其他块隐藏的块不需要渲染 不在人视野内的块也不需要渲染(即,位于人后面的块)
Blocks grid[10][10][10];
游戏中的人物由一个点和一个视线向量表示:
double x,y,z, dx,dy,dz;
我使用3个嵌套for循环绘制网格:
for(...) for(...) for(...)
draw(grid[i][j][k]);
明显的问题是当网格的大小增长到几百以内时,fps会急剧下降。凭直觉,我意识到:
- 网格中被其他块隐藏的块不需要渲染
- 不在人视野内的块也不需要渲染(即,位于人后面的块)
- 视锥剔除
- 背面剔除
- 基于细胞的遮挡剔除
- 基于PVS的任意几何体遮挡剔除
- 其他
- 只需绘制与透明块共享的块的面。e、 g:不要费心在两个不透明的方块之间画面——玩家永远看不到它们
- 您可能希望将可见块几何体批处理为chunklet(并将其粘贴到VBO中),并基于每个chunklet确定可见性。要准确地找出哪些块是可以看到的,可能需要比把VBO扔到gpu上接受透支更长的时间
- 整体填充可以很好地确定哪些chunklet是可见的-使用视图截锥、视图方向(如果面向+ve x方向,则不要向-ve方向整体填充)和对chunklet数据的简单分析(例如:如果chunklet的整个面不透明,则不要从该面整体填充)