Konkret: Meine Quads liegen alle z.b. auf der x-y-Ebene, ich schaue die z-Achse entlang. Beim Verschieben mit der Maus lese ich nun die Mauskoordinaten aus und berechne mir die Differenz zur vorherigen Maus-Event-Position. Das ist im kleinsten Fall ein Pixel
Das muss ich nun irgendwie in mein OpenGL-Koordinatensystem mappen. Denn wenn ich einfach alle Objekte um eine Einheit verschiebe, ist das zu grob bzw. springen dann die Objekte. Ich möchte aber ein weiches Verschieben erreichen, so als ob man die Szene wirklich anfässt und verschiebt.
Mein Problem ist zudem, dass ich standardmäßig die Kamera so weit weg habe, dass ich alle Objekte sehe. Ich muss also abhängig von meiner "Zoom"-Stufe die Verschiebungsschritte anpassen. Meine Objekte sind alle der Einfachheit halber in ganzen OpenGL-Einheiten angeordnet, also das erste Quad bei 0 mit der Länge 1, das zweite bei 1 ... usw.
Hier mal meine aktuelle Methode für die Berechnung:
Code: Alles auswählen
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
double dx = event->x() - lastPos.x();
double dy = event->y() - lastPos.y();
if (event->buttons() & Qt::LeftButton)
{
//xTrans = dx/(20.0*xScale);
//yTrans = dy/(20.0*yScale);
//xTrans = dx/35.0;
//yTrans = dy/35.0;
xTrans = dx/10;
yTrans = dy/10;
isMoving = true;
updatePositions();
updateGL();
}
else
{
isMoving = false;
}
lastPos = event->pos();
}
Also nochmal konkret gefragt:
1. Wie berechne ich mir den Verschiebungsfaktor, damit ich die Szene per Drag'n'Drop "genau" verschieben kann, egal wie weit ich entfernt bin.
2. Gibt es eine Möglichkeit, irgendwie die Mausposition auf die OpenGL-Position zu mappen und darüber die Verschiebung zu realisieren?
Ich hoffe irgendjemand kann mir dabei weiterhelfen. Wäre für Hilfe sehr dankbar!!!