I have a simple terrain based on a perlin noise heightmap that is about 64 times larger than what will be rendered on screen (8 times in each direction). It is currently stored in a single VBO and I was wondering what the optimal way to draw it is.
The look I am going for is a 3D version of Settlers 1, with the camera at a 45degree(ish) angle, so I am not interested in LOD mapping or anything like that at the moment, since I don’t think the view distance will warrant it.
I guess the question is really - how good is OpenGL at discarding vertices outside of the viewing frustrum?
I know that draw calls are expensive, so should I just fire the whole terrain into a single draw call and let OpenGL deal with the vertices that won’t be shown, or should I spend some CPU time calculating which sections need to be drawn and performing multiple draw calls for only the parts of the terrain I need? I’ve seen mention of glMultiDraw*(), which looks like it might be the best of both worlds, but I haven’t used it yet - should I look into this?
I also want my terrain to wrap - is it worth using the extra memory to extend the repeated terrain in the VBO, or are the extra 3 draw calls (if wrapping in both directions) not going to affect me too much if I redraw the same terrain model with a shifted model matrix? In this case the first option above would mean drawing about 256 times what is on screen
I know I am pre-optimising, since I’ve just started the project (my first in OpenGL), but I’d rather get it right from the start.