Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OGL+текстура на кваде, трабла [Delphi, Windows]


Sh_Ev ©   (2005-05-22 11:26:00) 

Помогите, плз. Вообще фигня какая-то. Загружая текстуру так :


Procedure LoadBMPTexture (FileName : string; var Texture : GLUint) ;
var
 i , j  : Glint                              ;
 Bitmap : TBitmap                            ;
 Bits   : array of array of array of GLUbyte ;
begin
 Bitmap:=TBitmap.Create        ;
 Bitmap.LoadFromFile(FileName) ;

 SetLength(Bits,Bitmap.Height);
 for i:=0 to Bitmap.Height-1 do
  begin
    SetLength(Bits[i],Bitmap.Width);
    for j:=0 to Bitmap.Width-1 do
     SetLength(Bits[i,j],4);
  end ;

 for i:=0 to Bitmap.Height-1 do
  for j:=0 to Bitmap.Width -1 do
   begin
     Bits[i,j,0]:=GetRValue(Bitmap.Canvas.Pixels[i,j]) ;
     Bits[i,j,1]:=GetGValue(Bitmap.Canvas.Pixels[i,j]) ;
     Bits[i,j,2]:=GetBValue(Bitmap.Canvas.Pixels[i,j]) ;

     if (Bits[i,j,0]=255) and (Bits[i,j,1]=255) and (Bits[i,j,2]=255) then
      begin
        Bits[i,j,3]:=0;
      end
     else
      Bits[i,j,3]:=1;
   end ;

 glGenTextures(1, Texture);
 glBindTexture(GL_TEXTURE_2D, Texture);
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

 gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Bitmap.Width, Bitmap.Height, GL_RGBA, GL_UNSIGNED_BYTE, Bits);

 Finalize(Bits);

 Bitmap.Free ;
end ;


Затем рисую квад с этой текстурой и получаю не нужную мне картинку, а какую-то мешанину пикселей, растянутых на кваде. Текстура 256*256. Следом пытаюсь загрузить другую, побольше, получаю еррор. Причем вылетает именно на gluBuild2DMipmaps. Меняю gluBuild2DMipmaps на glTexImage2D - ничего не вылетает, но ничего и не рисуется - полностью белый квад. Вообще ничего не могу понять. Помогите разобраться, пожалуйста.


П7   (2005-05-23 14:47:00) [1]

Я тебя не уговариваю брать чужое апи. Там полный исходник и в нём нормальные функции загрузки текстур. Вот в них разбкрись и напиши аналог свой...


XProger   (2005-05-23 13:21:00) [2]

Ну есть у тебя массив динамический:
Bits - это указатель на данные
Эти данные находятся в памти. Перед строкой Bits[1] может находиться ЧТО УГОДНО! Т.е. не обязательно Bits[0]

Создавай Bits: PByteArray т.е. одномерный массив. И память выделяй ему при помощи GetMem


Sh_Ev   (2005-05-23 06:58:00) [3]

2 П7 : Неа, так вообще не катит. Уж лучше сам разберусь, а то к чужому WinAPI коду приделывать свое определение альфа-канала по цветовому ключу совсем запариться можно.

2 XProger : Ну да, и что??? Сам массив то у меня правильно заполняется. Так как мне его все-таки передать в процедуру по нормальному???


XProger   (2005-05-22 14:16:00) [4]

Sh_Ev, для начала пойми как устроены динамические массивы! В памяти они хранятся не всегда одним блоком!
Да и подаёшь ты указатель не на данные, а на указатель на массив (@Bits[0]) ибо дин массив по сути - указатель на данные.


П7   (2005-05-22 12:59:00) [5]

Блин, возьми нормальную функцию загрузки текстуры. Файл p7_textre.pas из проекта P7Gfx DLL. Лежит всё тут: http://p7.animka.com/product.php?id=3


Наверх

Титульная страница Поиск, карта сайта Написать письмо