2009-03-17 8 views
1

OpenGL ES에서 퍼스펙티브 설정에 문제가 있습니다. 누구든지 어떤 조언이 있으십니까? 내 ortho 프로젝트는 다음과 같습니다 : glOrthof (-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);OpenGL ES에서 glFrustumf 설정

glFrustumf를 사용하여 비슷한 설정을 얻으려면 어떻게해야합니까?

답변

0

여기에 perspective function using glFrustumf이있는 게시물과 glOrth 호출을 변환하는 방법이 도움이 될 수 있습니다.

나중에 카메라를 중앙에 놓으려면 glTranslatef를 호출해야 할 수도 있습니다.

+0

어디로 번역해야할지 어떻게 알 수 있습니까? –

+0

그건 좋은 질문입니다 :) 게시물에서, -eyex/-eyey/-eyez는 eyeX/Y/Z가 카메라가있는 지점 인 곳에 사용됩니다. – schnaader

+0

아직 없습니다. 아래 코드를 게시 할 것입니다. 아마도 당신은 볼 수 있습니다 .. –

1
- (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]; 
} 
+0

아마도이 질문에 대한 편집 일 수 있습니까? ;) – f3r3nc

1

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/

0

하는 gluLookAt는 openGlEs의 일부는 아니지만, 대부분의 사람들은 그냥 소스를 들고 자신의 프로젝트에 놓습니다. 그 많은 코드가 아닙니다. 적어도 glFrustum을 어떻게 사용하는지에 대한 좋은 예가 될 것입니다.

1

나는 방금 아이폰과 함께 opengl에서 프로젝션 문제를 망쳐 놨다. 위의 예제 코드에서 glfrustum의 매개 변수가 작동하지 않으면 (-8.0f, 20.f) 잘못된 매개 변수 오류가 발생합니다. zNear는 긍정적 인 것으로 '필요'하고있는 것처럼 보입니다.

지식을 공유하고 싶었 기 때문에 머리를 부딪혀 왜 그 매개 변수를 변경해도 렌더링에 아무런 영향이 없었습니다!

관련 문제