Results 1 to 4 of 4

Thread: Problem with Vincent 3D Library and perspective projection

  1. #1
    Junior Member
    Join Date
    Mar 2009
    Posts
    2

    Problem with Vincent 3D Library and perspective projection

    Hi everyone.

    I'm having some strange problems using Vincent 3D library 1.0 with windows mobile emulator. I have tried both Windows mobile 6 and pocket pc 2003 emulator.
    The problem occur using perspective projection. When the camera is between the z-near and the z-far coordinates (where z is my depth axis) of a 3D solid, strange transformations occur.
    The best way to explain is to show you a video: http://www.youtube.com/watch?v=HMgvZtc1Uog
    The cube has x coordinate equal to -4.0, the camera does not pass thorugh it.
    I tried the same animation on several code examples and i always got the same result. Also using UG lib instead of GLUT|ES same problem occurs

    Where's the problem? Is is a library bug?!!

    Here the relevant OpenGL code:

    Code :
    bool InitOGLES()
    {  
    	EGLConfig configs[10];
    	EGLint matchingConfigs;	
     
    	  /*configAttribs is a integers list that holds the desired format of 
    	   our framebuffer. We will ask for a framebuffer with 24 bits of 
    	   color and 16 bits of z-buffer. We also ask for a window buffer, not 
    	   a pbuffer or pixmap buffer*/	
    	  const EGLint configAttribs[] =
    	  {
    	      EGL_RED_SIZE,       8,
    	      EGL_GREEN_SIZE,     8,
    	      EGL_BLUE_SIZE,      8,
    	      EGL_ALPHA_SIZE,     EGL_DONT_CARE,
    	      EGL_DEPTH_SIZE,     16,
    	      EGL_STENCIL_SIZE,   EGL_DONT_CARE,
    	      EGL_SURFACE_TYPE,   EGL_WINDOW_BIT,
    	      EGL_NONE,           EGL_NONE
    	  };
     
     
    	hdc = GetWindowDC(hWnd);
    	  glesDisplay = eglGetDisplay(hdc);	 //Ask for an available display
     
    	  //Display initialization(donít care about the OGLES version numbers)
    	  if(!eglInitialize(glesDisplay, NULL, NULL)) 
    	    return false;
     
    	  /*Ask for the framebuffer confiburation that best fits our 
    	  parameters. At most, we want 10 configurations*/
    	  if(!eglChooseConfig(glesDisplay, configAttribs, &configs[0], 
    				10,  &matchingConfigs)) 
    	   return false;
     
    	  //If there isnít any configuration enough goodÖ
    	  if (matchingConfigs < 1)  return false;	  
     
     
    	  glesSurface = eglCreateWindowSurface(glesDisplay, configs[0],
    		  hWnd, configAttribs);	
     
    	  if(!glesSurface) return false;
     
    	// Letís create our rendering context
    	 glesContext=eglCreateContext(glesDisplay,configs[0],0,configAttribs);
     
    	  if(!glesContext) return false;
     
    	  //Now we will activate the context for rendering	
    	  eglMakeCurrent(glesDisplay, glesSurface, glesSurface, glesContext); 
     
     
    	  glClearColor(255, 255, 255, 0);
    	  glShadeModel(GL_FLAT);
    	  glEnable(GL_DEPTH_TEST);
    	  glEnable(GL_CULL_FACE);
     
    	  RECT r;
    	  GetWindowRect(hWnd, &r);  
    	  glViewport(r.left, r.top, r.right - r.left, r.bottom - r.top);
     
    	  float ratio = (float)(r.right - r.left)/(r.bottom - r.top);
    	  glMatrixMode(GL_PROJECTION);
    	  glLoadIdentity();
    	  gluPerspectivef(45.0f, ratio, 0.1f, 1000.0f);
    	  glMatrixMode(GL_MODELVIEW);	
     
    	  glEnableClientState(GL_VERTEX_ARRAY);
    	  printf("Rendering...\n");
     
    	  return true;
    }
    void render() 
    {
      static GLubyte front[]  = {2,1,3,0}; //front face
      static GLubyte back[]   = {5,6,4,7}; //back face
      static GLubyte top[]    = {6,2,7,3}; //top face
      static GLubyte bottom[] = {1,5,0,4}; //bottom face    
      static GLubyte left[]   = {3,0,7,4}; //left face
      static GLubyte right[]  = {6,5,2,1}; //right face
     
      static GLshort vertices[] = {-1,-1,-1,  1,-1,-1,  1,1,-1, -1,1,-1,  
                          -1,-1,1,   1,-1,1,   1,1,1,  -1,1,1};
      static GLfloat k = -20;
     
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();
     
      gluLookAtf( 0,0,0, 
    	      0,0,-1,
    	      0, 1, 0
      );
     
      glTranslatef(-4,0,k);
      k += 0.1;
     
      glVertexPointer(3, GL_SHORT, 0, vertices);
     
      /*We are going to draw the cube, face by face, with different colors for 
      each face, using indexed vertex arrays and triangle strips*/
      glColor4f(1,0,0,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, front);
     
      glColor4f(0,1,0,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, back);
     
      glColor4f(0,0,1,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, top);
     
      glColor4f(1,1,0,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, bottom);
     
      glColor4f(0,1,1,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, left);
     
      glColor4f(1,0,1,0);
      glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, right);
     
     
      eglSwapBuffers(glesDisplay, glesSurface);
    }

  2. #2
    Senior Member
    Join Date
    Sep 2003
    Location
    Seattle, WA
    Posts
    246

    Re: Problem with Vincent 3D Library and perspective projection

    Make sure to comment out the following lines in ContextRender.cpp (671 + 672):

    671 if (rasterPos->m_ClipCoords.w() < 0)
    672 rasterPos->m_ClipCoords = -rasterPos->m_ClipCoords;

    - HM

  3. #3
    Junior Member
    Join Date
    Mar 2009
    Posts
    2

    Re: Problem with Vincent 3D Library and perspective projection

    Great! It works now. Thanks a lot!

  4. #4
    Senior Member
    Join Date
    Sep 2003
    Location
    Seattle, WA
    Posts
    246

    Re: Problem with Vincent 3D Library and perspective projection

    You're welcome. I really need to get around re-releasing the library with a couple of bug fixes...

    - HM

Similar Threads

  1. two-point perspective projection
    By dsasha in forum OpenGL ES general technical discussions
    Replies: 3
    Last Post: 06-03-2009, 03:43 AM
  2. Orthogonal and perspective projection at the same time.
    By Insight77 in forum OpenGL ES general technical discussions
    Replies: 1
    Last Post: 04-06-2009, 09:38 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •