2012-09-20 41 views

回答

30

看看我的簡單c實現函數來加載紋理。

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; 
} 

上面的函數返回紋理數據。存儲紋理數據變化

GLuint texture 
texture= LoadTexture("your_image_name.bmp"); 

現在你可以使用glBindTexture

glBindTexture (GL_TEXTURE_2D, texture); 
+7

+1爲實現自己的方式。 – Cosine

+1

這是線程不安全 – AbiusX

+0

這是很多樂趣,從來沒有考慮寫我自己的... – 2014-06-04 22:21:23

4

結帳我從OpenGL_3_2_Utils的TextureLoader(TextureLoader.h + TextureLoader.cpp):

https://github.com/mortennobel/OpenGL_3_2_Utils

兩個文件不依賴於任何其他文件,也應該在OpenGL任何版本的無縫(和任何平臺)。示例用法可以在文件註釋中找到。

+0

輝煌綁定texure,謝謝:) –

+1

如何添加缺少的glew.h文件?在這裏發佈一個關於此的問題http://stackoverflow.com/questions/12518757/installing-glew-and-using-it-with-xcode –

+0

SO有一個垃圾郵件策略,當您提到您開發的工具或應用程序時需要披露。你必須真的說他們是你的。 –

相關問題