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/)
-   -   Firemonkey Viewport (https://www.delphipraxis.net/174851-firemonkey-viewport.html)

Peter666 14. Mai 2013 11:44


Firemonkey Viewport
 
Hallo,

ich würde gerne über die Matrix in TCanvas den Anzeigebereich von -1..1 in der horizontalen bzw. vertikalen definieren. Hat jemand eine Idee, wie man das am besten macht? Das Problem ist das ich eine D3D Anwendung nach Firemonkey portieren muss und die ganzen Routinen darauf ausgelegt sind. Sprich mache dort ein:

Delphi-Quellcode:
D3DXMatrixIdentity(matWorld);
Device.SetTransform(D3DTS_WORLD, matWorld);

pos_z := -2.4142135675;
D3DXMatrixLookAtLH(matView,
  D3DXVECTOR3(0.0, 0.0, pos_z),
  D3DXVECTOR3(0.0, 0.0, 5.0),
  D3DXVECTOR3(0.0, 1.0, 0.0));

Device.SetTransform(D3DTS_VIEW, matView);
D3DXMatrixPerspectiveFovLH(matProj, D3DX_PI / 4, 1.0, 1.0, 100.0);
Device.SetTransform(D3DTS_PROJECTION, matProj);
Das hat den Vorteil das ich den Rest einfach über einen derartigen Code realisieren kann:

Delphi-Quellcode:
sx := RectWidth(control.position) / RectWidth(position);
sy := RectHeight(control.position) / RectHeight(position);

ox := -(1 - sx - (control.position.left / (RectWidth(position) / 2)));
oy := (1 - sy - (control.position.top / (RectHeight(position) / 2)));

Matrices.TranslateLocal(ox, oy, 0.0);
Matrices.ScaleLocal(sx, sy, 1.0);

Device.SetTransform(D3DTS_WORLD, Matrices.GetTop);

Jens01 14. Mai 2013 14:00

AW: Firemonkey Viewport
 
Wir hatten das irgendwo hier vor kurzem diskutiert, dass man an diese Grundfunktionen von OGL und D3D schlecht bei FMX rankommt. Kannst Du nicht die Fenster von FMX und VCL mischen und dann für den D3D-Teil ein VCL-Fenster nutzen?

stahli 14. Mai 2013 14:30

AW: Firemonkey Viewport
 
Ein etwas unscharfer Beitrag von mir:
Vielleicht hilft die Scale-Komponente weiter?
Ich habe mich damit aber noch nicht weiter befasst. Aber im Prinzip sollte die doch für so etwas da sein...?

Peter666 14. Mai 2013 15:02

AW: Firemonkey Viewport
 
Danke, da müsste ich mal schaun. Im Prinzip gibt es bei dem Code keinerlei Rotationen von Elementen, so dass ich auch das nicht zwingend über die Matrix im Canvas machen muss.
Ich habe mir eine Helperklasse geschrieben die sich um das eigentliche Rendern kümmert und jetzt fehlt eigentlich nur noch etwas wie

Delphi-Quellcode:
function Vector2Transform(const V: TVector; const M: TMatrix): TVector;
begin
end;
bzw.

Delphi-Quellcode:
function RectTransform(const R: TRectF; const M: TMatrix): TRectF;
begin
end;
Das letzte mal das ich mich damit beschäftigt habe ist Jahre her, vielleicht steht ja jemand von euch im Stoff?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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