как рисовать текстуры с помощью stb_image.c - PullRequest
1 голос
/ 29 сентября 2011

Я хочу загрузить эту картинку в 2d текстуру и затем нарисовать ее на экране. Основная проблема - загрузка картинки в текстурную переменную. Следующий код выводит правильную ширину, высоту и rgba, но как мне поместить данные в 3d текстуру.

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
/* more includes... */
#include "stb_image.h"

using namespace std;

int main(int argc, char** argv) {
    int x,y,n;
    unsigned char *data = stbi_load("png.png", &x, &y, &n, 0);
    if (data == NULL) {
        // error
        cout << "Error, data was null";
    } else {
        // process
        cout << data << endl << endl;
    }
    stbi_image_free(data);

    cout << x << endl << y << endl << n;
    return 0;
}

1 Ответ

5 голосов
/ 29 сентября 2011

Сначала вам нужно

  • a drawable (окно, PBuffer, кадровый буфер)
  • контекст OpenGL, связанный с отрисовкой

Вы можете использовать GLFW, SDL или GLUT для их получения (лично я рекомендую GLFW, если вам нужно только одно окно).

Создать имя текстуры с помощью

GLuint texture_name;

void somefunction(…)
{
glGenTextures(1, &texture_name);
glBindTexture(GL_TEXTURE_2D, texture_name);
glPixelStorei(…); /* multiple calls to glPixelStorei describing the layout of the data to come */
glTexImage2D(GL_TEXTURE_2D, miplevel, internal_format, width, height, border, format, type, data);
}

Это было быстрое и грязное объяснение, как его загрузить. Рисование это другое дело. Я предлагаю вам прочитать некоторые учебные пособия по OpenGL. Google для "NeHe" или "Lighthouse3D", или "Учебник по Arcsynthesis OpenGL".

...