Page 1 of 1

QTVR's in revlets

Posted: Mon Nov 30, 2009 3:33 pm
by Dixie
Good afternoon...

I have been hoping for a while that QTVR's would run in revlets... I have been pestering support about this on a number of occasions.

The bug report can be found here... http://quality.runrev.com/qacenter/show_bug.cgi?id=8294

However the last reply from support states that "... you can't have interactivity with QTVR's in revlets. We're not sure if we will be able to add this, so I don't have any kind of timescale for you."... fair enough!. If that's the position,then that's the position. So, I thought that I would try and 'roll my own' interactivity with QTVR's in revlets... and I have had some success... You are able to see my attempt here :- http://www.revtest.ihouse.on-rev.com

If someone would like to look at this... place the script below in a player object and the QTVR will pan, tilt and zoom quite smoothly... on the desktop!... as a revlet 'Pan' and 'Tilt' is fine, though I am unable to 'zoom in' and 'zoom out'. If someone would be kind enough to cast an eye over this script and see if they have any suggestions about the problem of 'zooming' in and out... (or where I am going wrong) The 'zooming' in handled by the 'mouseWithin' handler (which works on the desktop)... it won't work when running as a revlet. I have tried 'keyDown', 'rawKeyDown', 'the keysDown'... but am not getting anywhere.

Code: Select all

local moviePan,movieRotateH,movieRotateStartLocH,oldMouseH
local movieTilt,movieRotateV,movieRotateStartLocV,oldMouseV
local movieZoom,whichZoom

on mouseWithin
   if shiftKey() is down then
      set the lockcursor to true
      set cursor to 66
      put the zoom of me into movieZoom
      put 1 into whichZoom
      set the qtidlerate to 1
      zoomMovie
   end if
   
   if controlKey() is down then
      set the lockcursor to true
      set cursor to 67
      put the zoom of me into movieZoom
      put 2 into whichZoom
      set the qtidlerate to 1
      zoomMovie
   end if
end mouseWithin

on mouseDown
   set the lockcursor to false
   set the qtidlerate to 1
   
   put 0 into movieRotateH
   put the pan of me into moviePan
   put item 1 of mouseLoc() into movieRotateStartLocH
   
   put 0 into movieRotateV
   put the tilt of me into movieTilt
   put item 2 of mouseLoc() into movieRotateStartLocV
   
   updateMovie
end mouseDown

on mouseMove newMouseH,newMouseV
   put ((movieRotateStartLocH - oldMouseH) * .01)  into movieRotateH
   put newMouseH into oldMouseH
   
   put ((movieRotateStartLocV - oldMouseV) * .01) into movieRotateV
   put newMouseV into oldMouseV
end mouseMove

on updateMovie
   if  the mouse is up then
      repeat for each line cancelMessage in the pendingMessages
         cancel (item 1 of cancelMessage)
      end repeat
      
      put 0 into movieRotateH
      set the qtidlerate to 50
      exit updateMovie
   end if
   
   add movieRotateH to moviePan
   set the pan of me to moviePan
   
   add movieRotateV to movieTilt
   set the tilt of me to movieTilt
   if movieTilt <= (item 1 of line 2 of the constraints of me) then put  (item 1 of line 2 of the constraints of me) into movieTilt
   if movieTilt >= (item 2 of line 2 of the constraints of me) then put  (item 2 of line 2 of the constraints of me) into movieTilt

   send updateMovie to me in 10 millisecs
end upDateMovie

on zoomMovie
   if shiftKey() is up AND controlKey() is up then
      repeat for each line cancelMessage in the pendingMessages
         cancel (item 1 of cancelMessage)
      end repeat
      
      put empty into whichZoom
      set the qtidlerate to 50
      set lockcursor to false
      exit zoomMovie
   end if
   
   if whichZoom = 1 then put (movieZoom - 0.2) into movieZoom
   if whichZoom = 2 then put (movieZoom + 0.2) into movieZoom
   
   wait 1 millisec with messages
   set the zoom of me to movieZoom
   
   if movieZoom <= (item 1 of line 3 of the constraints of me) then put  (item 1 of line 3 of the constraints of me) into movieZoom
   if movieZoom >= (item 2 of line 3 of the constraints of me) then put  (item 2 of line 3 of the constraints of me) into movieZoom
   
   send zoomMovie to me in 10 millisecs
