카메라가 0.1 이하로 설정되어 있어도 가까운 평면이 너무 멀리 보이는 문제가 있습니다. 이미 오프셋 값이있는 것 같습니다. 따라서 장면의 임의의 객체를 실제로 가까이에서 볼 수는 없습니다.비행기 근처의 OpenGL이 너무 많이 클리핑됩니다.
표시된 검은 색 삼각형이 클리핑입니다. 현재 퍼스펙티브 매트릭스를 사용하고 있습니다. 여기에 대한 코드가 있습니다.
Matrix4x4 Matrix4x4::Perspective(Float fov, Float aspectRatio, Float near, Float far)
{
Matrix4x4 result(1.0f);
Float q = 1.0f/tan(toRadians(0.5f * fov));
Float a = q/aspectRatio;
Float b = (near + far)/(near - far);
Float c = (2.0f * near * far)/(near - far);
result.elements[0 + 0 * 4] = a;
result.elements[1 + 1 * 4] = q;
result.elements[2 + 2 * 4] = b;
result.elements[2 + 3 * 4] = -1.0f;
result.elements[3 + 2 * 4] = c;
return result;
}
나는 버그가 수학 수업에서 온 것 같지 않습니다. 이것은 수학 코드가 주로 내가 연구해온 다른 프로젝트의 코드이기 때문입니다. 그리고 거기에서 완벽하게 잘 작동합니다. 나는 또한 렌더링 방법 (앞으로 렌더러)을 의심하지 않는다. 나는 마우스와 키보드를 통해 카메라를 움직이거나 회전시킬 수 있기 때문에 그에 대한 필자의 조언이 좋다고 생각한다.
하지만! 내가 의심하는 것은 완충제이다. OpenGL 버퍼. 그러나 나는 완전히 확신하지 못한다.
나는이 버그를 어떻게 사냥하고 해결할 수 있는지 누군가가 조언 해주기를 바랍니다.
미리 감사드립니다.
우선을 해결, 당신은 투영 행렬 (보기, 세계, 그리고 어떤 다른 당신이) 이외의 다른 모든 변환을 제공해야합니다. 큐브의 정점 버퍼도 분명히 필요합니다. – Ap31
문제가 무엇인지에 대한 단서가 있습니까? – JekasG
@JekasG : 큐브가 단순히 Z <= 근처를 벗어날 수 있지만 변환 설정과 큐브의 꼭지점을 보지 않고는 말할 수 없습니다. 당신은 그것의 대각선을 따라 큐브를보고 있는데,이 길이는'sqrt (3 * 1²) = sqrt (3) = ~ 1.73'의 인수에 의해 길어집니다. – datenwolf