a) You may use a single cube in shared memory if you prefer or go ahead with storing just shared edges in the shared memory area. Both are OK. b) 3d face correspondance: In the 2D view port the faces are positioned as follows 1 2 3 4 5 6 The origin [0][0] is always the top-left corner in the 2D view the first coordinate [this one][0] walks along x (horizontal). In the 3D view here is a bad ascii drawing that: a) proves I can't draw in ascii b) shows you the correspondance of the faces to the 3d cube The origin for each face is marked by an 'O->' with the arrow pointing in the X direction (Y is obviously the other direction) /----------------------------------- /| (back) <-O/ | / | #3 / | / | / | / | #5 (TOP) / | /O-> | / | ------------------------------------ | |O-> |O-> | | |#2 | | | | | | | | | | | | | | | | | #1 | | | | | | | | | | | | / | / | / | / | / | / | / | / |/O-> (bottom) #6 |/ ------------------------------------- The face on the left is #4. Its origin is in the Top corner that touches face #3 (the back face). The X axis points towards face #1. To help clarify: 1 2 3 4 encircle the cube, 1 faces you. The Origins for 1,2,3,4 are in the top left corner if you rotate the cube so that the face is pointing towards you. The top and bottom are #5, #6 respectively. If #1 faces you, the origin is on the closest edge to #1 and the X axis points to the right with Y pointing into the screen. This can all be verified by writing patterns you can recognize to the cube. Enjoy!