Einzelnen Beitrag anzeigen

Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

Firemonkey Viewport

  Alt 14. Mai 2013, 11:44
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);
  Mit Zitat antworten Zitat