GLenum TextureFormat; // с альфой или без
unsigned long numpix = TextureImg.sizeX * TextureImg.sizeY; //кол-во пикселей в 1 слое
unsigned long rgbcntr=0, acntr=0, ncntr=0;
unsigned char *NewTexData=new unsigned char[numpix*4];
for(unsigned long i=0; i<numpix; i++)//пихать маску в альфаканал
{
NewTexData[ncntr++]=TextureImg.data[rgbcntr++];// rgbcntr++; //три раза по цвету...
NewTexData[ncntr++]=TextureImg.data[rgbcntr++];// rgbcntr++;
NewTexData[ncntr++]=TextureImg.data[rgbcntr++];// rgbcntr++;
NewTexData[ncntr++]=MaskImg.data[acntr++];// acntr++; //один раз по альфе
delete TextureImg.data;
TextureImg.data=NewTexData;
Data.UseAlpha=true;
glGenTextures(1, &Data.TextureID);
glBindTexture(GL_TEXTURE_2D, Data.TextureID);
if(ApplyAniso) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT, MaxAniso);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, TextureImg.sizeX, TextureImg.sizeY, 0, GL_RGBA, GL_UNSIGNED_BYTE, TextureImg.data);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_COMPRESSED_RGBA, TextureImg.sizeX, TextureImg.sizeY, GL_RGBA, GL_UNSIGNED_BYTE, TextureImg.data);
Альфаканал и прозрачность
У меня текстура с альфа-каналом, в котором содержится типа "карта прозрачности". Накладывая её на полигон хочу получить плавное изменение его прозрачности.
Какие только комбинации я не использовал - ни одной не подошло. Может я не все перепробовал, может чего-то дополнительно не включил, не знаю.
В чем проблема то? Ты вообще уверен, что ты загрузил альфа- канал? Какими средствами ты загружал?
Я гружу сначало обычную картинку с тремя каналами, а потом БМП-ху соханенную в grayscare. Потом переписываю пиксели в новый массив: три раза по картинке, 1 раз по grayscar-у. и потом все это пихается в:
Сейчас оснофные симптомы - неправильное распределение и величина прозрачности (такое ощущение, что альфаканал нафиг порубали топором) и иногда на некоторых текстурах без включеного режима блендинга появляются мелкие артефакты.
Пришлось пИсать через один пиксель.
Всем спасибо за внимание, пока.