2009-01-23 4 views
1

Je suis très nouveau sur OpenGL et j'utilise l'encapsuleur OpenGLES écrit pour les téléphones Windows Mobile (OpenGLES Windows Mobile). J'ai une tâche simple de dessiner un carré (obtenu ça) et de le texturer avec une image du disque, donc je veux simplement juste afficher un fichier jpg sur l'écran. Cependant, chaque fois que j'essaie de le faire, je reçois un carré blanc sans texture. J'ai vérifié que ma texture se charge correctement (en utilisant certains des exemples existants, et en remplaçant simplement la texture par la mienne). Donc je pense que mon problème est de mapper correctement la texture à l'objet. Voici mon code (fonctions et objets supprimés pour faire simple):Problème de mappage de texture dans OpenGLES

 private Bitmap image = new Bitmap(@"\Storage Card\someimage.jpg"); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); 
      myImage = Texture.LoadStream(ms, false); 
     } 
     gl.ShadeModel(gl.GL_SMOOTH); 
     gl.ClearColor(0.0f, 0.0f, 0.0f, 0.5f); 
     gl.BlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA); 
     gl.Hint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_NICEST); 
     glLocation.Clear(); 
     gl.Clear(gl.GL_COLOR_BUFFER_BIT); 
     gl.MatrixMode(gl.GL_PROJECTION); 
     gl.LoadIdentity(); 
     gl.Orthof(0, ClientSize.Width, ClientSize.Height, 0, 0, 1); 
     gl.Disable(gl.GL_DEPTH_TEST); 

     gl.MatrixMode(gl.GL_MODELVIEW); 
     gl.LoadIdentity(); 
     float[] rectangle = new float[] { 
      0, 0, 
      myImage.Width, 0, 
      0, myImage.Height, 
      myImage.Width, myImage.Height 
     }; 

     float[] texturePosition = new float[] { 
      0, 0, 
      myImage.Width, 0, 
      0, myImage.Height, 
      myImage.Width, myImage.Height 
     }; 

     //Bind texture 
     gl.BindTexture(gl.GL_TEXTURE_2D, myImage.Name); 
     gl.TexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR); 
     gl.TexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR); 
     //move cursor 
     glLocation.MoveCursor(Location.X, Location.Y); 
     gl.EnableClientState(gl.GL_TEXTURE_COORD_ARRAY); 
     gl.EnableClientState(gl.GL_VERTEX_ARRAY); 

     //draw square and texture it. 
     fixed (float* rectanglePointer = &rectangle[0], positionPointer = &texturePosition[0]) 
     { 
      gl.TexCoordPointer(2, gl.GL_FLOAT, 0, (IntPtr)positionPointer); 
      gl.VertexPointer(2, gl.GL_FLOAT, 0, (IntPtr)rectanglePointer); 
      gl.DrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4); 
     } 

     gl.DisableClientState(gl.GL_TEXTURE_COORD_ARRAY); 
     gl.DisableClientState(gl.GL_VERTEX_ARRAY); 
     egl.SwapBuffers(myDisplay, mySurface); 
     gl.Clear(gl.GL_COLOR_BUFFER_BIT); 

Répondre

0

Essayez de changer de position coords texture de myImage.Width et myImage.Height à 1,0. Les coeurs de texture vont de 0.0 à 1.0.

2

vous n'avez pas activé GL_TEXTURE_2D - ajoutez cette ligne

gl.glEnable(gl.GL_TEXTURE_2D)