2017-02-04 3 views
0

적어도 the documentation에 따라 Eye.getEyeView 및 Eye.getPerspective 행렬의 역할을 이해합니다. 첫 번째는 카메라의 위치를 ​​가져 와서 현재 눈의 위치로 변환합니다. 이것은 머리 추적과 각 학생의 오프셋을 고려합니다. 두 번째는 투시 투영 행렬을 제공합니다. 이것은 머리 추적에 의존하지 않고 각 눈에 대한 시야에만 의존합니다.eye.getEyeView() 및 eye.getPerspective 행렬 이해

내가 이해할 수없는 것은 각 눈에 대한 시야의 차이입니다. 우리의 눈은 대략 전방을 향하고 있습니다. 그래서 그들은 동일해야합니까? 자, 행렬은 실제로는 다소 다릅니다. 이제 살펴 보자, 이들은 SDK에서 TreasureHunt 예의 변형 사용하여 onDrawEye 방법에 기록 된 :

왼쪽 EyeView을 매트릭스 :

0.99938333 & 0.013064715 & 0.03259317 & 0.0 \\ 
-0.022139862 & 0.95490175 & 0.2960955 & 0.0 \\ 
-0.02725487 & -0.2966345 & 0.9546021 & 0.0 \\ 
0.03028951 & -0.0033823675 & 0.10220718 & 1.0 

오른쪽 EyeView 매트릭스 :

0.99938333 & 0.013064715 & 0.03259317 & 0.0 \\ 
-0.022139862 & 0.95490175 & 0.2960955 & 0.0 \\ 
-0.02725487 & -0.2966345  & 0.9546021 & 0.0 \\ 
-0.03361049 & -0.0033823675 & 0.10220718 & 1.0 

이를 약 0.064만큼 다른 a_ {41}을 제외하고는 동일합니다. 단위가 미터라면 나는 이것이 학생들 사이의 거리라고 생각합니까? 왜 3x3 방향 매트릭스가 동일한 지 알 수 있습니다. 그러나 네 번째 행의 다른 두 값인 a_ {42}와 a_ {43}이 왜 다른지는 알 수 없습니다. 눈의 위치는 한 축에서만 다릅니다! 우연히 모든 프레임에 공통적 인 것은 아닙니다.

이제 관점 행렬을 살펴 보자 :

왼쪽 관점 매트릭스 :

0.8990804 & 0.0  & 0.0  & 0.0 \\ 
0.0   & 0.762166 & 0.0  & 0.0 \\ 
0.106264874 & 0.08848558 & -1.00002 & -1.0 \\ 
0.0   & 0.0  & -0.0200002 & 0.0 

오른쪽 관점 매트릭스 :

0.89908034 & 0.0  & 0.0  & 0.0 \\ 
    0.0  & 0.762166 & 0.0  & 0.0 \\ 
-0.10626444 & 0.08848558 & -1.00002 & -1.0 \\ 
    0.0  & 0.0  & -0.0200002 & 0.0 

이는 A_ {31} 다르다. 나는 그 값에 단위를 적용하는 것이 타당하지 않다고 생각한다. (그러나 내가 잘못하면 나를 바로 잡는다.) 이것은 왼쪽이나 오른쪽으로 0.1만큼 출력 이미지를 이동시키는 것처럼 보일 것입니다. 이 두 행렬은 동일하고 차이점은 eyeView 행렬에서 고려해야합니다. 모두 0으로 변경하면 3D 효과가 사라집니다.

아무도 내게 무슨 일이 벌어 졌는지 알려줄 수 있습니까?

답변

1

뷰 매트릭스가 x 축에서 그 양만큼 떨어져 있다는 것은 의미가 있습니다. 이는 백일몽에서 지원되는 표준 입자 간 거리입니다. 뷰 행렬은 뷰 포인트를 중심으로 월드를 변형하므로 뷰의 중심이 원본에 있고 API에 따라 위/아래로 Y가 올라가는 Z 축이 가리키게되므로 x 축의 동작이 의미가 있다는 것을 기억하십시오.

보물 찾기 샘플을 보면 head_view 행렬에 곱할 때 머리 위치/회전을 고려합니다.

투영 매트릭스의 경우 일반적으로 눈을 초점으로 올바르게 밀고 싶습니다. 이 옵셋은 해당 작업을 수행합니다. 초점을 이동 시키므로 프로젝션이 약간 비뚤어집니다. 눈의 바깥쪽에 ~ 45도, 안쪽에 ~ 50 도가있는 중심 이탈입니다 (장치에 따라 다름).

-tom