end zoomMovie
Help on this would really be appreciated...

be well

Dixie

Re: QTVR's in revlets

Posted: Tue Dec 01, 2009 1:27 am
by bn
Hi Dixie,
first of all your script is very very nice, it opens the way for playing QTVR in a revlet. Thank you.

I tried a long time with different approaches to get the zoom to work and in the end it turned out that locking the cursor is the culprit. Who would have thought?
This is my version, pretty close to your original version. In an opencard handler I set the idlerate to 30. The idelrate, in case you dont know is the intervall in mlliseconds Rev uses to send e.g. mouseWithin. Since the zoom is triggered by a mouseWithin it looks smoother this way.
If you block the lockcursor in your original post it works in a Revlet too. Although I had the impression that the zoom 'hangs' more often then with my version. This happens after long pans. reentering the player with the mouse reestablishes the zoom.

Code: Select all

local moviePan,movieRotateH,movieRotateStartLocH,oldMouseH
local movieTilt,movieRotateV,movieRotateStartLocV,oldMouseV
local movieZoom


on mouseDown
   set the lockcursor to false
   set the qtidlerate to 10
   put 0 into movieRotateH
   put the pan of me into moviePan
   put item 1 of mouseLoc() into movieRotateStartLocH
   
   put 0 into movieRotateV
   put the tilt of me into movieTilt
   put item 2 of mouseLoc() into movieRotateStartLocV
   
   updateMovie
end mouseDown

on mouseWithin
   if the controlkey is down or the shiftkey is down then
      put the zoom of me into movieZoom
      set the qtIdlerate to 5
      if the controlkey is down then
         then put (movieZoom - 0.2) into movieZoom
         set the zoom of me to movieZoom
      end if
      if the shiftKey is down then 
         then put (movieZoom + 0.2) into movieZoom
         set the zoom of me to movieZoom
      end if
      if movieZoom <= (item 1 of line 3 of the constraints of me) then put  (item 1 of line 3 of the constraints of me) into movieZoom
      if movieZoom >= (item 2 of line 3 of the constraints of me) then put  (item 2 of line 3 of the constraints of me) into movieZoom
      set the qtIdlerate to 50
   end if
end mouseWithin


on mouseMove newMouseH,newMouseV
   put ((movieRotateStartLocH - oldMouseH) * .01)  into movieRotateH
   put newMouseH into oldMouseH
   
   put ((movieRotateStartLocV - oldMouseV) * .01) into movieRotateV
   put newMouseV into oldMouseV
end mouseMove

on updateMovie
   if  the mouse is up then
      repeat for each line cancelMessage in the pendingMessages
         if item 3 of cancelMessage is "updateMovie" then
            cancel (item 1 of cancelMessage)
         end if
      end repeat
      
      put 0 into movieRotateH
      set the qtidlerate to 50
      exit updateMovie
   end if
   
   add movieRotateH to moviePan
   set the pan of me to moviePan
   
   add movieRotateV to movieTilt
   set the tilt of me to movieTilt
   if movieTilt <= (item 1 of line 2 of the constraints of me) then put  (item 1 of line 2 of the constraints of me) into movieTilt
   if movieTilt >= (item 2 of line 2 of the constraints of me) then put  (item 2 of line 2 of the constraints of me) into movieTilt
   
   send updateMovie to me in 10 millisecs
end upDateMovie[code]local moviePan,movieRotateH,movieRotateStartLocH,oldMouseH
local movieTilt,movieRotateV,movieRotateStartLocV,oldMouseV
local movieZoom


