# Project vertex onto plane

What I have:

• a plane given by its normal$$\ n$$ and a point on the plane$$\ p$$.
• a 3D-point$$\ v$$.
• a direction$$\ d$$.

What I need:

• the projection of$$\ v$$ along$$\ d$$ onto the plane.

How can I calculate this? Thank you!

P.S.: I need to implement that in GLSL, in case this is of any information. I would be fine with the formula so that I can work out the implementation myself, anyways. :-)

To answer your question we just need to write it as linear algebra equations and solve them. Although your question doesn't state it, I assume that $$v$$ and $$d$$ are unit vectors. Let's call the projected point $$x$$.
First, because the projected point is in the direction $$d$$, we can write: $$\vec{vx} = \lVert\vec{vx}\rVert d$$
Second, because $$p$$ and $$x$$ are on the plane and $$n$$ is the plane normal, we can write: $$\vec{vx}\cdot n = \vec{vp}\cdot n$$
We can now work on the equation until we get a definition for $$\vec{vx}$$: \begin{align} \vec{vx}\cdot n & = \vec{vp}\cdot n \\ \lVert\vec{vx}\rVert d\cdot n & = \vec{vp}\cdot n \\ \lVert\vec{vx}\rVert & = \frac{\vec{vp}\cdot n}{d\cdot n} \\ \vec{vx} & = \frac{\vec{vp}\cdot n}{d\cdot n}d \\ \end{align}
Or written differently: $$x = v + \frac{(p-v)\cdot n}{d\cdot n}d$$
The result is undefined when the scalar product $$d \cdot v$$ is $$0$$, which happens when $$d$$ and $$n$$ are orthogonal, when $$d=0$$, or when $$n=0$$. The first case means $$d$$ is parallel to the plane and the projection doesn't have a point solution, and the two other cases mean that either the plane or the projection are not defined.