2016-04-10 27 views
1

Kısa süre önce OpenTK'yi indirdim. Temel bir oyun sınıfı ve bir dörtlük yarattım. Dörtliğimde bir doku oluşturmayı denedim ama işe yaramıyor. İşte benim kodum. Bu, dokusunun yüklenmesidir. (Doku sınıfı sadece bir ID ve bir Bitmap içerir. GetWidth() ve GetHeight() sadece Bitmap.Width ve Bitmap.Height'ı döndürür).C# OpenTK - Dokulu Dörtlü

 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; 

Bu, oluşturma yöntemidir.

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

Sadece dörtlü ve başka hiçbir şey oluşturmaz. Birisi bana yardım edebilir mi? değiştirilmesi

cevap

2

Dene: ile

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

Bu çözmek gerekir. Sizinkilerde kullandığınız, System.Drawing.Bitmap'in 32bpp Argb bitmap'lerini nasıl temsil ettiğini doğru olarak göstermediği biçim sorunları vardır.

+1

Teşekkür ederim, işe yaradı –

İlgili konular