on mouseDown
   set the lockcursor to false
   set the qtidlerate to 10
   put 0 into movieRotateH
   put the pan of me into moviePan
   put item 1 of mouseLoc() into movieRotateStartLocH
   
   put 0 into movieRotateV
   put the tilt of me into movieTilt
   put item 2 of mouseLoc() into movieRotateStartLocV
   
   updateMovie
end mouseDown

on mouseWithin
   if the controlkey is down or the shiftkey is down then
      put the zoom of me into movieZoom
      set the qtIdlerate to 5
      if the controlkey is down then
         then put (movieZoom - 0.2) into movieZoom
         set the zoom of me to movieZoom
      end if
      if the shiftKey is down then 
         then put (movieZoom + 0.2) into movieZoom
         set the zoom of me to movieZoom
      end if
      if movieZoom <= (item 1 of line 3 of the constraints of me) then put  (item 1 of line 3 of the constraints of me) into movieZoom
      if movieZoom >= (item 2 of line 3 of the constraints of me) then put  (item 2 of line 3 of the constraints of me) into movieZoom
      set the qtIdlerate to 50
   end if
end mouseWithin


on mouseMove newMouseH,newMouseV
   put ((movieRotateStartLocH - oldMouseH) * .01)  into movieRotateH
   put newMouseH into oldMouseH
   
   put ((movieRotateStartLocV - oldMouseV) * .01) into movieRotateV
   put newMouseV into oldMouseV
end mouseMove

on updateMovie
   if  the mouse is up then
      repeat for each line cancelMessage in the pendingMessages
         if item 3 of cancelMessage is "updateMovie" then
            cancel (item 1 of cancelMessage)
         end if
      end repeat
      
      put 0 into movieRotateH
      set the qtidlerate to 50
      exit updateMovie
   end if
   
   add movieRotateH to moviePan
   set the pan of me to moviePan
   
   add movieRotateV to movieTilt
   set the tilt of me to movieTilt
   if movieTilt <= (item 1 of line 2 of the constraints of me) then put  (item 1 of line 2 of the constraints of me) into movieTilt
   if movieTilt >= (item 2 of line 2 of the constraints of me) then put  (item 2 of line 2 of the constraints of me) into movieTilt
   
   send updateMovie to me in 10 millisecs
end upDateMovie
So now you can zoom, pan and tilt in your Revlet, although without the feedback of the cursor.
If you also have the impression that it is the "lockcursor" then you might file a bug report with the quality control center. Just dont tell them how many hours you and than I spend on this...
regards
Bernd

you might want to have a look at it
http://berndniggemann.on-rev.com/qtvr/

Re: QTVR's in revlets

Posted: Tue Dec 01, 2009 1:10 pm
by Dixie
Bernd...

Thanks for looking at this... hey,hey, you were right on the button! Just commenting out 'lockCursor' solved the problem, now 'zoom' is working in the revlet. Also thanks for the tip on the idlerate, I had not even considered it.... you put a smile on my face. :D

I shall have a close look at your script changes this evening after all the domestic work has been done..

Code: Select all

on mouseWithin
   if the shiftKey is down then
      --set the lockcursor to true
      --set cursor to 66
      put the zoom of me into movieZoom
      put 1 into whichZoom
      set the qtidlerate to 1
      zoomMovie
   end if
   
   if the controlKey is down then
      --set the lockcursor to true
      --set cursor to 67
      put the zoom of me into movieZoom
      put 2 into whichZoom
      set the qtidlerate to 1
      zoomMovie
   end if
end mouseWithin
be well

Dixie

Re: QTVR's in revlets

Posted: Tue Dec 01, 2009 10:05 pm
by bn
Dixie,

I tried to clean up the code a little more to make the revlet a little more responsive. I also commented the code a little. I tried to reduce redundancies etc.
This is what I came up with:

Code: Select all

