|
|
终于弄明白了摄影机的使用。看了不少书,都不太细的讲各参数的配合使用,可能是为了省篇幅? 在这里共享一下。
D3DXMatrixLookAtLH( &matView, &vEye, &vLookatPt, &vUpVec );
matView是输出的矩阵, 后三个参数分别控制眼睛,摄影机,和向上的方向。一般都书和
网上的文章大概也就这么讲的,让人琢磨不透。
后三个参数类型是 D3DXVECTOR3 ,概类型又有三个分量。分别是X Y Z.
总共就是 3x3的 矩阵。而不是4x4的矩阵。
一般的书里默认都 是这样设置的 D3DXVECTOR3 vEye(0.0f,0.0f,-5.0f);
D3DXVECTOR3 LookatPt(0.0f,0.0f,0.0f);
D3DXVECTOR3 vUpVec(0.0f,1.0f,0.0f);
-5.0f表示眼睛从原点向一点。因为D3D使用的是左手坐标系,所以
屏幕里是Z轴的正方向,所以为了看到眼前的物体就要后挪动下。
要是将 -5.0f改成正的,你会发现什么也看不见,那是因为你没有在
后面画东西, 为了做实验,你可以在你的上下 左右 前后 分别放
个不同的模型。以明确状态。
看前后左右基本上就是调整 vEye的x,y,z各参数。如果你要看左边,
就将 y z清零,设置 x为正数,因为X轴的正方向是指向右的。
要看右边 X就为负值。
要看上边就要配合最后一个参数,vUpVec,调整向上的方向。
如果你要看上边,很显然,不可能是 正值的Y是 向上,
为了向上看你要把头仰起来,那你的头多少就指向了Z轴的负方向。
所以这里 在 Z轴设置 -1.0f就可以表示向上的方向了。 这里不太好想。
当然你也可以将Z轴设置为正的。我这里默认将Z设置为1.0f
然后通过 vEye的Y分量就可以调整为 向上或向下看了。
摄影机的使用明白后就方便多了,最起码可以在前后左右任意的
方向绘制模型了,简单地面等。我马上就要去绘制了。如果学会
3D的碰撞检测和完美的鼠标拾取,做个没有大规模起伏地面和天空的
单调的3D小游戏是不成问题的。
另外我还发现原来 通过 D3DXMatrixMultiply还可以让摄影机原地绕
X Y Z Axis旋转,这下看世界更方便了。另外多谢这里帮助我的朋友。 |
|