Delphi > Firemonkey

Firemonkey 3D je pomalé

(1/7) > >>

age.new:
Vážená komunito,

chtěl jsem ve Firemonkey vytvořit 3D kreslení technického výkresu složeného z čar. Dal jsem tedy na formulář viewport, kameru a dummy objekt. V OnRender dummy objektu jsem na jeho Context3D začal kreslit pomocí DrawLine. Plán se nakreslil, ale celkově je renderování cca 50x !!! pomalejší než renderování v OpenGL. V podstatě jedno vykreslení ve Firemonkey 3D trvá cca 2,5 sekundy a v takovém případě nelze provádět rozumný zoom, pan a jiné funkce. Dále mě zarazila absence možnosti definovat tloušťky a stylu čáry. Firemonkey 3D asi nevymýšleli "CADysti".

Zkoušel jsem hledat nějaké funkce/property které by mohli renderování zrychlit, ale bez úspěchu. Je to prostě šíleně pomalé. Navíc nelze nad překreslováním převzít kontrolu a tak si viweport renderuje kdy potřebuje, což u této rychlosti je problematické a celá aplikace se pak nepředvídatelně cuká.

Řešil zde někdo podobný problém? Jak zrychlit 3D renderování ve Firemonkey?

Děkuji.








Radek Červinka:
Platforma?

chaloup:
Verze Delphi a OS + něco málo o grafice a fragment kódu jak to vykresluješ...?

Radek Červinka:
Mne neprijde ze by to bylo obecne pomale - "c:\Users\Public\Documents\Embarcadero\Studio\21.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ModelViewer\Model3D.dproj"

age.new:
Delphi Tokyo a platforma Windows.

Celý kód tak jako ho mám by nebyl moc přehledný, protože technický výkres mám v komplexní struktuře. Princip kreslení:

Kamera na pozici 0, 0, -1000 a kouká na pozici 0, 0, 0
DummyPlan na pozici 0, 0, 0

Viewport3D je na FMX formuláři a má nastavenou kameru, viz. víše. Pod Viewport3D je Kamera a DummyPlan. V DummyPlan.OnRender mám toto kreslení:


--- Kód: Delphi ---procedure TForm1.OnRender(Sender: TObject; Context: TContext3D);var  i: integer;begin  if Context.BeginScene then  try    for i := 0 to length(SLines) - 1 do      with SLines[i] do        Context.DrawLine(TPoint3D.Create(BeginX, BeginY, 0), TPoint3D.Create(EndX, EndY, 0), 1, TAlphaColorRec.Yellow);   finally    Context.EndScene;  end;end; 
V OnRender se nic nepočítá, neparsuje atd. Prostě se jen nakreslí čáry. Velmi podobný princip v OpenGL je 50x rychlejší.

Děkuji. 


Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi