Hello Dave,
I am not sure how helpful this may be, in OpenGL, DirectX, and Vulkan, a standard block is 3 meters (about 10 feet). All sides are drawn the same (door, window, etc). Typically, numbers and the alphabet are used for mapping. Below is an example where I use 0, 1, and 9. To make it easier, the width, height, and depth are all the same (3 meter). This also makes it easier to determine the eyes of the character which is moving around - most people are 6 feet tall - ish. 
Doors, windows, pictures would all be drawn with the same texture on four sides. With OpenGL, Vulkan, etc, the winding (counterclockwise drawing) makes it so that the outer portion of each block is visible to the user, and the inner block is transparent.
Does this help with some possible solutions for you?

//20 columns x 20 rows
//1=wall, 0=space, 9=player start position
MyRow0 = Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
MyRow1 = Array(1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow2 = Array(1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow3 = Array(1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow4 = Array(1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1)
MyRow5 = Array(1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1)
MyRow6 = Array(1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow7 = Array(1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow8 = Array(1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1)
MyRow9 = Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
MyRow10 = Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
MyRow11 = Array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
MyRow12 = Array(1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1)
MyRow13 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1)
MyRow14 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1)
MyRow15 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1)
MyRow16 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1)
MyRow17 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,9,0,1)
MyRow18 = Array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1)
MyRow19 = Array(1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)