2009-03-17 7 views
1

Je n'arrive pas à obtenir une perspective configurée dans OpenGL ES. Quelqu'un a des conseils? Mon projet ortho ressemblait à ceci: glOrthof (-8.0f, self.frame.size.width, -12.0f, self.frame.size.height, -8.0f, 20.0f);Configuration de glFrustumf dans OpenGL ES

Comment puis-je obtenir une configuration similaire avec glFrustumf?

Répondre

0

Voici un post avec un perspective function using glFrustumf et comment convertir un appel de glOrthof, peut-être que cela aide. Notez que vous devrez peut-être appeler ultérieurement glTranslatef pour centrer l'appareil photo.

+0

Comment savoir où traduire? –

+0

C'est une bonne question :) Dans le post, -eyex/-eyey/-eyez sont utilisés où eyeX/Y/Z est le point où la caméra est. – schnaader

+0

Encore rien. Je vais poster mon code ci-dessous, peut-être vous pouvez jeter un oeil .. –

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

peut-être que cela pourrait être une modification sur la question? ;) – f3r3nc

1

Il n'y a rien de tel dans OpenGL ES comme gluLookAt, en supposant qu'il s'agisse d'iPhone et d'OpenGL ES. Comment cela est-il mis en œuvre? Gardez à l'esprit que la position de la caméra est (0,0,0) et que votre carré est également sur ce plan z. Si vous appelez glLoadIdentity(), glTranslatef (0.0f, 0.0f, 0.0f) n'apportera aucune modification.

Vous pourriez peut-être envisager de déplacer la plus grande partie de la configuration dans une méthode d'installation. ie: appels GlEnable et configuration de la caméra. Assurez-vous que le glMatrixMode est utilisé pour fonctionner sur la matrice Projection ou ModelView. installation pourrait être:

- (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 
} 

Dans drawView assurez-vous que vos sommets sont en face de la caméra, en appliquant une traduction sur eux. Ayez également des couleurs pour vos sommets.

- (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 
} 

La référence OpenGL ES peut également être utile: http://www.khronos.org/opengles/sdk/1.1/docs/man/

0

Bien que gluLookAt ne fait pas partie de OpenGLES, la plupart des gens simplement saisir la source et le déposer dans leur projet. ce n'est pas beaucoup de code. à tout le moins, ça va donner un bon exemple de ce qui se passe avec glFrustum.

1

Je viens de jouer avec des problèmes de projection dans opengl es avec iphone. Les paramètres pour glfrustum dans l'exemple de code ci-dessus ne fonctionnent pas (-8.0f, 20.f), ils donnent des erreurs de paramètres invalides. zNear semble avoir «besoin» d'être positif. Je voulais juste partager la connaissance, car je m'étais cogné la tête en essayant de comprendre pourquoi le changement de ces paramètres n'avait aucun effet sur le rendu!

Questions connexes