Как вывести загруженную текстуру на экран с помощью openGL

Я использую функцию:

GLuint LoadTexture(const char* filename)
{

    GLuint texture;

    int width, height;

    unsigned char* data;

    FILE* file;

    file = fopen(filename, "rb");

    if (file == NULL) return 0;
    width = 1024;
    height = 512;
    data = (unsigned char*)malloc(width * height * 3);
    //int size = fseek(file,);
    fread(data, width * height * 3, 1, file);
    fclose(file);

    for (int i = 0; i < width * height; ++i)
    {
        int index = i * 3;
        unsigned char B, R;
        B = data[index];
        R = data[index + 2];

        data[index] = R;
        data[index + 2] = B;

    }


    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);


    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data);
    free(data);

    return texture;
}

в функции display():

GLuint texture;
texture = LoadTexture("bubble.png");
glBindTexture(GL_TEXTURE_2D, texture);

как сделать чтобы текстура отображалась на экране? что мне нужно сделать после того, как я привязал текстуру?


person Hurrairah Nasir    schedule 04.12.2019    source источник
comment
Вы не можете загрузить файл .png таким образом! fread просто читает PNG, но не декодирует его. Я рекомендую использовать библиотеку типа STB. См. Как загрузить bmp на GLUT, чтобы использовать его как текстуру?   -  person Rabbid76    schedule 04.12.2019
comment
Вам нужно привязать текстуру, включить текстурирование (конвейер фиксированных функций) или использовать шейдер, который выполняет текстурирование (конвейер шейдеров), и нарисовать какую-нибудь фигуру, например четырехугольник. Не забывайте, что фигуре, которую вы рисуете, нужны текстурные координаты.   -  person user253751    schedule 05.12.2019


Ответы (1)


Если ваша Текстура загружена правильно, вам нужен конвейер шейдеров, содержащий шейдер вершин и шейдер фрагментов. Затем вы можете визуализировать прямоугольник и применить текстуру на этапе шейдера фрагментов.

Кстати. SOIL — отличная библиотека для загрузки текстур.

person ich.    schedule 04.12.2019
comment
Нет, он загружается неправильно, потому что это png-файл. Файл png читается, но не декодируется. - person Rabbid76; 04.12.2019
comment
Раньше я использовал почву, но моя проблема не в загрузке текстуры. его с отображением. я не знаю, как это сделать. я просто хочу исходный код. я не хочу вдаваться в подробности opengl. просто хочу вывести изображение на экран. - person Hurrairah Nasir; 04.12.2019
comment
@HurrairahNasir Я не хочу вдаваться в подробности об opengl - вы должны. Короткого решения нет (кроме последовательности Legacy OpenGL - glBegin/glEnd). Прочитайте учебник, например. Изучите OpenGL — Текстуры. - person Rabbid76; 04.12.2019
comment
Я дам вам пример кода, когда я буду дома. Хотя понимание необходимо при работе с OpenGL. Вы можете использовать его в качестве основы, но я настоятельно рекомендую пройти обучение и изучить основы. - person ich.; 04.12.2019