Hi everyone, I wrote a simple "game" that allows me to modify a chunk of 32x32x32 blocks. It has ray picking and lighting. Here's a screenshot of what I can do with it :
(http://i.imgur.com/yTc2B34.png)
Alright, now here's my problem. My code is fairly good, I'm using vertex buffer objects, one for each block. The chunk is never really re-rendered, because each block is an individual object and can be rendered alone. The blocks are also only rendering faces that are visible, and they tell the 6 blocks (if existing) to hide a face for faster rendering.
Now, I'm only getting ~100fps with a 32x32x32 block that only contains 32x8x32 blocks really, the rest is air. Why am I getting so low fps? Anyone has proposition?
Here are the system specs :
i5 760 2.8ghz
8gb ram 1333
gtx 580 1.5gb
intel 80gb ssd
I can post parts of my code if anyone wants it to help me!
Thanks a lot!
I wouldn't say that 100 fps is at all low.
Well you know, in Minecraft I get over 800fps... there's something wrong you know...
Well played Monseigneur Phyyl.
You need to bake multiple blocks into a single graphics object, reducing the number of draw calls.
Say a "chunk" is a 32x32x32 group of blocks. What you need to do is combine their geometry into a single draw call, only drawing faces that are exposed to open air.
Quote from: CodeBunny on March 20, 2013, 14:12:03
You need to bake multiple blocks into a single graphics object, reducing the number of draw calls.
Say a "chunk" is a 32x32x32 group of blocks. What you need to do is combine their geometry into a single draw call, only drawing faces that are exposed to open air.
That.
Make sure the chunks that can't been "seen" by the camera aren't being drawn.
For each block, make sure that a face doesnt render if there is a block in front of that face. Also, instead of calling block.draw() for each block, just make the coordinates go into a mesh object (an array that holds vectors) then render that object instead.