2016-12-13 3 views
1

카메라가 0.1 이하로 설정되어 있어도 가까운 평면이 너무 멀리 보이는 문제가 있습니다. 이미 오프셋 값이있는 것 같습니다. 따라서 장면의 임의의 객체를 실제로 가까이에서 볼 수는 없습니다.비행기 근처의 OpenGL이 너무 많이 클리핑됩니다.

다음은 버그의 시각적 인 모습입니다. enter image description here

표시된 검은 색 삼각형이 클리핑입니다. 현재 퍼스펙티브 매트릭스를 사용하고 있습니다. 여기에 대한 코드가 있습니다.

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 버퍼. 그러나 나는 완전히 확신하지 못한다.

나는이 버그를 어떻게 사냥하고 해결할 수 있는지 누군가가 조언 해주기를 바랍니다.

미리 감사드립니다.

+2

우선을 해결, 당신은 투영 행렬 (보기, 세계, 그리고 어떤 다른 당신이) 이외의 다른 모든 변환을 제공해야합니다. 큐브의 정점 버퍼도 분명히 필요합니다. – Ap31

+0

문제가 무엇인지에 대한 단서가 있습니까? – JekasG

+2

@JekasG : 큐브가 단순히 Z <= 근처를 벗어날 수 있지만 변환 설정과 큐브의 꼭지점을 보지 않고는 말할 수 없습니다. 당신은 그것의 대각선을 따라 큐브를보고 있는데,이 길이는'sqrt (3 * 1²) = sqrt (3) = ~ 1.73'의 인수에 의해 길어집니다. – datenwolf

답변

1

는 "glEnable (GL_DEPTH_CLAMP은)는"문제

2

잘 하나의 이미지 때문에 더 후 1000 개 단어를 가치가있다 : 큐브의 절반 크기 r=1.0이며 큐브 센터 당신이 거리에 r에 카메라를 설정 한 경우 내 의견에서 언급 한 바와 같이

cube cut

큐브 모서리가 범위 <sqrt(2),sqrt(3)>에서 중심에서 멀어 지므로 z_near에 의해 계속 삭감됩니다. 따라서 모든 가장자리가 카메라 방향으로 바뀌면 잘릴 것입니다 ...

또한 언급 한 바와 같이 이것은 t (매트릭스 및 메쉬 콘텐츠)에 관련된 est 데이터 ...

오른쪽에있는 PS는 카메라 설정의 큐브 측면보기입니다. 설정 한 것으로 추정됩니다. 녹색 (+/-)Z은 보는 방향입니다.