원근감 행렬의 원거리 평면 거리를 1,000,000,000
으로 정의하면 해당 범위 내의 모든 객체가 잘립니다. 범위는 100,000,000
입니다. 누구나 설명 할 수 있습니까? 내 말은, 여전히 플로트 수의 최대 범위에 근접하지 않는다는 것입니다. 아니면 내가 잘못 했니? 관점을 계산하기 위해 GLM 라이브러리를 사용합니다. 고정 된 파이프 라인 딱딱함이 없습니다.OpenGL Far Plane의 값이 매우 큰 클립 모두
UPDATE : (JAVA) 관점 매트릭스 계산 : 부동 소수점 숫자를 매우 유한 정밀도에
public static Mat4 perspective(float fovy, float aspect, float zNear, float zFar) {
float range = (float) (Math.tan(Math.toRadians(fovy/2.0f)) * zNear);
float left = -range * aspect;
float right = range * aspect;
float bottom = -range;
float top = range;
Mat4 res = new Mat4(0.0f);
res.matrix[0] = (2.0f * zNear)/(right - left);
res.matrix[5] = (2.0f * zNear)/(top - bottom);
res.matrix[10] = -(zFar + zNear)/(zFar - zNear);
res.matrix[11] = -1.0f;
res.matrix[14] = -(2.0f * zFar * zNear)/(zFar - zNear);
return res;
}
내가 질문을 이해하지만, 단 정밀도 부동 소수점 7 개 소수점 자리를 통해 조금을 표시 할 수 없습니다. 귀하의 전화 번호는 10 자리 숫자이므로 마지막 3 자리 숫자 만 다른 좌표는 "같은"것입니다. 따라서 999,999,950이 클리핑 될 수 있습니다. 그게 니가 궁금해 한거야? – Damon
반올림 문제 또는 이와 유사한 것 같습니다. 물론 float 범위를 넘지 않습니다 (32 비트 int 범위를 넘지 않습니다). 그러나 큰 숫자로 나누면 모든 것이 0으로 바뀔 수 있습니다. 마찬가지로 행 수가 계산되는 동안'near + far' 또는'near-far' 에서처럼이 큰 숫자에 아주 작은 숫자를 추가 할 때 그 수는 아마도 변하지 않게 유지하십시오. 이것이 매트릭스의 계산에 어떤 영향을 미치는지 분석 할 필요가 있습니다. –
대답 해줘서 고마워.하지만 너보다 위의 남자가 그 반대라고 했어. –