2016-04-10 53 views
1

最近OpenTKをダウンロードしました。私は基本的なゲームクラスとクワッドを作りました。私は自分のクワッドでテクスチャをレンダリングしようとしましたが、動作しません。ここに私のコードです。これがテクスチャの読み込みです。 GetWidth()とGetHeight()は、単にBitmap.WidthとBitmap.Heightを返します。C#OpenTK - Textured Quad

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

これはクワッドだけをレンダリングし、それ以外のものはレンダリングしません。誰か助けてくれますか?

答えて

2

は交換してみてください:

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ビットマップを表す方法を正確に表現していない形式の問題があります。

+1

ありがとうございました。 –

関連する問題