local moviePan,movieRotateH,movieRotateStartLocH,oldMouseH
local movieTilt,movieRotateV,movieRotateStartLocV,oldMouseV
local movieZoom, tTiltConstraintsLow, tTiltConstrainstHigh

on mouseDown
   set the qtidlerate to 5
   put 0 into movieRotateH
   put the clickLoc into tClick
   put the pan of me into moviePan
   put item 1 of tClick into movieRotateStartLocH
   
   put 0 into movieRotateV
   put the tilt of me into movieTilt
   put item 2 of tClick into movieRotateStartLocV
   
   -- moved this here to only query the property once and it does not change
   -- before it was queuried many times, properties are slower than script local variables
   put (item 1 of line 2 of the constraints of me) into tTiltConstraintsLow
   put (item 2 of line 2 of the constraints of me) into tTiltConstrainstHigh
   
   updateMovie
end mouseDown

on mouseWithin
   if the controlkey is down or the shiftkey is down then
      put the zoom of me into movieZoom
      -- increases the responsiveness
      set the idlerate to 10
      -- lock screen because we do screen updates
      lock screen
      if the controlkey is down then
         put (movieZoom - 0.2) into movieZoom
         set the zoom of me to movieZoom
         -- lock messages cause we would trigger the script of the scrollbar
         -- unlock the following if you use a scrollbar
         --         lock messages
         --         set the thumbposition of scrollbar 1 to movieZoom
         --         unlock messages
      end if
      if the shiftKey is down then 
         then put (movieZoom + 0.2) into movieZoom
         set the zoom of me to movieZoom
         -- lock messages cause we would trigger the script of the scrollbar
         -- unlock the following if you use a scrollbar
         --         lock messages
         --         set the thumbposition of scrollbar 1 to movieZoom
         --         unlock messages
      end if
      if movieZoom <= tTiltConstraintsLow then put  tTiltConstraintsLow into movieZoom
      if movieZoom >= tTiltConstrainstHigh then 
         put  tTiltConstrainstHigh into movieZoom
      end if
   else
      -- set idlerate back up to reduce burden on cpu
      set the idlerate to 30
   end if
end mouseWithin

on mouseMove newMouseH,newMouseV
      put ((movieRotateStartLocH - oldMouseH) * .01)  into movieRotateH
      put newMouseH into oldMouseH
      
      put ((movieRotateStartLocV - oldMouseV) * .01) into movieRotateV
      put newMouseV into oldMouseV
end mouseMove

on updateMovie
   if  the mouse is up then
      repeat for each line cancelMessage in the pendingMessages
         if item 3 of cancelMessage is "updateMovie" then
            cancel (item 1 of cancelMessage)
         end if
      end repeat
      
      put 0 into movieRotateH
      set the qtidlerate to 50
      exit updateMovie
   end if
   -- lock screen cause we do 2 screen updates
   lock screen
   add movieRotateH to moviePan
   set the pan of me to moviePan
   
   add movieRotateV to movieTilt
   set the tilt of me to movieTilt
   
   if movieZoom <= tTiltConstraintsLow then put  tTiltConstraintsLow into movieZoom
   if movieZoom >= tTiltConstrainstHigh then put  tTiltConstrainstHigh into movieZoom
   -- just to not pile up messages
   if "updateMovie" is not in the pendingMessages then send updateMovie to me in 10 millisecs
end upDateMovie
The current version is still under
http://berndniggemann.on-rev.com/qtvr/
I also put the source movie on my server so Jacque does not have the traffic from loading the movie.
Let me know how it works and it would be nice if you could post your final version.
I think you made some of the Revers happy with this. Once you got it working you should also post it to the list.
regards
Bernd

Edit: I found out why at times the zoom does not work. If you pan and tilt around and by chance leave the boundaries of the player, it will still pan and tilt but once you leave the mouseWithin message stops, even if you stop panning and tilting with the mouse inside the rect of the player. It is documented in the dictionary for the mouseWithin. I did find a workaround for it but it led to a occasional small additional movement pan/tilt at the end of the panning. So I did not implement it and the user has to move the mouse once out of the area of the player and move back in again for the zoom to work again.

