OpenGL ES에서 퍼스펙티브 설정에 문제가 있습니다. 누구든지 어떤 조언이 있으십니까? 내 ortho 프로젝트는 다음과 같습니다 : glOrthof (-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);OpenGL ES에서 glFrustumf 설정
glFrustumf를 사용하여 비슷한 설정을 얻으려면 어떻게해야합니까?
OpenGL ES에서 퍼스펙티브 설정에 문제가 있습니다. 누구든지 어떤 조언이 있으십니까? 내 ortho 프로젝트는 다음과 같습니다 : glOrthof (-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);OpenGL ES에서 glFrustumf 설정
glFrustumf를 사용하여 비슷한 설정을 얻으려면 어떻게해야합니까?
여기에 perspective function using glFrustumf이있는 게시물과 glOrth 호출을 변환하는 방법이 도움이 될 수 있습니다.
나중에 카메라를 중앙에 놓으려면 glTranslatef를 호출해야 할 수도 있습니다.
- (void)drawView {
// Replace the implementation of this method to do your own custom drawing
const GLfloat squareVertices[] = {
-5.0f, -5.0f, 0.0f,
5.0f, -5.0f, 0.0f,
-5.0f, 5.0f, 0.0f,
5.0f, 5.0f, 0.0f,
};
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glViewport(0, 0, backingWidth, backingHeight);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, 0.0f);
//glOrthof(-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);
glEnable(GL_DEPTH_TEST);
perspective(85, 480/320, 0.1,20);
gluLookAt(0.0f, 0.0f, -5.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
glEnable(GL_CULL_FACE);
glClearDepthf(1.0f);
glColor4f(0.0f, 0.0f, 1.0f, .90f);
//glTranslatef(2.5f, 2.5f, 0.0f);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
아마도이 질문에 대한 편집 일 수 있습니까? ;) – f3r3nc
아니 내가는 OpenGL ES 응용 프로그램에 대한 애플의 엑스 코드 템플릿에서 만든 예상 깨고, 그러나 여기 실제로 깊이 NAD 관점에서 일하는 멋진 템플릿입니다 있었는지 확인하십시오
http://iphonedevelopment.blogspot.com/2008/12/updated-opengl-es-xcode-project.html
모든 도움을 주신 schnaader에게 감사드립니다.
gluLookAt와 같은 OpenGL ES에는 iPhone 및 OpenGL ES에 대한 정보가 없다고 가정합니다. 어떻게 구현됩니까?
카메라 위치가 (0,0,0)이고 사각형이 z 평면에도 있음을 유의하십시오. glLoadIdentity()를 호출하면 glTranslatef (0.0f, 0.0f, 0.0f)가 변경되지 않습니다.
설정 방법에서 대부분의 설정 부분을 옮길 수 있습니다. 예 : GlEnable 통화 및 카메라 설정. 투영 또는 Modelview 행렬에서 작동하려면 glMatrixMode가 사용되는지 확인하십시오. 설정 될 수있다 : drawView에서
- (void) setupView {
glViewport(0, 0, backingWidth, backingHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// think about the box where all the vertices are.
glFrustum(-8.0f, 8.0f, -12.0f, 12.0f, -8.0f, 20.0f);
// .. all sort of glEnable
}
그들에 일부 번역을 적용하여, 사용자의 정점이 카메라 앞에 있는지 확인하십시오. 또한 꼭지점의 색상을 지정하십시오.
- (void) drawView {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, 5.0f); // move in front
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
// maybe you want to attach colors to your vertices
const GLubyte squareColors[] = {
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
};
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// .. some other loadidentity and translate and vertex pointer setup and draw
}
OpenGL에 ES 기준이 유용 할 수 있습니다 http://www.khronos.org/opengles/sdk/1.1/docs/man/
하는 gluLookAt는 openGlEs의 일부는 아니지만, 대부분의 사람들은 그냥 소스를 들고 자신의 프로젝트에 놓습니다. 그 많은 코드가 아닙니다. 적어도 glFrustum을 어떻게 사용하는지에 대한 좋은 예가 될 것입니다.
나는 방금 아이폰과 함께 opengl에서 프로젝션 문제를 망쳐 놨다. 위의 예제 코드에서 glfrustum의 매개 변수가 작동하지 않으면 (-8.0f, 20.f) 잘못된 매개 변수 오류가 발생합니다. zNear는 긍정적 인 것으로 '필요'하고있는 것처럼 보입니다.
지식을 공유하고 싶었 기 때문에 머리를 부딪혀 왜 그 매개 변수를 변경해도 렌더링에 아무런 영향이 없었습니다!
어디로 번역해야할지 어떻게 알 수 있습니까? –
그건 좋은 질문입니다 :) 게시물에서, -eyex/-eyey/-eyez는 eyeX/Y/Z가 카메라가있는 지점 인 곳에 사용됩니다. – schnaader
아직 없습니다. 아래 코드를 게시 할 것입니다. 아마도 당신은 볼 수 있습니다 .. –