"I don't even recognize the array that you have used here;
byte dataArray[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; "
Okay, so rewrite it like the cube display then:
B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000
Same data, different number format. Lot easer to follow than:
Decimal, 1,2,4,6,16,32,64,128 - who can tell where those bits are going to end up? Hex (0x01) and Binary (B00000001) are a lot easier to visualize.
In this case, each group represents 1 column of data, and you have 8 columns representing the matrix.
B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000
column 0, column 1, column 2, column 3, column 4, column 5, column 6, column 7
As wired to the shift registers & matrix:
cccccccc
76543210
10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
So now you have this 8x8 set of data and it up to you to decide how you will fill that set up and when you will change/update it. Content, that's always the killer

We already have blink-without-delay going to determine when the display is refreshed.
Add a second one at different time interval, and shift the data in the array:
7 goes into a temporary copy, 6 goes into 7, 5 goes into 6, 4 into 5, 3 into 4, 2 into 3, 1 into 2, 0 into 1, and the temporary copy goes into 0. Now the display becomes:
1st shift 2nd shift 3rd shift
01000000 00100000 00010000
00100000 00010000 00001000
00010000 00001000 00000100
00001000 00000100 00000010
00000100 00000010 00000001
00000010 00000001 10000000
00000001 10000000 01000000
10000000 01000000 00100000
You see how the data moves right and then wraps around?
So that's one thing you can do, and then build other features from there.