바로 그 지점으로갑니다. 나는 이미 약간의 reasearch를했고 아직도 나는 이것을 알아 내지 못했다.Orthographic Projection의 최신 OpenGL 문제
각 얼굴에 색상을 사용하여 입방체를 그려주는 프로그램이 있습니다. 그런 다음이 큐브를 Y 축과 X 축 (각각 -45와 +45)으로 회전시킵니다.
문제는 내가 기대했던대로 렌더링되지 않는다는 것입니다. 큐브가 어느 시점에서 잘려나 가고 있습니다.
코드 : 나는 정의하고
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f);
camera = glm::lookAt(
glm::vec3(+0.0f,+0.0f,+1.0f),
glm::vec3(0.0f,0.0f,0.0f),
glm::vec3(0.0f,1.0f,0.0f)
);
model = glm::mat4(1.0f);
model = glm::rotate(model, -45.0f, glm::vec3(0.0f, 1.0f, 0.0f));
model = glm::rotate(model, +45.0f, glm::vec3(1.0f, 0.0f, 0.0f));
mvp = projection * camera * model;
모든 정점 ± 0.25로 만들어집니다. 그래서 난 아직도 볼륨에 딱 맞는 zNear 및 zFar 그들이 내이 값을 적어도 그 생각,하지만 난
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +2.0f, -1.0f);
의 라인
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f);
을 변경할 때 그것은 잘 작동
그러나
작동하지 않습니다누군가 내게 이유를 설명 할 수 있습니까? 나는 더 많은 값을 넣으면 프로젝션 큐브의 볼륨이 커지므로 잘 렌더링된다는 것을 알고 있습니다. 나도 알다시피 오른쪽 하단 정점은 zNear와 zFar가 +1.0과 -1.0 (꼭지점 값은 행렬의 적용 후에 1.76과 비슷합니다.)이지만 zFar 큐브를 -2.0f로 확장하면 큐브 밖에 있습니다. 그렇지?
레드 북과 Peter Shirley의 컴퓨터 그래픽 기초 자료를 읽으려고했습니다. 심지어 매트릭스를 혼자서 만들었지 만 동일한 결과를 보았습니다.
어쨌든 미리 감사드립니다.
답장을 보내 주셔서 감사합니다! 그러나 나는 가까운 비행기가'ortho (T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)라고 생각했습니다. ' 멀리 평면 -2 시도하고 볼 수, 정점에 대한 매트릭스의 계산에 의해 왼쪽 하단 정점에서 Z 구성 요소는 +0.25에서 -1.75갑니다. 그래서 저는 그것이 먼 비행기에 의해 잘리고 있다는 것을 이해합니다. 그러나 멀리 비행기를 -2에 댈 때 그것은 여전히 발생합니다. –
원거리 평면의 목적은 카메라가 렌더링 할 수있는 가장 먼 거리를 정의하는 것입니다. -2로 설정하면 멀리있는 비행기가 카메라 뒤에있을뿐만 아니라 가까운 비행기 뒤쪽에있게됩니다 (일반적으로 원하는 것은 아닙니다). 대신에 원하는 것은 가까운 평면보다 큰 양의 값을 가진 먼 평면입니다. 예를 들어, 나는 보통 0.01의 근사 평면과 100의 원 평면을가집니다. –
아마도, 나는 멀리 평면이 어디에 있는지 오해하고 있습니다. 왜냐하면 카메라를 (0,0,1)에 놓고 보면 (0,0,0)은 가까운 평면을 아주 가깝게 만들고 멀리있는 평면을 카메라 뒤에서 볼 수 있지만 여전히 카메라로 볼 수 있다고 생각했기 때문입니다. 그래서 가까운 값을 0.01로 설정하고 100으로 설정하면이 두 값 사이의 모든 정점 구성 요소를 올바르게 정의해야합니다. –