Jump to content

  • Log In with Google      Sign In   
  • Create Account

a camera problem in directx11


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 soloman   Members   -  Reputation: 126

Like
0Likes
Like

Posted 25 March 2014 - 04:57 AM

In directx11,a camera is identified with a position,a forcus direction,and a up direction.In my opinion,the up vector should be perpendicular to the forcus vertor.But in MS's toturial :

 

    XMVECTOR Eye = XMVectorSet( 0.0f, 3.0f, -6.0f, 0.0f );
    XMVECTOR At = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    g_View = XMMatrixLookAtLH( Eye, At, Up );
    //cbNeverChanges.mView = XMMatrixTranspose( g_View );
As you can see, the At vec is same with the Up vec.I just confused with this usage.
By the way,what the reason to do the transpose after every XMMatricx**() be called.
 
Thanks for any help!


Sponsor:

#2 Buckeye   Crossbones+   -  Reputation: 6287

Like
1Likes
Like

Posted 25 March 2014 - 05:22 AM

Can you link the tutorial, or, if it's in the SDK, post the name of the project?

 

XMMatrixLookAtLH builds a "left-handed" matrix - i.e., row-major. Transposing a matrix swaps the rows and columns, making it a column-major matrix. Apparently, the view matrix is used somewhere (looks like the shader) which needs a column-major matrix.


Edited by Buckeye, 25 March 2014 - 05:26 AM.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.


#3 Stainless   Members   -  Reputation: 1069

Like
1Likes
Like

Posted 25 March 2014 - 06:14 AM

A look at matrix is just what it says, it creates a matrix from a point to a target.

 

Not a direction, the direction of view is define by (using your variables) At - Eye

 

I think that is why you are getting confused.

 

You are correct that Up should be perpendicular to (At -Eye)

 

You have to view tutorials with a grain of salt, they are written by humans. Often they work even though they have bugs in them, it's only when you try to use the code in a different environment that the bugs become apparent. 

 

The best tutorial writers allow feedback and are prepared to fix issues when they are pointed out to them. Microsoft..... not so much smile.png



#4 Burnt_Fyr   Members   -  Reputation: 1248

Like
1Likes
Like

Posted 25 March 2014 - 09:37 AM

 

In directx11,a camera is identified with a position,a forcus direction,and a up direction.In my opinion,the up vector should be perpendicular to the forcus vertor.But in MS's toturial :

 

    XMVECTOR Eye = XMVectorSet( 0.0f, 3.0f, -6.0f, 0.0f );
    XMVECTOR At = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    g_View = XMMatrixLookAtLH( Eye, At, Up );
    //cbNeverChanges.mView = XMMatrixTranspose( g_View );
As you can see, the At vec is same with the Up vec.I just confused with this usage.
By the way,what the reason to do the transpose after every XMMatricx**() be called.
 
Thanks for any help!

 

 

You are correct that the look at vector and up vector should not be colinear. But the At vector is not the view direction, but the spot you are looking at.

 

1) As mentioned previously, the function XMMatrixLookAtLH will create a look vector using at-eye to get a vector from the eyepoint to the look at point.

2) The cross product between the view vector and the up vector give a vector perpendicular to the view and up vectors

3) The view vector is crossed with the perpendicular to give a new up vector that finalizes the orthonormal basis.

4) IIRC (can't remember from where) at one point the mul intrinsic in HLSL worked faster with column major layout than row major layout



#5 soloman   Members   -  Reputation: 126

Like
1Likes
Like

Posted 25 March 2014 - 10:58 AM

Can you link the tutorial, or, if it's in the SDK, post the name of the project?

 

XMMatrixLookAtLH builds a "left-handed" matrix - i.e., row-major. Transposing a matrix swaps the rows and columns, making it a column-major matrix. Apparently, the view matrix is used somewhere (looks like the shader) which needs a column-major matrix.

it's in sdk.here the path:

Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D11\Tutorials\Tutorial07



#6 Buckeye   Crossbones+   -  Reputation: 6287

Like
0Likes
Like

Posted 25 March 2014 - 12:11 PM

Thanks for the path. I didn't notice the Up vector when I played with the file. In any case, if you take a look at how a view matrix is constructed, you can see that the Up vector is only used in a cross product with vector(At - Eye) to form a "to-the-right" vector. There are an infinite number of vectors perpendicular to a vector, so as long as the Up vector you use in view matrix construction is perpendicular to the desired "to-the-right" direction (edit: well, and not the same direction as At-Eye) and pointing in the general "up" direction* desired, the view matrices all come out identical.

 

*I say the general "up" direction because it's crossed with At-Eye. If the Up vector points "downward," the sign of the crossproduct changes and (you may have guessed) the scene will appear upside-down.


Edited by Buckeye, 25 March 2014 - 12:23 PM.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.


#7 Burnt_Fyr   Members   -  Reputation: 1248

Like
0Likes
Like

Posted 26 March 2014 - 10:02 AM

Buck, I think the " "left-handed" matrix" bit from your previous reply should be removed, as handedness and majorness are different ideas altogether.



#8 Buckeye   Crossbones+   -  Reputation: 6287

Like
0Likes
Like

Posted 26 March 2014 - 11:45 AM

Nah, "left-hand" was specifically in quotation marks because the context was regarding a specific function advertised as "Look-At-Left-Hand," and I clearly stated the result was a row-major matrix.


Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS