0

奇妙な方法で 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番目のスプライトでマテリアルが正しくロードされ、他のマテリアルを設定していないため、「写真」が正しく表示されます...

4

1 に答える 1