2012-09-20 38 views
11

मैं सी ++ में अपने ओपनजीएल जीएलयूटी सरल चंद्रमा लैंडर गेम में स्प्राइट जोड़ने के लिए एक सरल समाधान के लिए चारों ओर खोज रहा हूं और ऐसा प्रतीत होता है कि मुझे बीएमपी का उपयोग करना चाहिए क्योंकि वे लोड करने के लिए सबसे आसान हैं और उन्हें आयताकार पर बनावट के रूप में उपयोग करते हैं।एक बनावट के रूप में इसका उपयोग करने के लिए जीएलयूटी पर एक बीएमपी कैसे लोड करें?

हालांकि मैं बीएमपी को बनावट के रूप में कैसे लोड कर सकता हूं?

उत्तर

30

बनावट लोड करने के लिए मेरा सरल सी कार्यान्वयन फ़ंक्शन देखें।

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

यह बहुत मजेदार है, कभी भी अपना खुद का लेखन नहीं माना जाता है ... –

4

Checkout मेरी TextureLoader (TextureLoader.h + TextureLoader.cpp) OpenGL_3_2_Utils से:

https://github.com/mortennobel/OpenGL_3_2_Utils

दो फ़ाइलों किसी अन्य फ़ाइलों पर निर्भर नहीं करता है और यह भी ओपन के किसी भी संस्करण पर सहज काम करना चाहिए (और कोई मंच)। उदाहरण का उपयोग फ़ाइल टिप्पणी में पाया जा सकता है।

+0

शानदार का उपयोग कर texure बाध्य कर सकते हैं, धन्यवाद :) –

+1

मुझे याद आ glew.h फ़ाइल स्थानांतरित कैसे करूं? इसके बारे में यहां एक प्रश्न पोस्ट किया गया http://stackoverflow.com/questions/12518757/installing-glew-and-using-it-with-xcode –

+0

एसओ में एक स्पैम नीति है जिसके लिए आपके द्वारा विकसित टूल या एप्लिकेशन का उल्लेख करते समय प्रकटीकरण की आवश्यकता होती है। आपको वास्तव में कहना होगा कि वे आपका हैं। –