You are not logged in.

1

Thursday, May 7th 2015, 10:02am

adjusthlookat stoppt Rotation

Hi Klaus,

da ich für das automatische ein- und ausblenden von Hotspots die ath-Position des jeweiligen Hotspots abfrage, kommt es durch den ath von über 360° nach einer Drehung ja zu Problemen - soweit, so bekannt. Um das zu lösen, nutze ich "adjusthlookat(view.hlookat);". Leider bleibt die Autorotation nach einer kompletten Drehung bei 0° kurz stehen und beginnt dann wieder von vorne. Du hattest in einem anderen Post zwar mal gesagt dass die Syntax so nicht korrekt sei, doch mit dem von Dir damals genannten "adjusthlookat(0);" bleibt das Pano alle paar Sekunden kurz stehen.

Hast Du dafür eventuell eine Lösung parat, damit das Pano ohne Pausen schön weiterrotiert, man aber dennoch den ath auf 360° begrenzen kann?

Vielen Dank und Gruß,
Nupsi

toosten

Intermediate

Posts: 465

Location: Berlin

Occupation: freier Software-Entwickler ( HTML, JS, PHP, JSP, Flash, AS3, C++, Java, krpano, ---)

  • Send private message

2

Friday, May 8th 2015, 7:57am

copy( ath, view.hlookat);
for( ,
ath LT 0, add( ath, 360),);
for( , ath GT 360, sub( ath, 360),);

// ath 0 - 360

3

Friday, May 8th 2015, 9:43am

Hoi Toosten,

werde aus Deinem Code leider nicht ganz schlau. Versuche das mal zu zerbröseln...

1.kopiere view.hlookat-Wert in Variable ath
2.solange ath LT 0 addiere 360 zur Variable ath
3.solange ath GT 360 subtrahiere 360 von Variable ath
soweit, so klar....
4.würde dann das kopieren von ath nach view.hlookat bedingen, was wieder zu gleichem Problem führt?!

DOH *blink*

Klar! Nicht den view.hlookat neu setzen, sondern nur die interne Berechnung korrigieren. Also manchmal steht echt ein Elefant auf dem Schlauch.

Vielen Dank und Gruß aus dem Rande Spandaus *thumbup*
Nupsi

4

Friday, May 8th 2015, 1:07pm

Hi,

da gibt es eine bessere und schnellere Lösung:

Source code

1
2
add(ath, view.hlookat, 360000);
mod(ath, 360);


Zuerst wird 360000 addiert um den Wert sicher ins Positive zu bringen (ein noch größerer Wert wäre auch möglich, es muss nur ein vielfaches von 360 sein, aber 360000 wären bereits 1000 vollständige 360° Drehungen nach links).
Dann einfach modulo 360, das ist de Rest der Division durch 360.

Der Wert liegt dann immer im Bereich 0 - 360.

Das sind nur zwei einfache Operation, das ist einfacher und schneller als 2 for-Schleifen.


Bzgl. 'stoppt Rotation' - immer wenn die <view> Einstellungen geändert werden, wird dies als manueller Eingriff gewertet und dies stoppt die Autorotation. Ich aber schon am überlegen dies zu ändern und nur wirkliche Benutzerinteraktionen als Unterberechungen zu werten.

Schöne Grüße,
Klaus

5

Friday, May 8th 2015, 1:30pm

wow...elegante und für mein Vorhaben vor allem ressourcenschonende Lösung! Besten Dank, Klaus *thumbsup*

Und wenn die von Dir geplante Änderung keine Auswirkung auf z.B. zeitgesteuerte view-Änderungen hat, wäre das natürlich die perfekte Lösung. In meinen Rundgängen nutze ich nämlich relativ häufig irgendwelche Automatismen zur View- und Autorotationssteuerung.

Nochmals Danke und ein schönes WE!

Gruß,
Nupsi