Opengl 生成一个非常大的对象数组会冻结程序
当我生成一个巨大的13k+瓷砖阵列,我想将其渲染为屏幕上的纹理时,它崩溃了,我不知道为什么,这就是导致问题的方法Opengl 生成一个非常大的对象数组会冻结程序,opengl,lwjgl,Opengl,Lwjgl,当我生成一个巨大的13k+瓷砖阵列,我想将其渲染为屏幕上的纹理时,它崩溃了,我不知道为什么,这就是导致问题的方法 public ArrayList<Tile> getNewChunk(int width, int height) { int amountOfTilesY = height * 32; int amountOfTilesX = width * 32; int amountOfTiles = (amountOfTilesX + amountOfTi
public ArrayList<Tile> getNewChunk(int width, int height)
{
int amountOfTilesY = height * 32;
int amountOfTilesX = width * 32;
int amountOfTiles = (amountOfTilesX + amountOfTilesY) / 32;
ArrayList<Tile> tiles = new ArrayList<Tile>(amountOfTiles);
for(int i = 0; i < amountOfTilesX; i += 32)
{
for(int j = 0; j < amountOfTilesY; j += 32)
{
Tile tempTile = new DirtTile(i, j, "res/tile/DirtTile.png");
tiles.add(tempTile);
}
}
return tiles;
}
public ArrayList getNewChunk(int-width,int-height)
{
int amountoftlessy=高度*32;
int amountOfTilesX=宽度*32;
int amontoftiles=(amontoftilesx+amontoftilesy)/32;
ArrayList tiles=新的ArrayList(amountOfTiles);
对于(int i=0;i
所以如果你能帮忙的话:D
我用来渲染游戏的引擎是LWJGL2,使用opengl
如果需要,我可以提供更多代码根据您提供的内容,问题可能来自多个方面@javec是正确的,因为每个对象加载一次纹理会大大降低性能。您应该加载单个单元并在整个列表中分发其单个单元ID 此外,根据您提供的信息,不清楚您是否在这里分别为每个磁贴生成缓冲区。如果是这样,您应该生成一个缓冲区并以相同的方式共享它 根据你使用这些瓷砖的计划,你可以考虑一种不同的方法。如果平铺作为地形连接,则始终可以适当缩放网格,并使用以下方式平铺纹理:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
您可能只想加载DirtTile纹理一次并重新使用它,因为现在看起来每个瓷砖都要单独加载。加载13000个纹理可能需要大量的性能和内存。它在哪一行崩溃?它开始崩溃的瓷砖数量是多少?瓷砖有多大,它们是什么格式?