2017-02-11 11 views
0

얼굴에 이상한 문제가 생겼을 때 복셀 엔진을 쓰고있었습니다.Voxel 엔진, 카메라 팬이 튀어 오를 때 얼굴이 도청당하는 경우

그래서 지형에서 벗어나면 모든 것이 파괴됩니다. 나는 스크린 샷을 게시 할 문제를 어떻게 기술 할 지에 대해서는 생각조차 모르고있다. 내가 마지막 값에 두 번째로 연주 부분이 사라에 1.0F 문제로 그를 변경할 때

camera_projection = bb_perspective(bb_toRadiansReal32(70.0f), ((r32)WINDOW_WIDTH/(r32)WINDOW_HEIGHT), 0.1f, 1000.0f); 

나는 발견했다. 하지만이 값을 1.0f로 유지하고 싶지는 않습니다. 내가 어떻게 처리하는 완전히 아무 생각

static bbMat4 bb_perspective(r32 fov, r32 aspect, r32 near, r32 far) { 
    bbMat4 ret(1.0f); 

    r32 range = near - far; 
    r32 tan_half_fov = tanf(fov/2.0f); 

    ret[0][0] = 1.0f/(tan_half_fov * aspect); 
    ret[1][1] = 1.0f/tan_half_fov; 
    ret[2][2] = (-near - far)/range; 
    ret[2][3] = 2.0f * far * near/range; 
    ret[3][3] = 0.0f; 
    ret[3][2] = 1.0f; 

    return ret; 
} 

:

나는이 함수의 정의를 게시 할 수 있습니다.

+0

스크린 샷에 표시된 내용과 그 문제점을 설명 할 수 있습니까? znear 값을 작동하는 값으로 변경하고 싶지 않은 이유는 무엇입니까? 근거리 및 원거리 자르기 평면을 합리적인 값으로 설정하는 것이 필수적입니다. 깊이 버퍼에 어떤 비트 깊이를 사용합니까? –

+0

가까운 거리에서 먼 거리까지 작은 범위를 선택하면 멀리 떨어지지 않습니까? 예를 들어 1.0f에서 1000.0f입니까? –

+0

완전히, 나는이 버그를 다시보기 위해 카메라로 더 멀리 가야한다. – Brajanowski

답변

0

수학을 확인하십시오.

ret[2][2] = (-near - far)/range; 보이지 않습니다. 기존 라이브러리에서 보면 (예를 들어 최신 GLM) 당신은 내가 무슨 뜻인지 볼 수 있습니다 :

1. 또한 ret[2][3] = 2.0f * far * near/range;가 있어야한다, 클립 공간이 -1 인 경우

GLM은 Result[2][2] = (zFar + zNear)/(zFar - zNear); 사용 ret[3][2] = 2.0f * far * near/range;ret[2][3] 1이어야합니다 - ret[2][3] = 1;

참고로, 자신의 수학 라이브러리를 사용하는 것이 가장 좋은 아이디어는 아닙니다. 설립 된 사람들은 항상 많은 사람들이 엄격한 테스트를 거칩니다. 그것은 훌륭한 운동이 될 수 있습니다, 나는 과거에 그것을 직접 해왔습니다. 그러나 아마도 여러분의 산출물을 테스트하기 위해 기존의 라이브러리를 사용하는 것은 좋은 생각 일 것입니다.