怎样把物体缩放到屏幕刚好完全显示的大小?
怎样把物体缩放到屏幕刚好完全显示的大小?只是为了显示的目的,物体本身大小并不改变,就像在3dmax中的"所有视口对象完全显示"命令那样. 问题点数:20、回复次数:4Top
1 楼CGChina(时空英雄)回复于 2005-08-04 15:23:48 得分 6
统计所有顶点,得到Bound然后,将Projectiong矩阵改变...不用我说了吧
Top
2 楼hotyoung(风间月)回复于 2005-08-04 16:36:15 得分 8
先声明全局的两个变量:
D3DXVECTOR3 g_pCenter;//保存模型的中心点
FLOAT g_fRadius;//半径
然后进行模型的载入:
用D3DXLoadMeshFromX(...)函数,并保存到g_pMesh里(LPD3DXMESH)
然后
g_pMesh->LockVertexBuffer(...);
//计算模型范围
hr = D3DXComputeBoundingSphere(
(D3DXVECTOR3*)v,//临时BYTE *变量v
g_pMesh->GetNumVertices(),
D3DXGetFVFVertexSize(g_pMesh->GetFVF()),
&g_pCenter,//保存模型的中心点
&g_fRadius);//球型范围半径
g_pMesh->UnlockVertexBuffer();
D3DXComputeBoundingSphere(...)函数是用于计算模型的球型范围。
有了中心点g_pCenter和半径g_fRadius,你就可以调整你的摄像机了。
调用D3DXMatrixLookAtLH(...)函数建立Look-At matrix。
第二个参数是Camera本身的位置,你要把这个D3DXVECTOR3的x,y,z用g_pCenter的x,y,z赋值,并再将y和z加上或减去g_fradius,这是为了将Camera与模型之间产生点距离;
第三个参数是Camera所对向的点,当然这个点就是模型的中心点,即g_pCenter。
这样,不管你载入何种模型,Camera都会自动对向它。
Conclusion 一下
将Camera对向模型的几步如下:
1、载入模型。
2、计算模型范围。
3、调整Camera,Look-At模型。
4、打完收工。Top
3 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2005-08-04 16:50:59 得分 6
1 确定方向(从物体的那个方向看过去)
2 确定fov角度(视角是固定的)
3 计算物体在这个方向上投影的最大直径,简单的话可以用DX的计算包围球的函数,得到最大的半径
4 tan(fov) = 半径 / 距离
从而反算出来距离了
Top
4 楼KingYoungsun(路人甲)回复于 2005-11-26 00:06:13 得分 0
非常感谢各位的回答。Top




