Форум: "Игры";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c