本帖最后由 zhxsh0 于 2011-01-16 01:48:39 编辑

解决方案 »

  1.   

    LZ设置了透视矩阵就可以了,
    透视图图形最远端最终会相交于一个点的,
    D3D 3D 是 D3DXMatrixPerspectiveFovLH ,
    OPENGL 3D 是 gluPerspective
    LZ可以看看计算机图形学方面的书
      

  2.   

    坐标A1(x1,y1,z1),A2(x2,y2,z2)
    方向向量是(x2-x1,y2-y1,z2-z1)
    楼主意思难道是求与x、y、z轴的夹角?
      

  3.   

    说实话。。
    你这样做,数学模型都是不对的
    就像楼上说的那样移动鼠标点时候其实在控制摄像机的旋转
    至于怎样重合那是玩家自己标准的事你需要一个鼠标灵敏度哎。。如果你真要计算
    你必须得知道摄像机的Y广角(FovY)和屏幕长宽比(Aspect)
    然后再进行计算设Y广角为FovY,长宽比为Aspect
    中心到右上角需要移动:
    横向:arctan(tan(FovY/2)*Aspect)
    纵向:FovY/2
    总夹角:arctan(tan(FovY/2)*sqrt(1+Aspect*Aspect))我在网吧为你心算的。。希望对你有帮助
      

  4.   

    上面公式里的角度  均为弧度另外FovY和Aspect都可以在D3DXMatrixPerspectiveFovLH函数的参数设置中找到。
      

  5.   

    不好意思,问题没审清楚,你是需要从A1点到A2点的角度,不是中心到右上角。。
    我重新算计算中..除了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函数的错误
      

  6.   

    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 );