当我生成一个巨大的13k +瓷砖阵列时,我想将其作为纹理渲染到屏幕上,它会崩溃,我不知道为什么,这是造成问题的方法
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;
}
所以如果你可以请求帮助:D 我用来渲染游戏的引擎是lwjgl 2,使用opengl 如果需要,我可以提供更多代码
答案 0 :(得分:0)
根据您提供的内容,问题可能来自多方面。 @javec是正确的,因为每个对象加载一次纹理会大大降低性能。您应该加载单个单元并在整个列表中分发其单个单元ID。
此外,根据您提供的内容,不清楚您是否在此处单独为每个磁贴生成缓冲区。如果是这样,您应该生成一个缓冲区并以相同的方式共享它。
根据您使用这些图块的计划,您可以考虑使用其他方法。如果切片作为地形连接,您可以始终适当地缩放网格并使用类似
的方式平铺纹理glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);