示例#1
0
        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;
        }
示例#2
0
        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;
        }
示例#3
0
        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);
        }