Sie sind nicht angemeldet.

1

Freitag, 20. Januar 2012, 11:03

gibt es eine Abfrage für den aktuellen hlookat-Wert?

Hallo,
ich versuche es jetzt mal hier, nachdem im krpano-Forum keine Antwort kommt... und nachdem ich gesehen habe, dass hier auch einige am krpano-scripting verzweifeln ;-) ("niemand kann krpano bedienen außer Klaus")
Ich kann normale Sachen mit krpano machen. Ich benutze es sporadisch schon seit Jahren.
Aber was mich am meisten Zeit kostet, ist, eine autotour zusammenzusuchen.
Ich habe jetzt die Standard-Klaus-Autotour mit step inc zum Funktionieren gekriegt:
autotour mit fallback zur letzten Szene nach Benutzereingriff

Jetzt übe ich mich an einer Tour, wo die einzelnen Szenen mit autorotate ablaufen und, nachdem sie an einem bestimmten Punkt (360° vom Startpunkt) angekommen sind, automatisch auf die nächste Szene blenden.
Die Szenen sind alle in der XML-Datei hintereinander.

Ich habe es mit einer if-Abfrage gegen den aktuellen hlookat-Wert probiert - das funktioniert *natürlich* nicht.... Nach jeder Szene dachte ich, diese action mit dem entprechenden hlookat-Wert einzufügen:
<scene...>
...
</scene>
<action>
if(view.hlookat==85,loadscene(get(nextscene), null, MERGE, ZOOMBLEND(1,2));
</action>

Weiß jemand bitte Rat?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wishbone« (20. Januar 2012, 13:18)


iceman_fx

Mega-User

Beiträge: 578

Wohnort: Riesa / Dresden

Beruf: Webdesigner / Webentwickler / Fotograf

  • Nachricht senden

2

Freitag, 20. Januar 2012, 12:58

Dann werd ich Dir mal helfen.

Dein Ansatz ist korrekt, jedoch ist die interne Verarbeitung etwas anders.
Wenn Du Dich z.B. nach rechts drehst, geht der Wertebereich nicht von 0-360 sondern von 0 bis ~.

D.h., es kommen z.B. 720°, 388°, 1026° etc. vor, da jede volle Umdrehung hinzuaddiert wird.
Das gleiche hast Du nochmal im negativen Bereich, wenn Du Dich nach links drehst.

Daher kannst Du mit dieser einfach Abfrage dies nicht bewerkstelligen.
Du musst Dir dazu den realen Wert berechnen, z.B. so:

$this->cacheCode('[php]',' <action name="getHlookat">
<!--
%1 = auf Ganzzahl runden (true)
-->

set(hpos, get(view.hlookat));
set(hposreal, get(view.hlookat));
if (hpos LT 0, mul(hposreal, -1); );
div(hposreal, 360);
Math.floor(hposrealtmp, hposreal);
sub(hposreal, hposrealtmp);
mul(hposreal, 360);
if (hpos LT 0, sub(hposreal, 360, hposreal); );

if (%1 EQ true, roundval(hposreal, 0); roundval(hpos, 0); );
</action>
')

Und dann rufst Du immer wieder diese Aktion auf: <events onviewchange="getHlookat(); />
Jetzt einfach den Wert hposreal in Deiner if-Abfrage gegenprüfen.

Viel Spass damit.
iceman


PS: bin sehr viel im krp-Forum unterwegs, aber Deine Frage scheine ich übersehen zu haben.

3

Freitag, 20. Januar 2012, 13:17

oh ein Vorschlag!!! danke!!!!!! werde es abarbeiten und zu verstehen versuchen.
PS wollte nicht grob sein, nur, ich möchte das so gerne lernen, und komme einfach bei diesen schwierigeren Sachen nicht vorwärts...

iceman_fx

Mega-User

Beiträge: 578

Wohnort: Riesa / Dresden

Beruf: Webdesigner / Webentwickler / Fotograf

  • Nachricht senden

4

Freitag, 20. Januar 2012, 19:26

Kein Problem, warst ja nicht grob.
Ich kann das verstehen, wenn man nicht direkt aus dem Programmierbereich kommt oder sich einfach damit nicht befassen möchte, weil man andere Tätigkeiten hat.

Es gibt auch eine Menge Leute, die sich neben Klaus sehr gut mit krp auskennen (mich eingeschlossen).
Meist ist Klaus aber schneller mit beantworten, weil er täglich im Forum unterwegs ist.

Wenn Du Fragen hast, dann einfach hier rein oder in einem neuen Thread.
Ich bin aber nicht immer hier unterwegs, so dass eine Antwort (auch im krp-Forum) schon mal einige Tage dauern kann.

5

Samstag, 21. Januar 2012, 00:52

Jetzt übe ich mich an einer Tour, wo die einzelnen Szenen mit autorotate ablaufen und, nachdem sie an einem bestimmten Punkt (360° vom Startpunkt) angekommen sind, automatisch auf die nächste Szene blenden.
Die Szenen sind alle in der XML-Datei hintereinander.


Wenn es nur darum geht ist es viel einfacher die Zeit zu benutzen und per delayedcall zur nächsten Scene zu wechseln.
Bei autorotate bestimmt der "speed" Wert wieviele Grad/Sekunde gedreht werden.

Der Beitrag von »mops« (Samstag, 21. Januar 2012, 01:37) wurde vom Autor selbst gelöscht (Samstag, 21. Januar 2012, 01:41).

7

Samstag, 21. Januar 2012, 01:45

@ wishbone ash.
würde mal eine dreiviertelstunde joggen gehen, und nicht die ganze zeit vorm pc hocken.....hilft manchmal sehr viel...=o))

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »mops« (21. Januar 2012, 01:55)


8

Dienstag, 24. Januar 2012, 11:37

@ wishbone ash.
würde mal eine dreiviertelstunde joggen gehen, und nicht die ganze zeit vorm pc hocken.....hilft manchmal sehr viel...=o))
??

9

Dienstag, 24. Januar 2012, 11:38

Wenn Du Fragen hast, dann einfach hier rein oder in einem neuen Thread.
Ich bin aber nicht immer hier unterwegs, so dass eine Antwort (auch im krp-Forum) schon mal einige Tage dauern kann.

dankeeeeeeeee!!!!!!!!! du machst mir HOFFNUNG!!!!!!!!!!

10

Dienstag, 24. Januar 2012, 11:43

Wenn es nur darum geht ist es viel einfacher die Zeit zu benutzen und per delayedcall zur nächsten Scene zu wechseln.
Bei autorotate bestimmt der "speed" Wert wieviele Grad/Sekunde gedreht werden.

ja das geht natürlich, wenn kein Nutzereingriff erfolgt. Ich wollte dieses Script verwenden, sowohl für völlig selbstständiges Ablaufen, als auch, wenn ein Nutzer dran rum spielt. Anders als beim step inc Beispiel soll die Tour aber da weitermachen, wo sie vom Nutzer verlassen wird! Und trotzdem an einem festgelegten Punkt (nicht: nach weiteren 360°) auf die nächste Szene blenden.
.

11

Dienstag, 24. Januar 2012, 15:20

Dafür ist eigentlich die lookto Action prädestiniert. Per donecall kannst Du dann bestimmen was passiert wenn man "angekommen" ist.

12

Dienstag, 24. Januar 2012, 16:00

Dafür ist eigentlich die lookto Action prädestiniert. Per donecall kannst Du dann bestimmen was passiert wenn man "angekommen" ist.
Ich werde ein paar Testfälle machen, um zu sehen, was bei den verschiedenen Möglichkeiten passiert...