Текущий архив: 2006.09.24;
Скачать: CL | DM;
ВнизВопросы по OpenGL Найти похожие ветки
← →
Pa5ha (2005-12-17 17:45) [80]Итак, пришло время продолжить :)
Есть ли в ОпенГЛ цветовой ключ и как его юзать? Искал, не нашел. А в директ Иксе есть :)
← →
П7 (2005-12-17 19:24) [81]1. Есть альфа-канал.
2. Есть блендинг.
3. Есть альфа-маска.
← →
Pa5ha (2005-12-18 13:16) [82]П7, аотфа-канал, как и маска (сужу только по названию) отпадают т.к. требуют отдельного слоя с альфа-компонентой. Можно поподробнее. Требуется просто задать прозрачность для определенного цвета без гимора. Т.е. переписывать загрузчик текстур и добвлять альфаканал - не канает. Да и ресурсоёмко.
← →
П7 (2005-12-18 13:31) [83]Ничё и не ресурсоёмко. Нету обычного цветового ключа в Опене.Читай Краснова в общем.
← →
Pa5ha (2005-12-18 13:39) [84]Дак читал. Там его нету, это я уже понял :)
Как сделать, чтоб ничо не переписывать? Ломает :) Думал, ща пару строк вставлю типа glEnable(gl_color_key); :)
Я даж фотожоп не знаю. Как я буду альфу добавлять? :)
Можно про бленд что-нить поподробнее?
Что есть альфа-маска?
И ещё. Надо где-нить физику самолета нарыть. Статью какую-нить. А то я даже не знаю, с какой стороны подойти.
← →
Кефир87 © (2005-12-18 13:56) [85]Ну придется переписывать (дописывать) загрузщик. Я это уже делал:
function LoadSprite(const BMP24 : string):GLuint;
var
bf : TBitmapFileHeader;
bi : TBitmapInfoHeader;
f : file of Byte;
size : Cardinal;
p,a : Pointer;
x : Integer;
begin
Result := 0;
AssignFile(f, BMP24);
Reset(f);
BlockRead(f, bf, sizeof(bf));
if bf.bfType = $4D42 then
begin
BlockRead(f, bi, sizeof(bi));
if bi.biBitCount = 24 then
begin
size := bi.biWidth*bi.biHeight*3;
GetMem(p, size);
BlockRead(f, p^, size);
GetMem(a, bi.biWidth*bi.biHeight*4);
for x := 0 to bi.biWidth*bi.biHeight-1 do
begin
TRGBAarr(a^)[x].r := TBGRArr(p^)[x].r;
TRGBAarr(a^)[x].g := TBGRArr(p^)[x].g;
TRGBAarr(a^)[x].b := TBGRArr(p^)[x].b;
if (TBGRArr(p^)[x].r = 255)and(TBGRArr(p^)[x].g=0)and(TBGRArr(p^)[x].b = 255)then
TRGBAarr(a^)[x].a := 0 else
TRGBAarr(a^)[x].a := 255;
end;
Result := GenTexture(a, bi.biWidth, bi.biHeight, 32, GL_RGBA);
FreeMem(a);
FreeMem(p);
end;
end;
CloseFile(f);
end;
Надеюсь понятно что GenTexture делает текстуру по указателю 8)
← →
П7 (2005-12-18 13:59) [86]Переписывать придётся загрузчик текстур.
0. Выделяем память под текстуру с альфаканалом.
1. Читаем пиксель
2. Если пиксель <> цветовой ключ то [3] иначе [4]
3. Заносим пиксель в дату текстуры с альфой = 1.0 и [1]
4. Заносим в дату тектуры пиксель чёрного (или любого другого) цвета с альфой = 0.0 и [1]
Так, теперь мы можем выводить 2 способами.
1. С помощью блендинга - долго, но красиво и поддерживается всякие способы + прозрачность отдельных пикселей от 0.0 до 1.0.
2. Альфа-маской (альфа-отсечением) - быстро и в качестве замены уветового ключа - самое оно. Задаётся минимальная видимая прозрачность - остальное вырезается.
Поподробнее тебе расскажет твой друг РАМБЛЕР! (:
← →
Pa5ha (2005-12-18 14:02) [87]Дак а нет расширений никаких, чтоб именно цветовой глюч? Ведь в директе есть! Значит, аппаратно реализован! Значит огород городить не стоит. Ладно. Сам найду. Если не найду... то за исходники спасибо :)
← →
Pa5ha (2005-12-18 14:17) [88]Увы и ах :) Нашел точно такой же топ :) Где на просторах :)
Придется делать альфу :(
С альфомаской как делать - примерно представляю. На д3д делал. Надо только новый синтаксис освоить :)
И исчо: чо там насчет физики самолета? Расскажите хоть, как подступиться. (а может ветку новую задвинуть? :) )
← →
Кефир87 © (2005-12-18 15:54) [89]
> Переписывать придётся загрузчик текстур.
> 0. Выделяем память под текстуру с альфаканалом.
> 1. Читаем пиксель
> 2. Если пиксель <> цветовой ключ то [3] иначе [4]
> 3. Заносим пиксель в дату текстуры с альфой = 1.0 и [1]
> 4. Заносим в дату тектуры пиксель чёрного (или любого другого)
> цвета с альфой = 0.0 и [1]
Это именно то, что я написал 8)
← →
XProger © (2005-12-18 16:18) [90]Pa5ha, сперва тебе необходимо побороть свою лень. А физику самолёта в МАИ тебе расскажут...
← →
П7 (2005-12-18 18:49) [91]РАМБЛЕР - твой друг!
← →
NE_Parovoz © (2005-12-18 19:57) [92]Pa5ha
>>Ведь в директе есть! Значит, аппаратно реализован!
в dx sdk так и написано, что аппаратно?
имхо, единственные способ "hardware" реализации (если это можно так назвать) - шейдеры
но зачем это надо?
← →
Pa5ha (2005-12-18 21:18) [93]
> П7 (18.12.05 18:49) [91]
> РАМБЛЕР - твой друг!
Гы. В таком слечае этот форум вообще не нужен.
С МАИ тоже, конечно, остроумная шутка. За физикой автомобиля идти к форду, за построением уровней к строителям, документацией по карточке идти в представительство ATI,nVidia...
← →
XProger © (2005-12-18 21:47) [94]Pa5ha, я знал, что ты смышлёный парень...
← →
DR0N © (2005-12-18 22:17) [95]Видите, всегда все гениальное - просто...
Уровни для Кваки4 делали профессиональные инженеры-проектировщики =) им сейчас мало платят, вот в коммерцию подались =D
← →
Pa5ha (2005-12-22 22:52) [96]глупость какая. Не могу цветовой глюч написать.
{------------------------------------------------------------------}
{ Load texture with color key }
{------------------------------------------------------------------}
function LoadSprite(const BMP24 : string;mipmap:boolean):GLuint;
const
ColorKey: Cardinal = $00FFFFFF;
type
PPixelArray = ^TPixelArray;
TPixelArray = array [0..0] of Byte;
var
bf : TBitmapFileHeader;
bi : TBitmapInfoHeader;
f : file of Byte;
size : Cardinal;
p,a : PPixelArray;//Pointer;
x : Cardinal;
begin
p:=nil;
a:=nil;
Result := 0;
AssignFile(f, BMP24);
Reset(f);
BlockRead(f, bf, sizeof(bf));
if bf.bfType = $4D42 then
begin
BlockRead(f, bi, sizeof(bi));
if bi.biBitCount = 24 then
begin
size := bi.biWidth*bi.biHeight;
GetMem(p, size*3);if p = nil then MessageBox(0, PChar("Can""t create ""p"""), "Loading Textures", MB_OK);
BlockRead(f, p^, size*3);
//SwapRGB24(p, size);
GetMem(a, size*4);if a = nil then MessageBox(0, PChar("Can""t create ""a"""), "Loading Textures", MB_OK);
for x := 0 to size-1 do
begin
a[x*4+0]:=p[x*3+2];
a[x*4+1]:=p[x*3+1];
a[x*4+2]:=p[x*3+0];
a[x*4+3]:=255*
ord((p[x*3+0]<>((ColorKey and $00FF0000) shl 16))or
(p[x*3+1]<>((ColorKey and $0000FF00) shl 8))or
(p[x*3+2]<>((ColorKey and $000000FF) shl 0)));
// TRGBAarr(a^)[x].r := TBGRArr(p^)[x].r;
// TRGBAarr(a^)[x].g := TBGRArr(p^)[x].g;
// TRGBAarr(a^)[x].b := TBGRArr(p^)[x].b;
// if (TBGRArr(p^)[x].r = 255)and(TBGRArr(p^)[x].g=0)and(TBGRArr(p^)[x].b = 255)then
// TRGBAarr(a^)[x].a := 0 else
// TRGBAarr(a^)[x].a := 255;
end;
// Result := GenTexture(a, bi.biWidth, bi.biHeight, 32, GL_RGBA);
glGenTextures(1, Result);
// glBindTexture(GL_TEXTURE_2D, Result);
{ Select a filtering type. BiLinear filtering produces very good results with little performance impact
GL_NEAREST - Basic texture (grainy looking texture)
GL_LINEAR - BiLinear filtering
GL_LINEAR_MIPMAP_NEAREST - Basic mipmapped texture
GL_LINEAR_MIPMAP_LINEAR - BiLinear Mipmapped texture
}
if mipmap then
begin
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); { only first two can be used }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); { all of the above can be used }
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, bi.biWidth, bi.biHeight, GL_RGBA, GL_UNSIGNED_BYTE, a);
end else
begin
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); { only first two can be used }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); { all of the above can be used }
glTexImage2D(GL_TEXTURE_2D, 0, 3, bi.biWidth, bi.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, a); // Use when not wanting mipmaps to be built by openGL
end;
FreeMem(a);
FreeMem(p);
end else
MessageBox(0, PChar("Texture not loaded"), PChar("BMP Unit"), MB_OK);
end;
CloseFile(f);
end;
Короче, он грузит текстуру, но на ней какие-то полоски :)
И все остальные текстуры тоже грузятся с одними полосками, хотя грузяться другой функцией. Не могу понять, где собака порылась. Или мне надо идти учить матчасть?
← →
Добрый (2005-12-23 13:24) [97]Можно юзать 8-битные текстуры? Да/нет.
← →
XProger © (2005-12-23 17:47) [98]Pa5ha, учить
Добрый, Да
← →
XProger © (2005-12-23 21:41) [99]Подсказка: смотри на значение параметров для glTexImage2D
← →
Добрый (2005-12-24 20:35) [100]XProger, Вах, я тормоз :) Свежий взгляд внёс свежую струю. Спасибо :)
← →
Pa5ha (2005-12-24 20:36) [101]Это был я :)
← →
Pa5ha (2005-12-24 20:52) [102]Блин, лучше на стало. Это я исправил после того, как запостил :(
← →
Pa5ha (2005-12-24 21:06) [103]Ладно, не парьтесь пока. перепишу по своему, посмотрим. Жаль, что мессаги не добавляются. Флуд получается из кучи мессаг одного человека. Я не умею сразу выразить свою мысль :)
Страницы: 1 2 3 вся ветка
Текущий архив: 2006.09.24;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.047 c