I need to convert a 2D mouse coordinate to a 3D world coordinate based on a specific depth (it's for raycasting). I'm not directly using DirectX in C++, I'm using a proprietary language, but if you give me an answer in C++ or pseudocode (C++ preferred) I can convert it.
I have access to the world matrix, view matrix and projection matrix and a variety of matrix manipulation functions.
If it's necessary to multiply a vector4 by a matrix4, the only function I have available that takes both a vector4 and a matrix4 is transformVector4(vector4Source,matrix4Source)
. I'm not sure which order it multiplies them in, if that matters.
Any help would be much appreciated :) I've been working on this for hours and I just don't get 3D maths...
To convert you mouse to ray, you do this process:
Convert your mouse coordinates from pixel coordinate to -1/1 coordinates (-1,-1 being bottom left).
ray origin will be (vector at near plane)
ray end is (vector at far plane)
now you need to apply transform to those vectors, first you need to create transformation matrix for it:
Apply this transformation to both vectors:
Your ray direction is :
That's about it, now you can use raycast functions.
In case you only have access to vector4 to transform vector by a matrix, the w component needs to be 1 in eg:
to extract direction make sure to first convert your vector4 into vector3 (since it will affect normalization otherwise).