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.
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