来自pixmap的opengl纹理

时间:2014-11-05 11:04:41

标签: c++ opengl textures

我希望避免从文件中加载纹理,并希望在头文件中包含纹理。我可以使用pixmaps将图像存储在标题中,但不知道如何在OpenGL中将它们作为纹理加载。有谁知道如何做到这一点?

我已经使用了框架(FLTK),所以不能使用Qt / GTK等。

编辑:更新:

我已经手动浏览了pixmap,并创建了一个存储在数组float *img中的rgb值的浮点数组。然后我手动绑定纹理。

如此明确,而我曾经只有

texture = SOIL_load_OGL_texture("filename", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS);

我现在有

texture = pixmaptotexture(somepixmap);

其中pixamaptotexture是我自己的函数,它执行此操作

GLuint pixmaptotexture(const char **p){

    //convert pixmap to array of floats in array called img assigned dynamically.

   //ie:

   //some code here to find width (w) height (h), number of colours and what they are etc. from pixmap

   float* img = new [w*h*3];

   for (int i=0;i<w;i++){
       for (int j=0;j<h;j++){

          //some code goes here to determine rgb value from pixmap
           img[i*w+j*h+0]=r;
           img[i*w+j*h+1]=g;
           img[i*w+j*h+2]=b;
       }
   }

   GLuint TexID;
   glGenTextures(1, &TexID);
   glBindTexture(GL_TEXTURE_2D, TexID);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_FLOAT, img);
   delete []img;

   return TexID;
}

但现在纹理不起作用了。我究竟做错了什么?我的代码中的其他所有内容都是相同的。我只是用我的功能换掉土壤装载线。

第二次编辑:

所以我现在已将原始像素存储在头文件中,但我无法使纹理生效

这有效:

texture = SOIL_load_OGL_texture("filename", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS);

现在我用

替换它
   glGenTextures(1, &texture);
   glBindTexture(GL_TEXTURE_2D, TexID);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_FLOAT, img);

其中img是指向像素数组的指针。我做错了什么?

0 个答案:

没有答案