BTW above code should work as is in every script of a player that has a quicktime panorama movie (QTVR) in it.

Re: QTVR's in revlets

Posted: Thu Dec 03, 2009 12:20 pm
by Dixie
Bernd...

It all works fine, you have done a nice job 'tweaking' that first script... The only thing I can find fault with, is with the 'zooming'... isn't it the 'Shift Key' you should use to zoom in and the 'Control Key' to zoom out :?:

be well

Dixie

Re: QTVR's in revlets

Posted: Thu Dec 03, 2009 12:36 pm
by bn
Dixie,
thank you. Indeed I have it the wrong way. In the Quicktime Player the shift-key zooms in and the Ctrl-key zooms out.
Meanwhile I did a version that supports on a Mac the magic-mouse ball and on the Macbooks with the trackpad that support two finger gestures zoom-in, zoom-out and pan.
If someone could give me the rawkey value of the Windows scollwheels for forward and backward I see if I can add that too. On the Mac it is 65309 = forward, 65308 = backward.
One can find this if one makes a new stack and in the card script:

Code: Select all

on rawkeydown theKey
   put theKey
end rawkeydown
and looks in the message box what the value is.
And did some more tweaking that I will explain than.
I will change the script re shift/ctrl key and post it later.
regards
Bernd

Re: QTVR's in revlets

Posted: Thu Dec 03, 2009 7:35 pm
by bn
Dixie,
here is my current version.

Code: Select all

local moviePan,movieRotateH,movieRotateStartLocH
local movieTilt,movieRotateV,movieRotateStartLocV
local movieZoom, tTiltConstraintsLow, tTiltConstraintsHigh, tZoomConstraintsLow, tZoomConstraintsHigh
local tConstraintsOfMovie, zoomLength

on mouseDown
   set the qtidlerate to 5
   put 0 into movieRotateH
   put the clickLoc into tClick
   put the pan of me into moviePan
   put item 1 of tClick into movieRotateStartLocH
   
   put 0 into movieRotateV
   put the tilt of me into movieTilt
   put item 2 of tClick into movieRotateStartLocV
   
   if tConstraintsOfMovie is "" then -- has not yet been initialized/first time
      initializeTheMovie
   end if
   updateMovie
end mouseDown

on mouseWithin
   if the controlkey is down or the shiftkey is down then
      if tConstraintsOfMovie is "" then initializeTheMovie -- only if not initialized
      -- increases the responsiveness
      set the idlerate to 10
      -- lock screen because we do screen updates
      lock screen
      if the controlkey is down then
         put (movieZoom + 0.2) into movieZoom
         if movieZoom >= tZoomConstraintsLow then put  tZoomConstraintsLow into movieZoom
         set the zoom of me to movieZoom
      end if
      if the shiftKey is down then 
         put (movieZoom - 0.2) into movieZoom
         if movieZoom <= tZoomConstraintsHigh then put  tZoomConstraintsHigh into movieZoom
         set the zoom of me to movieZoom
      end if
      unlock screen
   else
      -- set idlerate back up to reduce burden on cpu or set it here to be 30
      -- idlerate is the time in milliseconds between e.g. mouseWithin messages beeing sent
      set the idlerate to 30
   end if
end mouseWithin

on mouseMove newMouseH,newMouseV
      put ((movieRotateStartLocH - newMouseH) * .01)  into movieRotateH
      put ((movieRotateStartLocV - newMouseV) * .01) into movieRotateV
end mouseMove

on updateMovie
   if  the mouse is up then
      repeat for each line cancelMessage in the pendingMessages
         if item 3 of cancelMessage is "updateMovie" then
            cancel (item 1 of cancelMessage)
         end if
      end repeat
      
      put 0 into movieRotateH
      set the qtidlerate to 50
      exit updateMovie
   end if
   -- lock screen cause we do 2 screen updates
   lock screen
   add movieRotateH to moviePan
   set the pan of me to moviePan
   
   add movieRotateV to movieTilt
   
   -- adjusts the max tilt to the zoomlevel, when zoomed out max tilt is low or zero
   -- when zoomed in tilt is highest at the zoomconstraints
   -- this avoids that the user has to wait until  movieTilt comes down 
   put 1- ((movieZoom - tZoomConstraintsHigh)/zoomLength) into zoomFactor
   put tTiltConstraintsHigh * (zoomFactor +.07) into MaxTilt
   put 0 - MaxTilt into MinTilt
   
   if movieTilt < MinTilt then put  MinTilt into movieTilt
   if movieTilt > MaxTilt then put  MaxTilt into movieTilt
   
   set the tilt of me to movieTilt
   unlock screen
   
    -- put "tilt " & movieTilt && "zoom " & movieZoom && "pan " & moviePan
   -- just to not pile up messages
   if "updateMovie" is not in the pendingMessages then send updateMovie to me in 10 millisecs
end upDateMovie


-- to catch mighty mouse scrollball and Mac touchpad
on rawKeyDown theKey
   if not (the mouseloc is within the rect of me) then pass rawKeyDown
   --if theKey is not among the words of "65311 65310 65309 65308" then pass rawKeyDown
   
   if tConstraintsOfMovie = "" then -- was not inititalized by mouseDown
      initializeTheMovie
   end if
   
   switch theKey
      case "65311" -- left touchpad/scrollball
         subtract 1 from moviePan
         set the pan of me to moviePan
         break
      case "65310" -- right left touchpad/scrollball
         add 1 to moviePan
         set the pan of me to moviePan 
         break
      case "65309" -- forward touchpad/scrollball
      case "65362" -- up arrow
         put (movieZoom - 0.4) into movieZoom
         if movieZoom <= tZoomConstraintsHigh then put  tZoomConstraintsHigh into movieZoom
         set the zoom of me to movieZoom
         break
      case "65308" -- backward touchpad/scrollball
         put (movieZoom + 0.4) into movieZoom
         if movieZoom >= tZoomConstraintsLow then put  tZoomConstraintsLow into movieZoom
         set the zoom of me to movieZoom
         break
   end switch
end rawKeyDown

on mouseUp
   -- this handler refocuses on the player
   -- since mouseWithin is lost if during mouse movements with the mouse down
   -- the cursor leaves the player rect and comes back.
   -- this restores mouseWithin messages so the shift/ctrl keys work
   put 0 into movieRotateH -- to reset in case a "updateMovie" is still pending
   put 0 into movieRotateV -- to reset in case a "updateMovie" is still pending
   put the mouseloc into aLoc
   lock screen
   click at 1,1
   set the screenmouseLoc to globalloc (aLoc)
   unlock screen
end mouseUp

private command initializeTheMovie
   put the constraints of me into tConstraintsOfMovie
   put (item 1 of line 2 of tConstraintsOfMovie) into tTiltConstraintsLow
   put (item 2 of line 2 of tConstraintsOfMovie) into tTiltConstraintsHigh
   put (item 1 of line 3 of tConstraintsOfMovie) into tZoomConstraintsHigh
   put (item 2 of line 3 of tConstraintsOfMovie) into tZoomConstraintsLow
   put the zoom of me into movieZoom
   put the tilt of me into movieTilt
   put the pan of me into moviePan
   
   put tZoomConstraintsLow - tZoomConstraintsHigh into zoomLength
end initializeTheMovie
it works in the revlet, please tell me how it works for you. E.g in the bigger panorama movie of yours, ihouse. I tested with small movies of different setups and it seems to work.
regards
Bernd

Re: QTVR's in revlets

