一个点如何移动到另一个点 本帖最后由 zhxsh0 于 2011-01-16 01:48:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ设置了透视矩阵就可以了,透视图图形最远端最终会相交于一个点的,D3D 3D 是 D3DXMatrixPerspectiveFovLH ,OPENGL 3D 是 gluPerspectiveLZ可以看看计算机图形学方面的书 坐标A1(x1,y1,z1),A2(x2,y2,z2)方向向量是(x2-x1,y2-y1,z2-z1)楼主意思难道是求与x、y、z轴的夹角? 说实话。。你这样做,数学模型都是不对的就像楼上说的那样移动鼠标点时候其实在控制摄像机的旋转至于怎样重合那是玩家自己标准的事你需要一个鼠标灵敏度哎。。如果你真要计算你必须得知道摄像机的Y广角(FovY)和屏幕长宽比(Aspect)然后再进行计算设Y广角为FovY,长宽比为Aspect中心到右上角需要移动:横向:arctan(tan(FovY/2)*Aspect)纵向:FovY/2总夹角:arctan(tan(FovY/2)*sqrt(1+Aspect*Aspect))我在网吧为你心算的。。希望对你有帮助 上面公式里的角度 均为弧度另外FovY和Aspect都可以在D3DXMatrixPerspectiveFovLH函数的参数设置中找到。 不好意思,问题没审清楚,你是需要从A1点到A2点的角度,不是中心到右上角。。我重新算计算中..除了A1和A2 ,你必须得知道摄像机光心的坐标,通俗点说就是眼睛在哪设眼睛E坐标为x,y,zA1,A2坐标为(x1,y1,z1)和(x2,y2,z2)设向量P = (x1 - x , y1 - y , z1 - z)设向量Q = (x2 - x , y2 - y , z2 - z)float dot = P*Q 即 P.x*Q.x + P.y*Q.y + P.z*Q.z;float LengthP = P的长度float LengthQ = Q的长度计算出float fCOS = dot / (LengthP * LengthQ);最后,角度就出来啦角度 = acos(fCOS);注意分母为0的情况。还要特别注意浮点数的精度,对dot / (LengthP * LengthQ)的计算结果进行(-1,1)的箍位,否则可能出现acos函数的错误 m_pDevice->SetTransform( D3DTS_WORLD, &matWorld ); D3DXVECTOR3 eye( 0.0f, 3.0f,eye_z ); //观察点 D3DXVECTOR3 lookat( 0.0f, 0.0f, 0.0f ); //视线目标点 D3DXVECTOR3 up( 0.0f, 1.0f, 0.0f ); //上方向 D3DXMATRIX matView; //计算视角变换矩阵 ::D3DXMatrixLookAtLH( &matView, &eye, &lookat, &up ); 新版飞信终于换C++做了,终于不那么卡了 模拟FTP进行文件传输 如何在应用程序中得到MFC DLL的theApp对象? MDAC在windows xp2上的问题 如何让菜单中的菜单项不显示? 请大家来看看我的问题,谢谢! 函数的参数传递数值!? VC自动填写表单 vc对话框 vc单文档,如何修改首界面 如何更改另一窗口中的 Edit 控件中的内容? 请问vs2010在64位操作系统下生成的程序是不是64位模式?怎样设置?
透视图图形最远端最终会相交于一个点的,
D3D 3D 是 D3DXMatrixPerspectiveFovLH ,
OPENGL 3D 是 gluPerspective
LZ可以看看计算机图形学方面的书
方向向量是(x2-x1,y2-y1,z2-z1)
楼主意思难道是求与x、y、z轴的夹角?
你这样做,数学模型都是不对的
就像楼上说的那样移动鼠标点时候其实在控制摄像机的旋转
至于怎样重合那是玩家自己标准的事你需要一个鼠标灵敏度哎。。如果你真要计算
你必须得知道摄像机的Y广角(FovY)和屏幕长宽比(Aspect)
然后再进行计算设Y广角为FovY,长宽比为Aspect
中心到右上角需要移动:
横向:arctan(tan(FovY/2)*Aspect)
纵向:FovY/2
总夹角:arctan(tan(FovY/2)*sqrt(1+Aspect*Aspect))我在网吧为你心算的。。希望对你有帮助
我重新算计算中..除了A1和A2 ,你必须得知道摄像机光心的坐标,通俗点说就是眼睛在哪
设眼睛E坐标为x,y,z
A1,A2坐标为(x1,y1,z1)和(x2,y2,z2)设向量P = (x1 - x , y1 - y , z1 - z)
设向量Q = (x2 - x , y2 - y , z2 - z)
float dot = P*Q 即 P.x*Q.x + P.y*Q.y + P.z*Q.z;
float LengthP = P的长度
float LengthQ = Q的长度计算出
float fCOS = dot / (LengthP * LengthQ);最后,角度就出来啦角度 = acos(fCOS);注意分母为0的情况。
还要特别注意浮点数的精度,对dot / (LengthP * LengthQ)的计算结果进行(-1,1)的箍位,否则可能出现acos函数的错误
D3DXVECTOR3 eye( 0.0f, 3.0f,eye_z ); //观察点
D3DXVECTOR3 lookat( 0.0f, 0.0f, 0.0f ); //视线目标点
D3DXVECTOR3 up( 0.0f, 1.0f, 0.0f ); //上方向
D3DXMATRIX matView; //计算视角变换矩阵
::D3DXMatrixLookAtLH( &matView, &eye, &lookat, &up );