奇妙な方法で TGLHudSprite に画像を表示しようとしています...
これが私の試みです..
私はマテリアル ライブラリとハドスプライトを持っています...
myMatlib: TGLMaterialLibrary
mySprite: TGLHudSprite
次に、このオブジェクトを作成します...
myMatlib:= TGLMaterialLibrary.Create(self);
mySprite:= TGLHudSprite.CreateAsChild(MainScene.Background);
mySprite.Material.MaterialLibrary:= myMatlib;
mySprite.Material.LibMaterialName:= '';
mySprite.position.x:= 512;
mySprite.position.y:= 384;
mySprite.visible:= true;
それを実行すると、論理的なmySpriteは何も表示されません...今、私はマテリアルを追加します...この関数で..
function AddMaterial(aMatLib: TGlMaterialLibrary; aFileName, aMaterialName: string): TGlLibMaterial;
begin
result := aMatLib.Materials.Add;
with result do
begin
with Material do
begin
MaterialOptions := [moIgnoreFog, moNoLighting];
Texture.Disabled := false;
Texture.TextureMode := tmModulate;
BlendingMode := bmTransparency;
with FrontProperties do
begin
Ambient.SetColor(1, 1, 1, 1);
Diffuse.SetColor(1, 1, 1, 1);
Emission.SetColor(1, 1, 1, 1);
Specular.SetColor(1, 1, 1, 1);
end;
Texture.ImageClassName := 'TGLCompositeImage';
if ExtractFileExt(aFileName) = '' then
TGLCompositeImage(Texture.Image).LoadFromFile(aFileName + '.png')
else
TGLCompositeImage(Texture.Image).LoadFromFile(aFileName);
end;
Name := aMaterialName;
end;
end;
だから私は材料を追加します...
AddMaterial(myMatlib,'c:\pic.png','pic');
そして、hudSprite にマテリアルを設定します...
mySprite.material.libmaterialname:= 'pic';
今のところすべて正常に動作しています...
私がやりたいことは、再作成されたマテリアル ライブラリを解放して削除し、同じ名前の別のマテリアル「pic」を追加して、hudsprite に表示することです...
だから私はこれを作る....
FreeAndNil(myMatlib);
AddMaterial(myMatlib,'c:\spic.png','pic');
mySprite.material.libmaterialname:= 'pic';
これで私は何も得られませんが、黒い写真しか得られません...
私は何を間違っていますか...?
ところで、私が作成した2番目のスプライトでマテリアルが正しくロードされ、他のマテリアルを設定していないため、「写真」が正しく表示されます...