Fit Funktion in acrobat 3d

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
Benutzeravatar
Paulchen
Beiträge: 45
Registriert: 15.09.2008, 08:51

Fit Funktion in acrobat 3d

Beitrag von Paulchen » 17.09.2008, 22:21

Hallo
ich beschäftige mich jetzt seit ein paar wochen mit acrobat 3d.
Ich habe keine solche Funktion "fit" gefunden (sie soll das 3d objekt an die Größe vom Fenster anpassen). Mir ist auch nicht ganz klar wie man dies realisieren kann, denn meine Überlegungen sind:
ich kann herausfinden wie groß das 3D Fenster ist mit "rect".
ich weis wie groß die Fläche von dem 3dobjekt ist ( Im einfachsten Fall, bei einer seitenansicht)

Was ich aber nicht ganz verstehe, wie weit müsste ich denn von der Fläche weggehen, dass sie genau ins Fenster passt.
sehe ich, wenn das Fenster 400 breit ist und man direkt an der Fläche ist auch 400 einheiten von der Fläche? oder haben die Größen von rect und dem 3dobjekt nichts mit einander gemeinsam? oder in welchem Verhältnis.


ich bin euch sehr dankbar für alle Anregungen in dieser Richtung

MfG
Paul Wimmer

acronaut
Beiträge: 693
Registriert: 14.09.2006, 21:32
Kontaktdaten:

Fit Funktion in acrobat 3d

Beitrag von acronaut » 18.09.2008, 10:09

Hi,

na, da hast Du Duir ja gleich das einfachste Thema ausgesucht. Ich hab sowas mal für nen Kunden programmiert, ist aber alleine von der geometrischen Berechnung her nicht ganz einfach. Du kannst ja die BoundingBox des modells auslesen und musst dann eben durch die Position der Kamera, des Kameraziels, des FOV und des Rollwinkels. Damit ist dann genau festgelegt (wie bei einer normalen Fotokamera  auch) was zu sehen ist. Das dann aber auch noch in Bezug zu setzen zum Seitenverhältnis  der 3D-Annot, ist nochmal  eine ganz schöne Herausforderung. Sollte iregdwie über getScreenFromPosition() funktionieren. Ich hatte das mal versucht und dann aber aufgegeben, weil es mir einfach zu lange gedauert hat. Habe dann einfach mit mehren Modellen herumprobiert und mir einen "PI x Daumen" Faktor für das 3D-Objekt daraus abgeleitet. Ist nicht ganz professionell, aber war in wenigen Minuten ausgetestet, anstatt ewig lange herumzutesten, wie man da sganze jetzt exakt berechnen könnte. Solltest Du einen Weg finden, wäre es interessant zu wissen, ob es da tatsächlich eine Möglichkeit gibt oder nicht.

Gruß,
Andreas Vogel

Benutzeravatar
Paulchen
Beiträge: 45
Registriert: 15.09.2008, 08:51

Fit Funktion in acrobat 3d

Beitrag von Paulchen » 18.09.2008, 19:29

Hallo Herr Vogel,
vielen Dank für die schnelle Antwort. Das dies nicht einfach wird dachte ich mir schon. Wenn ich was vernünftiges herausbekomme werde ich es hier reinstellen. Was der Rollwinkel bringt verstehe ich nicht ganz. das fov ist ja der öffnungswinkel oder? aber roll kann man doch eigentlich auf 0 setzen oder? weil das ist ja nur der Wankwinkel (also der winkel zum beispiel beim auto in der Kurve um den das auto dann geneigt ist) oder verstehe ich den Falsch?
Vielen Dank
Paul Wimmer

Benutzeravatar
Paulchen
Beiträge: 45
Registriert: 15.09.2008, 08:51

Fit Funktion in acrobat 3d

Beitrag von Paulchen » 21.09.2008, 18:43

