OPENGL наложение Visual C++
Есть трава. На неё пытаюсь покласть камень (спрайт)- но он не смешивается стравой (вокруг камня белый квадрат).
Код прилагается
---------------------------------------
Для начала просто скажи ты камень с помошью мультитекстурирования положиь пытаешься?
Если да, то уравнение прохода нужно задать так:
glActiveTextureARB(GL_TEXTURE0_ARB); //Первый блок текстурирования
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, imgID1);
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
glActiveTextureARB(GL_TEXTURE1_ARB); //Второй...
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, imgID2);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA);
//К текстуре камня (и вообще к текстурам которые будут использоваться во втором текстурном блоке) присобач маску в альфа канал - где видимая часть 255, а та которая отбрасывается 0.
http://www.bave.izhevsk.net/index.files/grassandstone.jpg - вот например картинка,
таким способом получена... - там видно первый(трава) и второй блок (камни) и оба вместе наложенные интерполяцией двух блоков
(GL_INTERPOLATE_EXT)
"//К текстуре камня (и вообще к текстурам которые будут использоваться во втором текстурном блоке) присобач маску в альфа канал - где видимая часть 255, а та которая отбрасывается 0.
"
нибудь редактором.
-------------------------------------------------------------
Я фотошопом пользоваться не умею, поэтому делаю так:
1. Указатель на растр, к которой цепляется маска
2. Указатель на растр самой маски
3. Произведение ширны на высоту растра (по идее, маска и растр
одного разрешения, но если в твоем случае это не так то переделать
не проблема)
----------------------------------------------------------------
void joinmask(void *pbitmap, void *pmask, unsigned int count)
{
__asm
{
mov ebx, pbitmap
mov edx, pmask
mov ecx, count
label1:
mov al,00h
mov edi,00000000h
push ecx
mov ecx,00000003h
label2:
cmp BYTE ptr [edx+edi],00h
je zero_byte
add al,1
zero_byte:
inc edi
dec ecx
jnz label2
cmp al,00h
je mask_byte
mov BYTE ptr [ebx+3],00FFh
jmp next
mask_byte:
mov BYTE ptr [ebx+3],00h
next:
pop ecx
add ebx,4
add edx,4
dec ecx
jnz label1
}
}