GLScene Objekte kopieren

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
stefanE
Beiträge: 7
Registriert: Mi 2. Feb 2022, 08:20

GLScene Objekte kopieren

Beitrag von stefanE »

Hallo zusammen,

ich habe ein GlScene Problem.
wenn ich in meiner Scene

Code: Alles auswählen

        
        var
           gWelle : TGLCylinder; // global
        ....
        ....
        ....
        gWelle := TGLCylinder(GLReference.AddNewChild(TGLCylinder));
        gWelle.TopRadius:=15.0;
        gWelle.BottomRadius:=15.0;
        gWelle.Height:= 300.0;
        gWelle.Direction.X:=0.0;
        gWelle.Direction.Y:=1.0;
        gWelle.Direction.Z:=0.0;
        gWelle.Position.X := StrToFloat(x);
        gWelle.Position.Z := StrToFloat(y);
        gWelle.Position.Y := lage*50+StrToFloat(z);    
in einer Schleife mit verschiedenen x,y Werten laufen lasse dann funktioniert das prima, (bei jedem Durchgang wird ein Zylinder zugefügt.

Jetzt will ich das aber nicht mit einem Zylinder, sondern mit einem Zylinder und einem 2.Zylinder angefügt.
Das habe ich im GlScene Editor eingefügt.

so habe ich das dann versucht, nachdem mir chatGpt das so erklärt hatte ;-).

Code: Alles auswählen

  
   var
        glClone :=  TGLBaseSceneObject; //global
     ....
     ....
     ....
    glClone  :=  GLWelle.AddNewChild(TGLBaseSceneObject);   
    glClone.Visible:=true;                                  
    glClone.Direction.X:=0.0;                               
    glClone.Direction.Y:=1.0;                               
    glClone.Direction.Z:=0.0;                               
    glClone.Position.X := StrToFloat(x);                    
    glClone.Position.Z := StrToFloat(y);                    
    glClone.Position.Y := lage*50+StrToFloat(z);            
    GLReference.AddChild(GLWelle);                        
      
aber da geht gar nix :-(
Kann mir jemand sagen wo mein Fehler ist?
Wenn noch mehr infos benötigt werden, dann bitte melden.

Ich arbeite mit Win10Pro und Lazarus 2.2.6

Danke schon im vorraus
Gruß
Stefan

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene Objekte kopieren

Beitrag von fliegermichl »

Dafür gibt es das TGLProxyObject in GLScene.pas.

Ein Beispiel findet sich in ...\packages\GLSceneLCL\Samples\Lazarus\meshes\actorproxy

stefanE
Beiträge: 7
Registriert: Mi 2. Feb 2022, 08:20

Re: GLScene Objekte kopieren

Beitrag von stefanE »

Erst mal danke für die Antwort :-)
Ich verstehe das Beispiel aber nicht :-(

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: GLScene Objekte kopieren

Beitrag von fliegermichl »

Das Proxyobjekt ist keine eigenständige Geometrie, hat aber seine eigenen Transformationen. Sprich es kann unabhängig vom Basisobjekt gedreht, verschoben etc. dargestellt werden.

stefanE
Beiträge: 7
Registriert: Mi 2. Feb 2022, 08:20

Re: GLScene Objekte kopieren

Beitrag von stefanE »

Jetzt hab ich ne Lösung gefunden, nicht ganz wie ich es wollte, aber ok.

Code: Alles auswählen

   var
        gWelle,gZahnrad  : TGLCylinder; // global
        ....
        ....
        ....

        gWelle := TGLCylinder(GLReference.AddNewChild(TGLCylinder));
        gZahnRad := TGLCylinder(gWelle.AddNewChild(TGLCylinder));
        gWelle.TopRadius:=15.0;
        gWelle.BottomRadius:=15.0;
        gWelle.Height:= 300.0;
        gWelle.Direction.X:=0.0;
        gWelle.Direction.Y:=1.0;
        gWelle.Direction.Z:=0.0;
        gWelle.Position.X := StrToFloat(x);
        gWelle.Position.Z := StrToFloat(y);
        gWelle.Position.Y := lage*50+StrToFloat(z);
        gZahnRad.TopRadius:=40;
        gZahnRad.BottomRadius:= 30;
        gZahnRad.Height := 5;
        gZahnRad.Position.Y:=gWelle.Height/2;

das funktioniert so, weit *es werden bei jedem Aufruf also Wellen mit hinzugefügtem Zahnrad erstellt und platziert.
Aber wie man aus dem GlScene Editor ein Element kopieren und wiederholt einfügen kann weiß ich immer noch nicht :-(

Gruß
Stefan

Antworten