Как же загрузить PNG с альфа каналами в GLScene? Нам понадобятся модули TPNGImage. Скачиваем, копируем в папку все файлы \Borland\Delphi7\Lib. Папку obj тоже нужно будет скопировать.
Теперь создаем новый проект и делаем самое простое приложение на GLScene. Добавим в сцену TGLHUDSprite. Это и будет наша PNG картинка.
Теперь необходимо настроить несколько свойств у GLHUDSprite1.
1. Material.BlendingMode := bmTransparencyДобавляем следующие модули в раздел Uses:
Uses GLTexture, GLGraphics, PNGImage;
Они нам потребуются позже. Теперь пишем процедуру загрузки нашего изображения. FileName это путь к PNG файлу
procedure LoadPNG(FileName: string; t: TGLTexture);
var FMap: TGLBitmap32;
bmp: TBitmap;
png: TPNGObject;
i,j: integer;
p: PGLPixel32Array;
pb: PByteArray;
begin
if (FileExists(FileName))and(LowerCase(ExtractFileExt(FileName))='.png') then
begin
png := TPNGObject.Create;
png.LoadFromFile(FileName);
FMap:=TGLBitmap32.Create;
if png.TransparencyMode = ptmPartial then
begin
FMap.Width := png.Width;
FMap.Height := png.Height;
for j:=0 to png.Height-1 do
begin
pb := png.Scanline[j];
p := Fmap.ScanLine[png.Height-j-1];
for i:=0 to png.Width-1 do
begin
p[i].r := pb[i*3+2];
p[i].g := pb[i*3+1];
p[i].b := pb[i*3];
p[i].a := png.AlphaScanline[j][i];
end;
end;
png.Free;
end
else
begin
bmp:=TBitmap.Create;
png.AssignTo(bmp);
FMap.Assign(bmp);
bmp.Free;
end;
t.Image.Assign(FMap);
FMap.Free;
end;
end;
Теперь осталось только вызвать процедуру, например в OnCreate формы.
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadPNG('Test.png', GLHUDSprite1.Material.Texture);
end;
Единственный недостаток - получается не резкое изображение. Можно сделать немножко порезче, если у текстуры установить FilteringQuality = tfAnisotropic и MagFiltr = maNearest.
Просмотров: 6169
Проверил загрузку .png через меню материала, все работает итак с альфа каналом без использования Uses GLTexture, GLGraphics, PNGImage; и т. д.
В меню материала нужно выбрать загружаемую картинку и в том же меню Blending Mode=bmTransparency. Правда использовал Delphi2010 и GLSceneOctober'2010. P. S. Смайлы желтые (что слева) в комментариях как делать? =) |
Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.