What I found when testing is, that whilte the NDC_dir.x and NDC_dir.y seem to be reasonable, the NDC_dir.w and NDC_dir.z are always almost equal. Therefor when dividing by "w" the z-Value is always about 1. I dont think this is how it should be right? (Same for NDC_pos).

Actually yes, that is how it should be. If your input is formed as `{x,y,z,0}`

then it will be interpreted as a point infinitely far in the direction of {x,y,z}. Therefore the depth component should always be most distant, if visible at all. By the way a point infinitely far away is still translation invariant

But you should know that a point infinitely far away is probably not what you want within NDC.

A vector in 3D space is invariant to translation, it just stays the same vector, because a vector has only a direction, not a position. This is not really possible in the distorted NDC.

If you want to transform a vector, you should better transform two points, and then take the difference in NDC again. But you should know that your result then depends on the position.