# building matrices

This topic is 4392 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

In 3D space I am trying to build a right-handed viewing transformation given: eye --> The position in world space of the camera. at --> The position in world space of the target. up --> The camera's up direction. //all vectors. this is what i am trying right now: gfxVector3 v; v = (eye - at); v /= (v.Length()); gfxVector3 up; gfxMatrix4 temp; up.x = 0; up.y = 0; up.z = 1; gfxVector3 m; m = (up (dot) v) * v; gfxVector3 u; u = v(cross)m; gfxVector3 w; w = up - m; u.Normalize(); v.Normalize(); w.Normalize(); temp = gfxMatrix4(u.x,u.y,u.z,((-u) * eye), v.x,v.y,v.z,(-(v) * eye), w.x,w.y,w.z,(-(w) * eye), 0,0,0,1); , and a right-handed projection transformation given: VertFOV --> Camera's vertical FOV. Measured in angles. mAspect --> The ratio (width / height); determines horizontal FOV. mDistNear --> Distance from the eye to the near clip plane. mDistFar --> Distance from the eye to the far clip plane. and for this i am trying: gfxMatrix4 temp; mVertFOV *= (PI / 180.0f); temp = gfxMatrix4((tan(2/VertFOV))/mAspect,0,0,0, 0,(mDistFar+mDistNear)/(mDistFar-mDistNear),0,(-2*(mDistFar*mDistNear))/(mDistFar-mDistNear), 0,0,tan(2/VertFOV),0, 0,1,0,0); I am not sure if either of these attempts are right or wrong if someone could check my process and confirm, or tell me where i am going wrong. Sorry if this is hard to read, i can clean it up a bit, or answer any questions.

##### Share on other sites
Just looking at the 'look at' code, I noticed this:
m = (up (dot) v) * v;gfxVector3 u;u = v(cross)m;
'm' and 'v' are parallel, which means that u will always be zero-length; I'm guessing this is not what you want.

A 'look at' matrix is usually calculated very straightforwardly with a few cross products, whereas you seem to be making it a bit more complicated. You might check the DX online documentation, as they give the formulation for both RH and LH lookat matrices (using row vectors though; you'll have to transpose).

1. 1
2. 2
3. 3
4. 4
Rutin
16
5. 5

• 12
• 9
• 12
• 37
• 12
• ### Forum Statistics

• Total Topics
631417
• Total Posts
2999969
×