Power of well balanced octree

300 FPS when moves - Insane!

Small memory leak was driving me crazy; Debugging process was taking ages.. bored, frustrated and tired decided to play about with octrees depth and minimal/maximal number of elements in leaf.. Amazed by 300FPS discovered the stupid mistake of creating VBO each time the leaf is regenerated. Instant win; fix of memory leak and 10 times greater performance.

Who said that the mistakes are stupid?

Octree in Place

Step forward 🙂

Last two nights were all about Octree, however this morning last bug has been hunted down.
Now I need to write a structure of report, good luck me 😐

Oh and some metrics:

Editable Grid.. yay!

Editable grid 16x16x16

Finally, my grid is editable now.

We can edit or remove current blocks – adding new ones will be introduced after optimisation stage.
Current version supports 4 standard blocks (Blue, Green, Yellow, Brown) and 1 point light (Blue with circle in the middle).

In this iteration of “boxel engine” regenerateBuffers method updates nearest block that collides with ray fired from camera POV within worldGrid 3 dimensional table, after that, buffers that contain shadow and light powers are recalculated, at the end two openGL methods are called (for each buffer):

[cc lang=”c++”]
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer[sectorID]);
glBufferSubData(GL_ARRAY_BUFFER, 0, frame_vertices[sectorID].size()*sizeof(glm::vec3), &frame_vertices[sectorID][0][0]);
[/cc]

first, buffer is bind, and then values are updated, starting from index 0 and then updating whole buffer.
Optimisation, that I will be introducing soon, is updating only changed values that will reduce data size.
That has to be send to graphics card.

Note:

Grid 64 recalculation takes a while :S

Metrics will be added soon.