如何使用stb_image.c绘制纹理

时间:2011-09-29 16:45:14

标签: c++ opengl textures texture2d osx-snow-leopard

我想将此图片加载到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 个答案:

答案 0 :(得分:5)

首先你需要

  • 一个drawable(窗口,PBuffer,framebuffer)
  • 与drawable相关联的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教程。谷歌为“NeHe”或“Lighthouse3D”,或“Arcsynthesis OpenGL教程”。