Image Loader

Das Laden von Bilddateien erfordert individuelle Implementierungen je nach verwendetem Bildformat. Der Einfachheit halber verwenden wir den weit verbreiteten Image Loader von Sean Barrett.

Wenn Sie nicht lange suchen wollen, können Sie die Datei stb_image.h auch direkt von meinem Server herunterladen. Speichern Sie die Datei in Ihren Projektordner (Computergrafik/cgm_05/stb_image.h)

Texturdatei

Laden Sie sich die Bilddatei thm2k.png herunter und speichern Sie sie unter Computergrafik/cgm_05/textures/thm2k.png

Header Datei texture.h

#pragma once

struct Texture
{
    Texture(const char* filename);
    ~Texture();
    unsigned int Id;
};

Implementierung in texture.cpp

#define STB_IMAGE_IMPLEMENTATION
#include <GLFW/glfw3.h>
#include "stb_image.h"
#include "texture.h"

Texture::Texture(const char *filename)
{
    glActiveTexture(GL_TEXTURE15);
    glGenTextures(1, &Id);
    glBindTexture(GL_TEXTURE_2D, Id);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);	
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

    int ww, hh, nrChannels;
    unsigned char *data = stbi_load(filename, &ww, &hh, &nrChannels, 0);
    if (data)
    {
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ww, hh, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    }
    stbi_image_free(data);
    glBindTexture(GL_TEXTURE_2D, 0);
}

Texture::~Texture()
{
    glDeleteTextures(1, &Id);
}

Makefile anpassen

Denken Sie daran die texture.cpp Ihrem Makefile hinzuzufügen.