First - it would be nice what you’re planning to do.
Second - BSP.
A BSP tree is used when you’re trying to implement a “painters algorithm”, meaning a way to draw objects from back to front. It can also be used for spacial subdivisons of a scene for accelerating object queries (like ray-object intersections), but is mostly considered too slow for real-time applications (except when it comes to pre-processed geometry like levels).
In fact - what yo do - is dividing the scene using the triangles/planar polygons included. That means you take each triangle/polygon and make it an infinite plane (better: infinite in it’s subspace-half - read on). This divides the space of your scene in two halfes, the one left (over) and the one right (below) your plane. Which one is over and which one is not is chosen using the normal vector of your plane (dot product is your friend).
You now create a binary tree of your scene using this left/right information.
The Problem with this technique is splitting. You will almost never find a plane that divides the space without hitting another triangle/polygon. In such a case you have to split the triangles intersecting the plane into two halves, so that each one lies perfectly left or right of your splitting plane.
The cool thing about this is, that you can easily decide what is behind a polygon (and thus maybe ocludded) and what is in front of a polygon (painters algorithm).
Doom (for instance) used this to become as fast as it was. I’m not sure if today’s games still use BSP creation for their levels as we now have the z-Buffer (which eliminates the need for a painters algorithm) and as collision detection, furstum culling, etc. can easily be done at similar speed with e.g. kD-trees (axis aligned BSPs), bounding volume hierarchies or similar data structures.
Hope that helps - whatever you’re planning to do.