Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Вопросы по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.041 c
15-1157137886
Sergey Masloff
2006-09-01 23:11
2006.09.24
Тоже опрос. Про то что нужно всегда улыбаться... хе-хе


2-1157169755
Viktop
2006-09-02 08:02
2006.09.24
Отправка SMS на Биллайн


15-1156681887
Desdechado
2006-08-27 16:31
2006.09.24
Дружба


1-1155205130
Lexiy
2006-08-10 14:18
2006.09.24
DB grid


2-1157221445
Mops
2006-09-02 22:24
2006.09.24
Перетаскивание GroupBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский