이 질문은 OpenGL보다 더 많은 질문 이겠지만 나는 빗나가 다. 어쨌든, 원근감 나누기의 목적이 쓸모있는 x와 y 좌표를 얻는 것이라면, 왜 z를 w로 나눌까요? 또한 어떻게 처음부터 w를 얻을 수 있습니까?왜 OpenGL의 원근 투영에서 Z로 W를 나눕니까?
답변
사실, 설명은 수학보다 깊이 버퍼의 제한 사항과 더 관련이 있습니다.
가장 간단하게 "깊이 버퍼는 각 화면상의 픽셀에 카메라와의 거리에 따라 그레이 스케일 값이 할당되는 텍스처로, 시각적 효과를 거리에 따라 쉽게 변경할 수 있습니다."
- Z 가까운 클리핑 평면으로부터의 거리 : Source
더 정확하게, 깊이 버퍼는 각 fragment 대한w Z/의 값을 포함하는 감촉 조각에.
- W은 카메라에서 단편까지의 거리입니다. Z, 와트 및 Z/w 사이의 관계를 나타내는 다음 도면에서
, N는 gluPerspective
에 전달 zNear
파라미터 또는 동등한 기능 같고, f은 동일한 기능으로 전달 된 zFar
매개 변수와 같습니다. 눈에서
두 번째 중요한 메모 : 깊이 버퍼는 비선형입니다. 즉, 근거리 및 원거리 자르기 기준면 사이의 개체가 깊이 버퍼의 0.5에 아무데도 근접하지 않습니다. 위에 표시된 것처럼 깊이 버퍼에서 0.999의 값과 상관 관계가 있습니다. 보기에 따라 좋거나 나쁠 수 있습니다. 깊이 버퍼가 더 자세한 클로즈업 (있는 그대로)이거나 전체적으로 세부 사항을 제공하기를 원할 수 있습니다 (그렇지 않은 경우).
TL; DR :
- 넌 분할 와트 의해 Z 그래서 그것은 항상 범위 [0, 1].
- W은 카메라에서 단편까지의 거리입니다.
정말이 답변에 동의하지 않습니다. 질문은 순수 수학적 문제와 관련이 있습니다. 여기서 설명하는 것은 OpenGL 및 Z 버퍼 알고리즘 구현 세부 정보 (깊이 버퍼)입니다. –
NDC의 z는 [0, 1]이 아닌 [-1, 1] 범위 내에 있습니다. – SnappleLVR
- 1. 원근 투영에서 점이 쿼드 안에 있는지 확인하는 방법은 무엇입니까?
- 2. XNA의 원근 투영법 변환?
- 3. 'W'가 W를 출력하고 'W'가 $를 출력합니다. 왜?
- 4. 왜 싱글 라인 PHP 코멘트가 페이지를 나눕니까?
- 5. 왜 mapreduce가 압축 파일을 입력 분할로 나눕니까?
- 6. C# 왜 List.Remove()가 'for loop'을 나눕니까?
- 7. 왜 OpenGL의 타원을 지적하고 있습니까?
- 8. 원근 투영과 직각 투영 사이의 OpenGL 스펙트럼
- 9. 원근 투영
- 10. 투영에서 카운트 받기
- 11. OpenGL : 직각 투영에서 왜 원거리 및 원거리가 부정적입니까?
- 12. 고가 & a-z로 정렬
- 13. Vb.net에서 Z로 변환
- 14. % w를 언제 사용합니까?
- 15. 메쉬를 사면체로 나눕니까?
- 16. Perspecitve가 버텍스 쉐이더로 나눕니까?
- 17. Spark - int를 열로 나눕니까?
- 18. JPA 엔티티를 둘로 나눕니까?
- 19. openGL의 좌표계
- 20. 왜 원근 투영 행렬 계산이 올바른 결과를 제공하지 않습니까?
- 21. Silverlight - 원근 3D
- 22. 이미지 뷰의 원근 보정
- 23. 역 원근 투영
- 24. 원추체 및 원근 행렬
- 25. 원근 왜곡 보정
- 26. 좌표가있는 배열의 원근 변환
- 27. 그래픽을위한 원근 변환
- 28. MongoDB 투영에서 문자열을 숫자로 변환합니다.
- 29. MongoDB : 투영에서 중복 레코드 제거
- 30. AutoMapper 투영에서 람다 표현 오류
http : //en.wikipedia.org/wiki/Transformation_matrix # Perspective_projection –
이것은 동질적인 좌표와 관련이 있습니다. R^3 -> R^4를 매핑하는 것은 명확하게 일대일이 아닙니다. w 인자는 'cannonized'일 수 있습니다. 그러나 4x4 행렬 연산자를 적용한 결과 'w'가 바뀔 수 있습니다. 올바르게 기억한다면 균질 좌표계의 한 가지 이점은 선형 연산자로 변환하는 것입니다. – Yotam