Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   FMX:OpenGL-Panel oder Layout in 2D Formular (https://www.delphipraxis.net/189630-fmx-opengl-panel-oder-layout-2d-formular.html)

luisk 1. Jul 2016 17:39


FMX:OpenGL-Panel oder Layout in 2D Formular
 
Hallo,
Wie kann ich unter FMX ein 3D-Panel oder Layout in ein 2D Formular einbetten ?
Ich möchte eine Opengl-Anwendung nach FMX portieren.

milos 1. Jul 2016 19:29

AW: FMX: 3D-Panel oder Layout in 2D Formular
 
Zitat:

Zitat von luisk (Beitrag 1341776)
Hallo,
Wie kann ich unter FMX ein 3D-Panel oder Layout in ein 2D Formular einbetten ?
Ich möchte eine Opengl-Anwendung nach FMX portieren.

Hi,

auf einem Firemonkey HD Formular kannst du eine Delphi-Referenz durchsuchenTViewport3D Komponente setzen und dann sogar über den Formular-Designer damit 3D Objekte einsetzen, bewegen usw.
Bei mir hat sich Delphi jedoch oft aufgehanden und ist dann abgestürzt, direkt bei 3D Formularen klappt es jedoch ohne abstürze.

Freundliche Grüsse

CHackbart 1. Jul 2016 19:42

AW: FMX: 3D-Panel oder Layout in 2D Formular
 
Das würde ich ehrlich gesagt nicht empfehlen. TViewport3D rendert in ein Bitmap und das wird dann angezeigt. Guck dir mal TCustomContextOpenGL.DoCopyToBitmap an. Das ist grottenlangsam. Besser du nimmst gleich ein Form3D und packst die 2D Anzeige in einen Layer.

milos 1. Jul 2016 19:47

AW: FMX: 3D-Panel oder Layout in 2D Formular
 
Zitat:

Zitat von CHackbart (Beitrag 1341785)
Das würde ich ehrlich gesagt nicht empfehlen. TViewport3D rendert in ein Bitmap und das wird dann angezeigt. Guck dir mal TCustomContextOpenGL.DoCopyToBitmap an. Das ist grottenlangsam. Besser du nimmst gleich ein Form3D und packst die 2D Anzeige in einen Layer.

Würde ich auch empfehlen wenn es sich primär um eine 3D Anwendung handelt.

Freundliche Grüsse

luisk 2. Jul 2016 13:30

AW: FMX:OpenGL-Panel oder Layout in 2D Formular
 
kann ich auch reine OpenGL-Panel anlegen, so wie bei VCL ?
Sowas bräuchte ich.

milos 2. Jul 2016 14:20

AW: FMX:OpenGL-Panel oder Layout in 2D Formular
 
Zitat:

Zitat von luisk (Beitrag 1341807)
kann ich auch reine OpenGL-Panel anlegen, so wie bei VCL ?
Sowas bräuchte ich.

Soweit ich weiss geht das leider nicht ohne weiteres... Für Android und iOS kannst du OpenGL ES einsetzen, Infos dazu kriegst du hier. Getestet habe ich das selber nicht sollte aber funktionieren.

Wie es mit Windows und Mac aussieht kann ich dir nicht sagen, habe aber gelesen das es nicht einfach (vielleicht auch unmöglich) sein soll Firemonkey dazu zu überreden ein eigenes OpenGL context zu erstellen. Wenn ich den Link dazu noch finde editiere ich ihn rein.

Freundliche Grüsse

Edit: Hier der Link ;)

Jens01 2. Jul 2016 14:55

AW: FMX:OpenGL-Panel oder Layout in 2D Formular
 
Ich kann es Dir nicht genau sagen, aber bei GLScene funktioniert es wohl. Dort gibt es eine Unit "GLScene.FMX.Viewer". Es wird wohl irgendwie ein Kontext erzeugt.
Vlt hilft Dir das ja weiter.

P.S.: Wenn Du es geschafft hast, dann bitte eine Rückmeldung.

Hier noch ein Link.

luisk 2. Jul 2016 21:29

AW: FMX:OpenGL-Panel oder Layout in 2D Formular
 
Hallo Milos, Hallo Jens01 so gehts z.B.:
1.Dieses VCL-Panel FMX-Adapter einbinden
http://alex-ai.blogspot.de/2013/11/h...iremonkey.html
Delphi-Quellcode:
unit FMXAdapter;
 
interface
 
uses
  FMX.Forms,
  Vcl.ExtCtrls;
 
type
  TFMX_Adapter_Panel = class(Vcl.ExtCtrls.TPanel)
  private
    FForm: TCommonCustomForm;
    procedure ResizeForm;
    procedure SetForm(const AForm: TCommonCustomForm);
  protected
    procedure Resize; override;
  public
    property Form: TCommonCustomForm read FForm write SetForm;
  end;
 
implementation
 
uses
  Types,
  Winapi.Windows, System.SysUtils,
  FMX.Platform.Win;
 
 
{ TFMX_Adapter_Panel }
 
procedure TFMX_Adapter_Panel.Resize;
begin
  inherited;
  ResizeForm();
end;
 
procedure TFMX_Adapter_Panel.ResizeForm;
begin
  if Assigned(FForm) then begin
    FForm.SetBounds(BorderWidth, BorderWidth, ClientWidth + BorderWidth, ClientHeight + BorderWidth);
  end;
end;
 
procedure TFMX_Adapter_Panel.SetForm(const AForm: TCommonCustomForm);
begin
  FForm := AForm;
  FForm.BorderIcons := [];
  FForm.BorderStyle := TFmxFormBorderStyle.bsNone;
  FForm.Visible := True;
  Winapi.Windows.SetParent( FmxHandleToHWND(FForm.Handle),Handle );
  FForm.Left:=0;
  FForm.Top:=0;
  FForm.Width:=width;
  FForm.Height:=height;
  ResizeForm();
end;
 
end.

2. und in einem FMX-Fenster plazieren über:
Delphi-Quellcode:
 FMX_Adapter_Panel.ParentWindow := FormToHWND( Self );


3. Ein weiteres FMX-Fenster FMX_Render_Form in diesem
FMX_Adapter_Panel plazieren über:
FMX_Adapter_Panel.Form:=FMX_Render_Form;
// SetForm gegenüber dem Link geändert, damit sich das Form sauber im Panel plaziert.

4. Dann kannst Du Dein Bsp. drinnen laufen lassen, indem Du Dein FMX_Render_Form übergibst:
http://esv.cocolog-nifty.com/blog/opengl/index.html
http://escargot.la.coocan.jp/SimpleS...OpenGL_FMX.pas

Ich hab auch versucht in das VCL-Panel zu rendern. Es tat sich aber nichts.
Beim FMX-Form im VCL-Panel geht es.

Die Frage ist: Wie läuft das Ganze unter Android, wenn man bei diesem Weg ein VCL-Panel als Container nehmen muss ?

Man kann auch ein FMX-Form in ein anderes legen über
Delphi-Quellcode:
 Winapi.Windows.SetParent( FmxHandleToHWND(Form_x.Handle),FmxHandleToHWND(Handle) );
doch wenn man den Rahmen und die Icons wegnimmt geht es nicht mehr - seltsam.

Embarcadero könnte da mal was passendes liefern.

luisk 6. Jul 2016 07:47

AW: FMX:OpenGL-Panel oder Layout in 2D Formular
 
das funktioniert leider nur unter Windows.
Gibt es für Android auch eine Lösung ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz