第二种材料没有显示在glhudsprite中

时间:2013-12-17 07:04:47

标签: delphi opengl delphi-7 glscene

我尝试以奇怪的方式在TGLHudSprite中显示图像......

这是我的尝试..

我有一个材料库和一个hudsprite ......

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';

有了这个,我只得到一张黑色照片......

我做错了什么......?

在我创建的第二个精灵中加载了正确的bcs材料,而没有设置任何其他材料正确显示“pic”......

1 个答案:

答案 0 :(得分:2)

也许你需要再次这样做: mySprite.Material.MaterialLibrary:= myMatlib; mySprite.Material.LibMaterialName:='myMaterialName';