Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

OGL+текстура на кваде, трабла   Найти похожие ветки 

 
Sh_Ev   (2005-05-22 11:26) [0]

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


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-22 12:59) [1]

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


 
XProger ©   (2005-05-22 14:16) [2]

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


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

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

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


 
XProger ©   (2005-05-23 13:21) [4]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
1-1125298768
Николай1
2005-08-29 10:59
2005.09.18
Передача функции как параметра процедуры


11-1107177249
hunn
2005-01-31 16:14
2005.09.18
Модальная форма на чистом KOL


9-1116619362
brack
2005-05-21 00:02
2005.09.18
Линия в DelphiX


3-1123517781
Ruslan D
2005-08-08 20:16
2005.09.18
Просмотр пользователей в Firebird


14-1124660488
desam
2005-08-22 01:41
2005.09.18
Модем