C # OpenTK – Quad texturé

J’ai récemment téléchargé OpenTK. J’ai créé une classe de jeu de base et un quad. J’ai essayé de rendre une texture dans mon quad mais ça ne marche pas. Voici mon code. C’est le chargement de la texture. (La classe de texture contient uniquement un ID et un bitmap. GetWidth () et GetHeight () ne font que renvoyer les éléments Bitmap.Width et Bitmap.Height)

Texture Texture = new Texture (); Texture.Bitmap = new Bitmap (Path); Texture.ID = GL.GenTexture (); GL.BindTexture (TextureTarget.Texture2D, Texture.ID); BitmapData data = Texture.Bitmap.LockBits (new Rectangle (0, 0, Texture.GetWidth (), Texture.GetHeight ()), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); GL.TexImage2D (TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, Texture.GetWidth(), Texture.GetHeight(), 0, OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.Bitmap, data.Scan0); Texture.Bitmap.UnlockBits (data); GL.TexParameter (TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.Linear); GL.TexParameter (TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); return Texture; 

C’est la méthode de rendu.

  GL.Enable (EnableCap.Texture2D); GL.BindTexture (TextureTarget.Texture2D, ID); GL.Begin (PrimitiveType.Quads); GL.TexCoord2 (0, 1); GL.Vertex2 (0, 32); GL.TexCoord2 (1, 1); GL.Vertex2 (32, 32); GL.TexCoord2 (1, 0); GL.Vertex2 (32, 0); GL.TexCoord2 (0, 0); GL.Vertex2 (0, 0); GL.End (); GL.Disable (EnableCap.Texture2D); 

Il rend juste le quad et rien d’autre. Quelqu’un peut-il m’aider s’il vous plaît?

Essayez de remplacer:

 GL.TexImage2D (TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, Texture.GetWidth(), Texture.GetHeight(), 0, OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.Bitmap, data.Scan0); 

avec:

 GL.TexImage2D (TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, Texture.GetWidth(), Texture.GetHeight(), 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge); 

Cela devrait le résoudre. Dans le vôtre, il existe des problèmes de format dans lesquels ce que vous avez utilisé ne représente pas exactement comment System.Drawing.Bitmap représente des bitmaps 32bpp Argb.