-
Доброго времени суток. У меня такая проблема. Мне надо что бы на текстуре один цвет был полностью прозрачен. Я кое-что нарыл в инете, но оно не работает вот код :
r := TBitmap.Create;
r.LoadFromFile('cursor.bmp');
n := TBitmap.Create;
n.LoadFromFile('cursor_bland.bmp');
For i := 0 to 127 do
For j := 0 to 127 do begin
bits2 [i, j, 0] := GetRValue(r.Canvas.Pixels[i,j]);
bits2 [i, j, 1] := GetGValue(r.Canvas.Pixels[i,j]);
bits2 [i, j, 2] := GetBValue(r.Canvas.Pixels[i,j]);
bits2 [i, j, 3] := GetBValue(n.Canvas.Pixels[i,j]);
end;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_nearest);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_nearest);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,128,128,GL_RGBA,GL_UNSIGNED_BYTE,@bits2);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glVertexPointer(3, GL_FLOAT, 0, @bVertex);
glTexCoordPointer(3,GL_FLOAT,0,@bVertex);
glDrawArrays(gl_quads, 0, 4);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_BLEND);
-
если GetBValue(n.Canvas.Pixels[i,j]) = прозрачный_цвет тогда bits2 [i, j, 3] := 0 иначе bits2 [i, j, 3] := 255;
-
тьфу... * если n.Canvas.Pixels[i,j] = прозрачный_цвет тогда ...
-
синий канал... мож ему colorkey нужно? тогда и другие на 0 нужно проверять
-
Текстура стала прозрачной, но примитив на которой она нарисована - нет
-
GL_DECAL замени на GL_MODULATE
-
Теперь фсё работает как надо, токо фсё стало очень тёмным.
-
> [5] XProger © (04.10.08 23:34)
Первое что я ему посоветовал. :))
-
Так как мне от темноты избавится?
-
glColor3f(1, 1, 1) перед рендером попробуй выставить
-
Я уже решил проблему. Просто надо было свет включить.
-
> [10] sloosar © (05.10.08 20:44)
Выложи весь код. ощущение, что ты одни грабли прикрываешь другими граблями.
-
У меня просто код расбросан по библиотеках.
|