Главная страница
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.158 c
1-1125298174
Cati
2005-08-29 10:49
2005.09.18
Кнопка


1-1124902261
ArtemESC
2005-08-24 20:51
2005.09.18
Активировать Button


3-1123133263
k2
2005-08-04 09:27
2005.09.18
Курсорные переменные (oracle)


14-1125068262
Карелин Артем
2005-08-26 18:57
2005.09.18
Средства коллективной разработки для Дельфи 7. Что посоветуете?


14-1125115494
Santrope
2005-08-27 08:04
2005.09.18
Microsoft SQL Server 2005 уже вышел, или только в разработке?