Friday, December 31, 2004

Tricky portal/pointer code

I am working on having the user's laser pointer do the right thing when you pick through a portal. What should happen is the laser beam should break into pieces when it transitions through a portal. For example, now when you select an object in the mirror, the pointer simply points directly to the object from the avatar instead of bouncing against the mirror first. If you attempt to manipulate an object that is in a different space on the other side of a portal, the laser points to the position in the current space of where the object is in the remote. This looks bad and can be confusing.

The main reason I am doing this is in support of the CAD system, as picking through a portal is a central part of that UI, and it really needs to work in an appropriate way. Unfortunately, this is kind of complex. What has to happen is I have to add a laser segment into every space that the pointer traverses a portal to. And of course, this must be replicated - and it needs to be removed after every local render. My concern is that this may be a very expensive process and not worth the resulting payoff. I know there might be some speed enhancements by keeping the remote laser segments around longer, but I really don't want to worry about that yet.

Thursday, December 30, 2004

Artie Shaw

Somewhat off topic, but Artie Shaw - the great bandleader and clarinetist, died today. He was 94. If you haven't heard him and his orchestra play, run out and get his Self Portrait Anthology. I was simply astonished when I heard it the first time - particularly disk two. This guy rocked before there was rock.

Ghost objects

Wicket requires that a normal TSpace be rendered with additional interleaved objects that are not actually in the scene. These are what I call "ghost" objects. They are not in the TSpace hierarchy, but they can be rendered and used as if they were. They are actually owned by the TPortal in the case of the filters, which allows the programmer to render a scene with additional content when scene through the portal. What this means for Wicket is that the CAD tools, such as the 2D draw surfaces and edit boxes would only be displayed through the portal.

A related issue is removing objects in a scene. This tends to be a bit more complex, as it would require every frame to be checked to see if it matches a particular characteristic. This might be better done as some kind of global flag that the objects themselves can test against.

Tuesday, December 28, 2004


OK - didn't get much done today after all (day is not done yet though). I spent today working to fix my son's machine - 15 viruses, 95 different malwares, adware, etc. Our internet access was grinding to a halt, so I put a log onto the router and found out that his machine had been zombied - it was looking for open IP addresses to cause even more trouble. I ran Ad-Aware first, and didn't find any more than the usual suspects. Then I ran Spybot Search & Destroy, which found a few things - maybe about 3 or 4, but nothing that I hadn't seen before. Then I installed Spyware Doctor and this discovered about 95 different malware variants. I thought that this had killed the zombie problem, so I went back to work. A little later I noticed that the zombie was still quite alive, so finally I ran Norton Antivirus. This discovered a host of problems, some of which I am still dealing with. I am pretty sure that one of these is the problem, but if it isn't the only thing left is to wipe the disk and start over.

The moral is... don't let teenagers have access to the net.

Wicket Day 1

I need to make the user's laser pointer bounce properly in the mirrors and through portals. There are two reasons for this - the first is that it looks crappy to other users when you select an object through a mirror and the laser points in some random direction. The reason this happens is the selection is occurring in the frame of the space on the other side of the portal, but is being drawn in the local space. This can only be fixed by breaking the laser into pieces, one for each portal it traverses. The problem with this is it means I need to track all of these laser segments as they render in the remote spaces. I do something similar now with the Avatar down ray. I add a "foot frame" to whatever the down ray finds. This is how I have the avatar move with whatever it is on top of. I just add the delta translation of the foot frame to the avatar's position.

The second reason I need to track the bounce is that a portal will be able to add a task to the pointer when it picks through. If I have multiple portals, I will add multiple tasks - though I have no idea what this means in practice.

I have been thinking about this problem for way to long, and it is time to "Just Do It" tm. I took my Ritalin, killed the Spider Solitaire, the kids have left the building, and now I am ready to roll...

Tuesday, December 21, 2004

3Dsolve and Croquet

3DSolve is developing an application on top of Croquet. See more about it here .

Friday, December 17, 2004

Back from DC

There was a lot of interest in Croquet in DC. Had a lot of great conversations and had WAY too much to drink with Rick McGeer. But neither of us had to drive home and the scotch was pretty good.

Now to get the road map done and then code code code...

Monday, December 13, 2004

What Next?

I have one more bug to fix, then I am on to the Croquet Road Map. I have plenty of notes and things, so it should be pretty easy to put together once I start. Unfortunately, I don't start until Friday, as I will be in Washington DC thru Thursday evening. Once THAT is done, then I get to work on Wicket.

The big missing piece is the documentation. I REALLY need to do this, but it may have to wait till January. I may have some major revisions of how the system works anyway, so it is just as well.

Sunday, December 12, 2004

Performance issue ... solved

I finally figured out what was going on with Orion's performance issue, and why it was hard for me to find it. Turns out that Andreas modified the #stepTime method to return 20, instead of 0 as it was originally. Later this was modified to return 1 if the highPerformance setting was enabled, which it usually isn't. When I set this flag in the preferences, I had essentially the same frame rate with the current Jasmine change set as with Orion's older pre-change version.

I speculate that the reason he had an increase in frame rate when he put another morph on top of the TeapotMorph was that the other morph was updating at fullspeed, which would of course force the underneath morph to update at the same rate.

This was hard to figure out, because I was always testing with larger worlds on machines that were slower than what Orion has. That is, I couldn't usually even get close to 40 Hz update rates with what I was usually doing, so the #stepTime didn't really matter much, as I was running less than this speed. The reason there was such an unevenness to the performance that Orion also noticed was that we use the morph render time to also update and process the future and remote message queue. The longer the delay, the more messages that would qualify for computation.

Saturday, December 11, 2004

To Do:

I am hitting the wall again - lots of stuff to do.

- Figure out Orion's performance problem. Even with a very simple world, we have some large cost thing going on now that wasn't there a few months ago.
- Fix the bugs in Mad Hatter - the Sierpinski bound sphere is in the wrong place
- Write up the Croquet Road Map. This is essentially a listing of the high priority items that we have.
- Write the new Wicket demo. See more about this below.

And I need to have it all done by the end of January. Actually, the road map needs to be done by the end of December. As Crichton used to say: "Butt in the seat".

Thursday, December 02, 2004

Fixing and finding bugs

I want to finish up the bug fixing for the old Wicket editor. I don't plan to use this for the next version, but I am interested in why it went south so badly. Also, I will look into the texture problem with the duplicated textures. Finally, I need to figure out why the bound sphere for the sierpinski in MadHatter is in the wrong place. I think that for some reason it is not getting updated, so it is still at 0,0,0.

I completed the paper for the C5 conference. I think the ideas are pretty good, though I would have liked to discuss the conceptual details a bit more (and a bit better). It turns out that the MVC model is very similar to what we came up with to solve modeless interactions in collaborative 3D. Here is an interesting overview of MVC by the creator of the idea:

MVC History

Another important early paper was written by Adele Goldberg and Dave Robson entitled:

"A Metaphor for User Interface Design."

Unfortunately, we simply could not find a web reference to this paper which was published as part of the U of Hawaii Symposium on System Science. Ted Kaehler was kind enough to provide me with a digitized copy. Alan was also surprised that this was so hard to come by, and suggested that we should have an online repository for some of the important papers in the field (at least the ones that we think are important).