2010-05-17 1 views
0

일부 2D 모델의 비디오를 재생할 때 일부 3D 모델을 통합하는 데 도움이되는 2D/3D 추적 데이터 (pfHoe에서 제공)를 활용하고 있습니다.2 차원 비디오와 함께 3d 모델을 합성하는 데 더 복잡한보기 행렬 계산이 필요합니다.

괜찮습니다 ...하지만 비디오 배경에 대해 모델의 '미끄러짐'이 아직 있지만 XNA CreatePerspective 도우미 메서드가 일부를 고려하지 않았기 때문에 이것이있을 수 있습니다. 독립적 인 수평/수직 시야각 및 초점 거리와 같은 pfHoe가 제공하는 추가 데이터의

누구든지 그러한 세부 정보를 포함하는 뷰 매트릭스를 구성하는 몇 가지 예를 지적 할 수 있습니까?

답변

1

이 MSDN 문서가 어떻게 수학 더욱 설명한다
http://msdn.microsoft.com/en-us/library/bb147302%28VS.85%29.aspx

D3DXMATRIX 
ProjectionMatrix(const float near_plane, // Distance to near clipping 
             // plane 
       const float far_plane, // Distance to far clipping 
             // plane 
       const float fov_horiz, // Horizontal field of view 
             // angle, in radians 
       const float fov_vert) // Vertical field of view 
             // angle, in radians 
{ 
    float h, w, Q; 

    w = (float)1/tan(fov_horiz*0.5); // 1/tan(x) == cot(x) 
    h = (float)1/tan(fov_vert*0.5); // 1/tan(x) == cot(x) 
    Q = far_plane/(far_plane - near_plane); 

    D3DXMATRIX ret; 
    ZeroMemory(&ret, sizeof(ret)); 

    ret(0, 0) = w; 
    ret(1, 1) = h; 
    ret(2, 2) = Q; 
    ret(3, 2) = -Q*near_plane; 
    ret(2, 3) = 1; 
    return ret; 
} // End of ProjectionMatrix 

(C++에서이기는) 독립적으로 고려 수평 및 수직 FOV를 취하는 관점 행렬을 생성하는 방법을 쓸 도시 이 방법의 C# 버전을 작성하는 데 도움이되도록 위에 링크 된 기사. 행운을 빌어 요 :-)

+0

흠 ... C#으로 처음 해석 할 때 약간 더 ... 홀수 ... 결과 ... :) private Matrix CreateProjection (float horizontalFov float verticalFov, float nearPlane, float farPlane) { var w = 1f/(float) Math.Tan (horizontalFov * 0.5f); var h = 1f/(float) Math.Tan (verticalFov * 0.5f); var q = farPlane/(farPlane - nearPlane); return new Matrix (w, 0, 0, 0, 0, h, 0, 0, 0, 0, q, 1, 0, 0, -q * nearPlane, 0); } – lzcd

관련 문제