2012-03-10 4 views
1

Android에서 OpenGL ES20을 사용하여 하나의 구를 만들었습니다. 원근 투영법 env에서 [-1.5, -2, -2]에서 [-1.5, 2, -2]로 구체를 움직입니다. 문제는 구가 절두체 경계에 도달 할 때 타원처럼 보입니다. 실제로 그것은 [0, 0, -2]에있을 때만 원으로 보입니다. [0,0]에서 멀어 질수록 더 타원처럼 보입니다.내 OpenGL 영역이 타원처럼 보이는 이유

표준 동작입니까? 내 생각에 한 구체는 모든 각도에서 원처럼 보일 것입니다. 도와 주실 수 있겠습니까?

The sphere

답변

1
당신은 시야각을 완화해야

; 당신이 보여주는 것은 정상이며 3D 프로젝션의 약간 인공적인 특성의 부작용입니다. 3D 프로젝션은 시청자가 스크린으로부터 고정 된 거리에 앉아 있고, 눈이 화면 중앙에서부터 z를 따라 직접 위치한다고 가정합니다 정확히 전달합니다. 실제 카메라와 동일한 효과에 대한 설명은 관련 문제 described here을 확인하십시오.

암시 적 기본 기본 시야는 종종 90도입니다. 그러나 당신이 당신의 손에있는 전화를 가지고있을 때 그것은 당신 비전의 90도보다 훨씬 적습니다.

glFrustum을 사용하는 경우 왼쪽, 오른쪽, 위쪽 및 아래쪽에 더 작은 값을 지정하십시오. 빠른 수정으로 투영 행렬을 계산 한 후 프로젝션 스택 (또는 ES 2에 해당하는)에 glScalef을 말하십시오.

관련 문제