Posted: Fri Dec 04, 2009 11:14 am
by Dixie
Bernd...
Edit: I found out why at times the zoom does not work. If you pan and tilt around and by chance leave the boundaries of the player, it will still pan and tilt but once you leave the mouseWithin message stops, even if you stop panning and tilting with the mouse inside the rect of the player. It is documented in the dictionary for the mouseWithin. I did find a workaround for it but it led to a occasional small additional movement pan/tilt at the end of the panning. So I did not implement it and the user has to move the mouse once out of the area of the player and move back in again for the zoom to work again.
I think that the solution to this problem is to put this mouseEnter handler in the script of the player ... point to.... http://revtest.ihouse.on-rev.com

Code: Select all

on mouseEnter
   do "mouseWithin"
end mouseEnter
be well

Dixie

err... Bernd... ignore this post... I was sure it was the solution last night... I must have dreamt it, as it is still being a problem this morning...

Re: QTVR's in revlets

Posted: Fri Dec 04, 2009 1:05 pm
by bn
Dixie,
in my latest revision that I posted above the "lost within" is taken care of. Also the scrollball of the trackpad of the macBook does not work, I think you used an older version. Still I feel it runs a bit smoother than before. At times when clicking fast after a pan it does not respond.
Please try the latest version and see if it works.
regards
Bernd
PS very nice house, funny how one visits houses today, the sofa looks comfy though...

Re: QTVR's in revlets

Posted: Fri Dec 04, 2009 1:35 pm
by Dixie
Bernd...

Well done... your re-working of the script is really neat. If you would like to see this posted to the ' list', that you talk about, then I think that you should do it as you have now put a lot more time into it than I have done...

I am now going to see if I can get the different cursors running, as in the arrows pointing to the left or right as you pan along with the magnifying zoom cursors... I also now want to look at different ways of adding comments to the QTVR's as they pan and tilt..

if you send me an email address, rather than making this topic ever longer I'll let you know how I get on, if it would be of interest... john@ihouse.on-rev.com .

I'm smiling... (the cat is smiling too!)... take care :)

Dixie

Re: QTVR's in revlets

Posted: Fri Dec 04, 2009 2:02 pm
by bn
Dixie,
my email is niggeman (at) uni-wh (dot) de.
I posted the code to the list: http://n4.nabble.com/Quicktime-VR-panor ... ml#a948484
I also did send Jacqueline Landman-Gay the code.
Without your approach I would not have thought of trying to run QTVR in a revlet.
Doing this I learned a lot about the secrets of QTVR like tilt angle, zoom level and more, things very handy in everyday life...
Applying this I now know that I dont just look around, I now pan and zoom and tilt, which is a lot more sophisticated than before :)

I hope Rev will figure out how to play QTVR natively in a revlet, I am shure the cat will appreciate it too.
regards
Bernd

Re: QTVR's in revlets

Posted: Sat Dec 12, 2009 5:41 pm
by bn
Dixie,
I tried to do something to the cursor, not replace it but add to it. You might have a look at it
http://berndniggemann.on-rev.com/qtvr/
what do you think? Should the arrows look differently, different color? or are they superflous in the way they are implemented? Too small, too large?
Suggestions welcome.
Apart from the arrows: on my machine the whole thing runs smoothly, zooming and panning and tilting. And without unnecessary strain on the processor when idling.
I've sent you a version to your mail account, will send you this version if it is ok'd/changed.
regards
Bernd

Re: QTVR's in revlets

Posted: Mon Mar 01, 2010 7:25 pm
by thatkeith
I hope Rev will figure out how to play QTVR natively in a revlet
A reasonable wish. Sadly, it looks like QTVR's time has passed. This media doesn't work at all in Win7 64bit and it isn't supported by QuickTime X. If you install Snow Leopard (Mac OS X 10.6) you'll need QuickTime 7 as well in order to play QTVR media.

