배경 : 나는 아이폰 OpenGLES 2.0을 배우려고 노력하고 애플이 엑스 코드에서 제공하는 템플릿 프로젝트로 난처한 상황에 빠진 한프로젝션 매트릭스
.
기본 프로젝트는 2D 사각형을 보여 주지만, 나는 z 축에 다양한 깊이로 정점을 추가 실험을합니다. 애플의 기본 OpenGL을 프로젝트에서
, 그들은 단지 x와 버텍스 쉐이더에 전달 된 y 좌표를 사용하여 2D 사각형을 그립니다.차원 공간에서 정점 배치를 실험하기 위해, I는 샘플 프로젝트 정점 데이터에 z 값을 추가했다. 그런 다음 glVertexAttribPointer 메서드의 size 매개 변수를 2에서 3으로 변경했습니다. 정점에서 z 값을 변경하여 프로그램을 실행했을 때 정사각형이 뒤쪽으로 기울어 진 것처럼 보이게했습니다.
문제
는 여전히 같은 2D 사각형으로 나타난다는 것이다. 필자의 독서에 따르면 이것은 투영 행렬이 원근법 대신 정사각형으로 설정되어 있기 때문에 발생한다고 생각합니다.질문 :
가 어떻게 애플의 템플릿 OpenGL을 프로젝트에 OpenGLES 2.0을 사용하여 직교의 관점에 투영 행렬을 변경합니까?
나는 시도했다 :
glMatrixMode (GL_PROJECTION); glLoadIdentity(); glFrustumf (-0.5, 0.5, -0.5, 0.5, 1, 10);
그러나 결과는 바뀌지 않았습니다.
I는 또한 정점 셰이더 프로그램이 같은 것을 추가 시도 :
mat4 projectionMatrix = {2.0/320.0, 0.0, 0.0, -1.0, 0.0, 2.0/480.0, 0.0, -1.0 , 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0};
gl_Position * = projectionMatrix;
하지만 그 중 하나도 작동하지 않았습니다.
1.0 용이었던 OpenGLES 2.0에서 투영 행렬을 다르게 설정하는 방법이 있습니까? 노력하고있는 물건이 2.0과 호환되지 않을 수도 있습니다.
미리 감사드립니다.
마이크
업데이트 도움 요한
감사합니다. 정말 감사. 내 EAGL보기에서 createFramebuffer 메서드에 다음 코드를 추가하여 제안 사항을 기반으로 깊이 버퍼를 추가하려했지만 여전히 변경하지 않았습니다.
// Create depth render buffer and allocate backing store.
glGenRenderbuffers(1, &depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
그리고 내 렌더링 방법에 다음 코드를 추가 할 경우 :
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-0.5, 0.5, -0.5, 0.5, 1, 10);
엑스 코드에서 예외가 발생합니다. 이견있는 사람?
안녕하세요, John은 glMatrixMode가 OpenGLES 2.0에서 작동하지 않는다고 생각합니다. 머리글을 살펴 봤지만 2.0 버전에서는 표시되지 않지만 1.0 버전에서는 표시됩니다. 웹에서 glViewport 함수가 glMatrixMode를 대체하고 버전 2.0의 다른 관련 함수를 많이 읽었습니다. 아무도 이것을 확인할 수 있습니까? 감사! – Hivebrain