我希望避免从文件中加载纹理,并希望在头文件中包含纹理。我可以使用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是指向像素数组的指针。我做错了什么?