Apple's maintained a total silence on the QTVR mailing list in recent years with regards to the last few years' erosion of QuickTime's sprite and VR abilities and recent total QTVR failures, so I've switched to using Flash-based players. (http://www.panoramaphotographer.com/) But I'd love to hear peoples' thoughts on whether Rev could manage the kind of rotations & transformations needed to produce VR-like behaviour from cubeface or equirectangular graphics. The maths isn't something I 'know', but I could get it.

If it was possible to do this more natively in Rev it would open things up in all sorts of directions.

k (a long-lost soul, coming back to Rev after years in the wilderness)

Re: QTVR's in revlets

Posted: Mon Mar 01, 2010 8:13 pm
by bn
K,
Quicktime in MacOSX 6.xx is in my opinion not completely ported from the "old" Quicktime, but I am pretty shure eventually it will be completely ported. Why I think so? because Quicktime is such a core technology in Apples set up, they could not scale it back. And the Quicktime player 7 does play the QTVR.
I just hope they will not forget to also port the VR technology into the 64 bit Quicktime.
a review of Snow Leopard and Quicktime:
http://arstechnica.com/apple/reviews/20 ... uicktime-x
thatkeith wrote:But I'd love to hear peoples' thoughts on whether Rev could manage the kind of rotations & transformations needed to produce VR-like behaviour from cubeface or equirectangular graphics
without an external this would be too slow in Rev. And you would have an object that is not compatible with other players/formats.
regards
Bernd

Re: QTVR's in revlets

Posted: Mon Mar 01, 2010 9:42 pm
by thatkeith
I hope people don't mind me going a bit deeper on this. It is an area that I've been involved with for some time, and I really *would* like to be able to do this stuff in Rev - without relying on something that's very likely to be heading towards EOL.
bn wrote:Quicktime is such a core technology in Apples set up, they could not scale it back.
That is true about QuickTime. However, QuickTime VR has always been a bit of a stepchild as far as the QuickTime architecture is concerned. Right from when it first appeared (as the result of a programmer's pet project) it was never a *perfect* fit in the timeline-based world of QuickTime content. In that respect QTVR is *entirely* different.
It has suffered sorely in recent years with the ongoing shedding of QT interactive abilities such as wired sprites, Flash tracks, and so on. And there is absolutely no word of any relief with regards to QTVR in Win7 64bit. From a calm & considered QTVR mailing list thread on this topic last November:
The QTVR 64-bit Windows problem has been around for over three years and Apple has done nothing to fix it. I'm told it wouldn't have been hard to fix, so Apple not fixing it appears to have been a deliberate choice.
I had hoped that the new QuickTime X - a major rewrite of QuickTime - was how Apple was planning to roll out updated QTVR code and the 65 bit Windows fix. But QuickTime X doesn't support QTVR at all.
Draw your own conclusions.
QuickTime Player 7 plays QTVR as it always has done. But the argument that QTVR will eventually make a magical comeback has worn rather thin in the VR photo community. Dig through two of the 'VR heartland' lists for a feel of this: http://lists.apple.com/mailman/listinfo/quicktime-vr and http://www.panotools.org/mailarchive
bn wrote:I just hope they will not forget to also port the VR technology into the 64 bit Quicktime.
Hmm... :)
thatkeith wrote:But I'd love to hear peoples' thoughts on whether Rev could manage the kind of rotations & transformations needed to produce VR-like behaviour from cubeface or equirectangular graphics
bn wrote:without an external this would be too slow in Rev. And you would have an object that is not compatible with other players/formats.
That is a good point about the need for an external. Things like this have been built for the iPhone using OpenGL (PangeaVR, CubeWorld) - perhaps something along those lines then, eh? ;-)
As for the player/format compatibility point, that's a very good observation. But in the last couple of years or so the VR photography community has been moving towards using JPEG cubeface sets or JPEG 'equirectangular' images - a standard format that's not proprietary at all. This makes *more* sense, not less; I could use the same source images with a Rev tool as I do for my current Flash-based browser-bound presentations of work.

Okay, starry-eyed me - sorry, I'm a little excited about getting back into scripting custom things and experimenting properly. :-)

k