C#OpenTK – 纹理四边形

我最近下载了OpenTK。 我创建了一个基本的游戏类和四元组。 我尝试在我的四边形中渲染纹理,但它不起作用。 这是我的代码。 这是纹理的加载。 (纹理类只包含一个ID和一个Bitmap.GetWidth()和GetHeight()只返回Bitmap.Width和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; 

这是渲染方法。

  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); 

它只渲染四边形,没有别的。 有人可以帮帮我吗?

尝试更换:

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

有:

 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); 

这应该解决它。 在您的格式问题中,您使用的是不能准确表示System.Drawing.Bitmap如何表示32bpp Argb位图。