public static Texture create(int width, int height) { Texture t = new Texture(); t.id = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, t.id); byte[] data = new byte[width * height * 4]; GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); GL.BindTexture(TextureTarget.Texture2D, 0); return t; }
public static Texture fromFile(string path, int mipmaps = 0) { if (!File.Exists(path)) throw new ArgumentException(path); Texture t = new Texture(); t.id = GL.GenTexture(); Bitmap bmp = new Bitmap(path); bmp.RotateFlip(RotateFlipType.RotateNoneFlipY); BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); GL.BindTexture(TextureTarget.Texture2D, t.id); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0); bmp.UnlockBits(data); bmp.Dispose(); if (mipmaps > 0) { GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinLod, 0); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLod, mipmaps); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); } else { GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); } GL.BindTexture(TextureTarget.Texture2D, 0); return t; }
private void load() { models = new ContentManager<VertexBufferObject>("Data/Models/", new LoadContentFunction<VertexBufferObject>( (string name, string path) => new VertexBufferObject(OBJLoader.loadModelfromOBJ(path + name + ".obj")))); textures = new ContentManager<Texture>("Data/Textures/", new LoadContentFunction<Texture>( (string name, string path) => Texture.fromFile(path + name + ".png"))); Mesh[] meshes = OBJLoader.loadModelfromOBJ("Data/Models/Motorrad.obj"); models.add("motorcycle", new VertexBufferObject(meshes[0])); models.add("wheel", new VertexBufferObject(meshes[1])); textures.add("motorcycle", Texture.fromFile("Data/Textures/Motorrad.png")); Mesh[] tmmeshes = OBJLoader.loadModelfromOBJ("Data/Models/tm.obj"); models.add("tachometer", new VertexBufferObject(tmmeshes[1])); models.add("tachometer|", new VertexBufferObject(tmmeshes[0])); textures.add("tachometer", Texture.fromFile("Data/Textures/tm2.png")); textures.add("tachometer|", Texture.fromFile("Data/Textures/tm.png")); meshes = OBJLoader.loadModelfromOBJ("Data/Models/tree.obj"); models.add("tree", new VertexBufferObject(meshes[1])); models.add("leaf", new VertexBufferObject(meshes[0])); //textures.add("leafs",Texture.fromFile("Data/Textures/leafs.png",5)); grassModel = new VertexBufferObject(OBJLoader.loadModelfromOBJ("Data/Models/grass.obj")[0]); grassTexture = Texture.fromFile("Data/Textures/grass.png",5); //Framebuffer GL.GenFramebuffers(1, out framebuffer); GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebuffer); //Depth texture GL.GenTextures(1, out depthTextureArray); GL.BindTexture(TextureTarget.Texture2DArray, depthTextureArray); GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge); GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); //GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.CompareRToTexture); GL.TexImage3D(TextureTarget.Texture2DArray, 0, PixelInternalFormat.DepthComponent16, depthTextureWidth, depthTextureWidth, 3, 0, PixelFormat.DepthComponent, PixelType.Float, new IntPtr(0)); GL.BindTexture(TextureTarget.Texture2DArray, 0); //--> framebuffer GL.FramebufferTexture(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, depthTextureArray, 0); GL.DrawBuffer(DrawBufferMode.None); GL.ReadBuffer(ReadBufferMode.None); FramebufferErrorCode ec = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (ec != FramebufferErrorCode.FramebufferComplete) throw new Exception("Framebuffer konnte nicht erstellt werden!"); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }