int tex_n,int level)

(

string temp,fname,fext; temp=str;

int npos,fpos,tex_i=0,ret=0;

// генерирует tex_n имен для текстур glGenTextures(tex_n, tex); while(npos>=0)

(

npos=temp.find(' ',0); // ищем пробел

fname=temp.substr(0,npos); // выделить имя файла fpos=fname.rfind('.'); // ищем точку с конца // выделение расширения файла fext=fname.substr(fpos+1); if(fext=="bmp") if(!loadbmp((char*)fname.c_str())) return 0; if(fext=="tga") if( ! loadtga((char*)fname.c_str())) return 0; temp.erase(0,npos+1);

// используем 24- или 32-битные текстуры if(bpp>=24)

(

glBindTexture(GL_TEXTURE_2D,tex[tex_i++]);

// способ интерполяции в случае,

// когда рисунок меньше исходного размера glTexParameteri(GL_TEXTURE_2D,

GL_TEXTURE_MIN_FILTER,GL_LINEAR);

// способ интерполяции в случае,

// когда рисунок большего размера glTexParameteri(GL_TEXTURE_2D,

GL_TEXTURE_MAG_FILTER,GL_LINEAR);

// повторение текстуры в направлении s glTexParameteri(GL_TEXTURE_2D,

GL_TEXTURE_WRAP_S,GL_REPEAT); // повторение текстуры в направлении t glTexParameteri(GL_TEXTURE_2D,

GL TEXTURE WRAP T,GL REPEAT);

// выбираем только цвет текстуры glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, (float)GL_REPLACE);

// устанавливаем изображение как текстуру glTexImage2D(GL_TEXTURE_2D,level, (bpp==24)? 3:4, width,height,0,(bpp==24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE,inddata) ; re t + +;

}

}

return ret; // число загруженных текстур }

// вывод изображения в буфер цвета // в текущую растровую позицию void IMAGE::tocolor()

{

switch(bpp)

{

case 1:

glBitmap(width,height,0,0,width, height,inddata) ; break;

case 8:// не забудьте настроить палитру в OpenGl glDrawPixels(width,height,GL_COLOR_INDEX, GL_UNSIGNED_BYTE,inddata);

break; case 24 :

glDrawPixels(width,height,GL_RGB,

GL_UNSIGNED_BYTE, inddata);

break; case 32:

glDrawPixels(width,height,GL_RGBA,

GL_UNSIGNED_BYTE,inddata);

break; default:;

}

}

// установка палитры изображения в OpenGl void IMAGE::glsetpal(int r,int g,int b,int a,

int start,int num)

{

if(num==0)num=sizepal; float* temp=new float[num];

if(r) // таблица преобразования красного канала {

for(int i=start,j=0;i<num+start;i++) temp[j++]=(float)pal[i*4]/255.0; glPixelMapfv(GL_PIXEL_MAP_I_TO_R,num,temp);

}

if(g) // таблица преобразования зеленого канала {

for(int i=start,j=0;i<num+start;i++) temp[j + +] =(float)pal[i*4+l]/255.0; glPixelMapfv(GL_PIXEL_MAP_I_TO_G,num,temp);

}

if(b) // таблица преобразования синего канала

{

for(int i=start,j =0;i<num+start;i + +) temp[j++]=(float)pal[i*4+2]/255.0; glPixelMapfv(GL_PIXEL_MAP_I_TO_B, num, temp);

}

if(a) // таблица преобразования альфа-канала

{

for(int i=start,j =0;i<num+start;i + +) temp[j++]=(float)pal[i*4+3]/255.0; glPixelMapfv(GL_PIXEL_MAP_I_TO_A,num,temp);

}

delete[]temp;

// вывод изображения в буфер трафарета void IMAGE::tostencil()

{

switch(bpp)

{

case 1:

glDrawPixels(width,height,

GL_STENCIL_INDEX,GL_BITMAP,inddata);

break;

case 8:

glDrawPixels(width,height,GL_STENCIL_INDEX, GL_UNSIGNED_BYTE,inddata);


⇐ вернуться назад | | далее ⇒