Discord
Community
DARK THEME

# 3D ... +1

I couldn't resist @this_name_is_taken.
When you mentioned that you work on your next 3D engine I thought ... hmmm ... what could propably be better than 3D ...

# 4D !!!

;)

## No worries, just for fun. For the ones that don't know what they are looking at:https://en.wikipedia.org/wiki/Tesseract

`Live Long And Tinker`

## Coloured variation :):embed https://microstudio.io/TinkerSmith/tesseract2/XJDNE93P/

P.S. Beside the cube that seems to fold upwards from the bottom to the top, can you see the one that folds from right to left at the same time?

@the_4d_brain_tinker_guy AMAZING!!! I've been meaning to try out 4d for a while, but haven't got to it as of yet. How did you code it?

I noticed that the thumbnail calls it a 'tinkercube'.

By the way, does this really fit in the '3D' category? XD

LOL, was thinking the same, but didn't want to create a new 4D category ... I have the suspicion it won't be very popular :)

So let's just acknowledge it from the point onward where it has been projected into 3D space cough

The formulas are (as usual) not mine, I had them somewhere in my 'maybe someday I will do this' copy&paste collection. I will try to remember where it originally came from. The source bits I got are JS so I guess I got it either from JSfiddle, Codepen or Processing (love it).

Several examples I looked at treat it exactly the same way 3D projection is done. You just extend the matrix by one more parameters. 'w' in my example, other call it 't' or whatever they like.

Then you will have noticed this part in the code:

``````    //Projects 4D to 3D
loc[3] -= Camera.w/Camera.wFocalLength
loc[0] = -loc[0]/loc[3]*Camera.wFocalLength
loc[1] = -loc[1]/loc[3]*Camera.wFocalLength
loc[2] = -loc[2]/loc[3]*Camera.wFocalLength
``````

Looks familiar, doesn't it? So instead of mashing up X and Y with the distance Z (and FOV, camera, etc.) you now do exactly the same to X,Y & Z ... mashing them up with W (or T) instead. After that you have the 3D projected data and can continue as usual. Somewhere I saw a video where a guy morphed the 3D model of a horse into 4D ... one freaky looking horse I tell you ... (done in Rhino 3D modeller).

Uhhh, there is so much to tinker in there .... long weekend coming up ;)

## Oh, and initially I was going to call it Hypercube (-> TinkerCube), but then I liked Tesseract better (ASSEMBLE AVENGERS).

So ... in a way you could extend the whole thing now to 5D, 6D, etc ... but my brain already gets confused with the 4D one, LOL. Still trying to wrap my head around the left/right, up/down shifting of that inner cube. Sometimes my eyes can't decide which one to follow.

But in the end I believe you probably know better what is going in there than me ... I just throw stuff together, oh @that_name_will_figure_it_out ;)

Okay, I see. I've seem some of those 'infinite' dimensional projects before and... erm... always have wondered what is happening. I need to see the horse you mentioned morph into 15D!

I just wanted to note that my brain also gets confused with 4d projection as well - hence why I have been temporally displaced after staring at the cube for just a little too long. And trust me when I say that you probably know what's going on in 4d better than I do, I find the best way for me to understand something when I don't understand is to code it myself, even if I need to use a tutorial or some external help along the way. Then I try to do something different with the code myself. Once I have got it working then usually I have some idea of how the code works cough.

I also just throw 'tinker' projects together, oh @that_tinker_guy_figured_it_out - especially because I for the most part am too lazy to make a finished game (my 3d platformer is an exception of course). ;)

Same here, had a snoop around and there are so many ways of doing it. The one I picked was the simplest one, at least I think I understand a bit of it. As in, I understand the 4D matrix -> 3D matrix -> 2D matrix, but don't ask me how the final projection works, HAHA.
That's the bit you better understand @this_name_can_cast , considering what you did in your tinkers.

Take it apart, rev it up, have fun :)