Hallo,
ich habe es jetzt einigermaßen hinbekommen. Also.
ich habe "fit" nur bei der orthographischen Darstellung hinbekommen (ich benötige auch keine perspektivische).
Dies kann man mit dem Befehl festsetzen "camera.projectionType="orthographic";"
Nun zum groben Aufbau und bei Fragen gehe ich ins Detail
-Richtungsvektor ermitteln
-Orientierungsvektor ermitteln
-Senkrechten Vektor zu Richtungsvektor und Orientierungsvektor bestimmen(orientx)
-alle Punkte der bounding box berechnen
-Projekt aller Punkte auf Orientierungsvektor und orientx( ist dann quasi der Abstand in x und y richtung vom Fenster aus gesehen)
-maximalen und minamalen Abstand von x und y richtung bestimmen.
- ermitteln ob die Breite oder die höhe größer ist
-viewPlanesize ändern(unschön).
MfG Paul Wimmer

acronaut
Beiträge: 693
Registriert: 14.09.2006, 21:32
Kontaktdaten:

Fit Funktion in acrobat 3d

Beitrag von acronaut » 21.09.2008, 19:34

Und, war ganz schönviel Rechnerei (Sin, cos, Tan,...) oder? ich hatte sowas ja vor einiger Zeit auch schon mal, ist nicht wirklich schön, wird aber nochmal wesentlich komplexer, wenn die Perspektive mit dem "fov" (field of view) mit einberechnet. da geht es dann ja fast in den Bereich von Optik rein. Da habe ich dann wie schon beschrieben auch aufgehört mit exakten Formeln zu arbeiten und mich herangetastet. Hatte damals einfach keine Zeit mich mal wieder 1-2 Semester in die Uni zu setzen um das Ganze danach exakt berechnen zu können ;-)

Gruß,
Andi


Benutzeravatar
Paulchen
Beiträge: 45
Registriert: 15.09.2008, 08:51

Fit Funktion in acrobat 3d

Beitrag von Paulchen » 21.09.2008, 20:31

also bei meiner möglichkeit habe ich keinen tan, cos oder sinus benutzt ich hab einfach skalarprodukt von 2 vektoren gemacht das ist aber indirekt cos :)
bei den einstellungen mit fov hat das bei mir gar nicht geklappt, aber meinem Auftraggeber ist es sowieso lieber im orthograhischen Stil (hab ich aber erst nach dem rumprobieren mit fov herausgefunden)

Lg Paul

Benutzeravatar
Kottan
Beiträge: 8
Registriert: 07.05.2007, 14:12

Fit Funktion in acrobat 3d

Beitrag von Kottan » 24.09.2008, 15:28

Hallo!

Nun eine solche "fit"-Funktion müsste man etwas genauer definieren. Ich nehme an Du willst ein Objekt fokussieren (die Kamera danach ausrichen), sodass es im 3D-Fenster vollständig anzeigt wird ohne den Field of View zu ändern. Dabei spielt die Dimensionierung des Anzeigebereichs nur bedingt eine Rolle.

Willst Du also die Funktion "Rechts-Klick im 3d->Part Option -> Zoom To Part" von Acrobat 8 mittels JScript nachbilden sollest du folgendermaßen vorgehen:

1. Boundingbox des Objektes ermitteln
2. Transformationmatrix des Objektes und desssen Parents ermitteln (rekursiv durch den Baum nach oben)
3. Transfromationsmatrizen akkumulieren
4. Min- und Max- Eckpunkte der Boundingbox mit akkumilierter Transformationsmatrix multiplizieren.
5. Daraus die BoundingSphere berechnen (Mittelpunkt und Radius)
6. Am Mittelpunkt (jetzt World-Space Position)  kann dann die Kamera ausgerichtet werden. Bei der Berechnung der Distanz der Kamera zum Mittelpunkt der Boundingsphere helfen Strahlensatz und Tangens:

Dist = BSphereRadius / Math.tan(FIELD_OF_VIEW * DEG_TO_RAD / 2);
(DEG_TO_RAD=Pi/180)

Damit paßt dein Objekt immer in den Viewport, egal wie es dimensioniert ist bzw. welche Seitenverhältnisse dein Viewport hat.

Wenn Du allerdings "längliche" Objekte im Viewport anzeigen willst, sodass der Platz möglichst gut ausgenutzt wird mußt Du anders vorgehen und gegebenenfalls den "roll" deiner Kamera verändern. Das ist aber in 3D-Applikationen nicht üblich und meistens auch nicht erwünscht.

Anschauungsbeispiel (für Acrobat Reader 8, ~12MB):
http://vpr-solutions.de/images/stories/ ... om_sec.pdf




Antworten