just a slight question. Please look at this piece of code from the original CBillboardSceneNode::render() method. It prepares some vectors before it makes the Billboard face the camera:
It would be the case if the upvector is always perpendicular (90 deg) to the view vector. But it isn't the case. You want the vertical vector always perpendicular to the view vector.
Imagine you're looking 45 degrees downwards. The camera upvector will still look straight upwards but the required vertical vector should look 45 degrees up.
The thing is, that the camera upvector is fixed in most cases (looking straight upwards). It's not dependend from the viewing direction.
It is like it is. And because it is like it is, things are like they are.