Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
Hallo,
für meinen Betrachter wünsche ich mir eigentlich schon immer eine Rotation wie in der Konstruktions Software CATIA. Leider habe ich das nie hinbekommen, und es ist auch etwas schwer zu beschreiben wie diese Rotation genau funktioniert.
Jetzt habe ich vor kurzem einen Modell Viewer gefunden, der genau wie CATIA rotiert und das tolle dabei ist, es ist ein open source projekt namens
GLC Player.
Man kann den Player sowie den code hier downloaden. Das Gute ist ja schonmal das wohl OpenGL verwendet wird, von daher ist es vielleicht für den ein oder anderen hier interessant anzuschauen... Leider ist das Programm größtenteils in C++ geschrieben und ich scheitere schon in den hunderten von .h und .cpp Datein am Finden der richtigen Stelle.
Was ich genau suche habe ich hier mal in einem gif festgehalten:
Das Geniale bei dieser Art der Rotation ist, das man das "Gefühl" hat eine Glaskugel zu drehen oder einen Ball. Meine Erfahrung zeigt, das sich Menschen, die sonst nicht mit 3D Software arbeiten damit intuitiv zurechtfinden.
Wenn also jemand von euch eine solche Rotation für delphi hat, oder Lust hat sie aus dem gegebenen C++ source code auszugraben wäre das quasi wie Weihnachten für mich!
Ich verwende eine derartige Rotation auch in UltimateConquest. Genau genommen ist es nicht genau diese Variante, sondern die meiner Meinung nach bessere stabilisierte Variante.
*snip
Code:
/** * Copyright 2009 Martin Weusten (spam 'at' martin-weusten 'dot' de) * * This file is part of WGT and published under the terms of the * GNU Public License (GPL) Version 3.0. * * WGT is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version.
* WGT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WGT. If not, see <http://www.gnu.org/licenses/>. */
public class SphereCamera extends Camera { private static final double SQRT_2 = Math.sqrt(2.0); private static final double MAX_LATITUDE = 0.45*Math.PI; private static final double MAX_ZOOM = 20.0; private static final double MIN_ZOOM = 2.0;
das funktioniert zwar, und ist auch nicht schlecht, fühlt sich aber nicht so gut an, weil man je nach zoomfaktor schneller oder langsamer dreht als die maus sich bewegt. echt schwer in worte zu fassen.
Aber C++ kann ich nicht und ehrlich gesagt - ich verstehe nichteinmal Bahnhof.
Könnte daran liegen das es sich um Java handelt Abgesehen davon das man statt begin...end eben {...} schreibt ist die Syntax doch fast gleich.
Der Schlüssel liegt in der Methode mapToSphere, weil die Cursor-Koordinaten auf die Kugel abbildet. In updateLongitudeAndLatitude() werden mit Hilfe dieser Methode die Winkel-Differenzen diffLong bzw. diffLat und auf die beiden Winkel longitude bzw. latitude angewendet. In update() wird mit Hilfe der beiden Winkel und dem Rotationszentrum currentLookAt die Position der Camera currentEye berechnet. Matrix44d.lookAt ist nichts anderes als gluLookAt. Das war es auch schon.
Es interessiert hier nur die Höhe und Breite des Viewports, wozu soll man da einen 4D-Vektor benutzen? GL_VIEWPORT liefert ja zusätzlich die Koordinaten der linken unteren Ecke....die sind aber in 99% der Fälle sowieso (0,0).
auch aus Code: public Vector3d getCurrentEye() { return currentEye; }
werd ich nicht schlau...
Das ist ein Getter....die Methode macht nix anderes als den Inhalt einer Variable (eines Attributes um genau zu sein) zurückzugeben. Das verhindert das jemand von außen das Attribut verändern kann. In Delphi gibt es dafür Properties.
Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.