<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8971111</id><updated>2011-04-21T19:54:28.542-07:00</updated><title type='text'>SAS Development Journal (++errata)</title><subtitle type='html'>Development Journal for Project Luminance, a Short Attention Span gig in the Multimedia Program at California State University. Yes, I'm getting a degree for working on this. No, I won't fix your computer. Unless you are female. And really cute. And sane.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8971111.post-111620529439753448</id><published>2005-05-15T17:56:00.000-07:00</published><updated>2005-05-15T18:01:34.410-07:00</updated><title type='text'>5-15-2005 More on Fish</title><content type='html'>With Lee's new graphics, I have put together a new &lt;a href="http://mmgrad.csuhayward.edu/usr/swong/fishMovement-offline.html"&gt;fish scene&lt;/a&gt;. For the orange fish, I beefed up the manipulation force and inverted the action, so that the fish are attracted to the mouse. They swim toward the cursor, swim in ellipses around it, and leave at tangents - this is an emergent behavior in the movement algorithm that looked kind of neat during testing. Having them lock onto the cursor was just kind of boring. The smaller purple fish flee the cursor as before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-111620529439753448?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/111620529439753448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=111620529439753448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111620529439753448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111620529439753448'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/05/5-15-2005-more-on-fish.html' title='5-15-2005 More on Fish'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-111620496916820709</id><published>2005-05-15T17:48:00.000-07:00</published><updated>2005-05-15T17:56:09.173-07:00</updated><title type='text'>5-15-2005</title><content type='html'>It's all pretty much working now. We swapped out Lee's G5 tower for a Dell D600 laptop, giving us a massive improvement in performance. In the heaviest scenes, I estimate that the latency is down to about a quarter of a second. Foggy windows, Tinkertoys, and Fish all work very well, and JJ's scary blob transition scene has a very different character.&lt;br /&gt;&lt;br /&gt;Working on a few things still. Tinkertoys has a problem where any background layers are being drawn on top of the layer that the drawing API works on. I'll need to look into that more. Lee put up some new fish graphics, and I'm working on some new code for this new species of fish that will have them moving a bit differently.&lt;br /&gt;&lt;br /&gt;Incidentally, I added code to all of the fish that has them react when they are directly touched. It's based on a hitTest method, and alters the fish's destination point as if the user had touched that instead. The old movement method is still in there, so fish will tend (though not always) to steer around the user, but they will also try to swim away very fast when they are touched. I think this provides the kind of immediate feedback that tells users that they are indeed manipulating the fish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-111620496916820709?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/111620496916820709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=111620496916820709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111620496916820709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111620496916820709'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/05/5-15-2005.html' title='5-15-2005'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-111405015407104431</id><published>2005-04-20T19:14:00.000-07:00</published><updated>2005-04-20T19:33:48.813-07:00</updated><title type='text'>4-20-2005 Pushing and Pulling</title><content type='html'>I think I've got 'pushing' and 'pulling' ironed out. Both activities are based upon the Barslund repulsion algorithm that I picked up from &lt;a href="http://www.levitated.net/"&gt;levitated&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The basic algorithm, as implemented in Flash, is:&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;xDif = _root._xmouse-this._x;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;yDif = _root._ymouse-this._y;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;distance = Math.sqrt(xDif*xDif+yDif*yDif);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;tempX = this._x-(force/distance)*(xDif/distance);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;tempY = this._y-(force/distance)*(yDif/distance);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;this._x=(homeX-this._x)/2+tempX;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(153, 153, 153);"&gt;this._y=(homeY-this._y)/2+tempY;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt; The target object is checked against the mouse coordinates for both the distance and the orientation. &lt;span style="color: rgb(102, 255, 153);"&gt;Force&lt;/span&gt; is a constant set up earlier in the code, for the demo this was set to something like 70. &lt;span style="color: rgb(102, 255, 153);"&gt;homeX&lt;/span&gt; and &lt;span style="color: rgb(102, 255, 153);"&gt;homeY&lt;/span&gt; in the demo are the 'base' position of the object - the result of this equation is to have the object squish away when the mouse gets close to it, orbiting around a fixed point.&lt;br /&gt;&lt;br /&gt;I modified this equation extensively, making a method called &lt;span style="color: rgb(153, 255, 255);"&gt;scoot&lt;/span&gt;:&lt;br /&gt;&lt;blockquote style="color: rgb(153, 153, 153);"&gt;public function scoot(pusherX, pusherY){&lt;br /&gt;       xDif = pusherX - this._x;&lt;br /&gt;       yDif = pusherY - this._y;&lt;br /&gt;       distance = Math.sqrt(xDif*xDif+yDif*yDif);&lt;br /&gt;       if((distance &lt;&gt; 10)){&lt;br /&gt;           vx -= ((force/distance)*(xDif/distance)) / 15;&lt;br /&gt;           vy -= ((force/distance)*(yDif/distance)) / 15;&lt;br /&gt;       }&lt;br /&gt;   }&lt;/blockquote&gt;The core is similar, but the results are very different. &lt;span style="color: rgb(153, 255, 255);"&gt;pusherX&lt;/span&gt; and &lt;span style="color: rgb(153, 255, 255);"&gt;pusherY&lt;/span&gt; are the coordinates of a pushing object, which in Luminance are the tracking nodes. Every frame, the screen object is moved by its &lt;span style="color: rgb(153, 255, 255);"&gt;vx&lt;/span&gt; and &lt;span style="color: rgb(153, 255, 255);"&gt;vy&lt;/span&gt; values (v is short for velocity). When a node comes within range, in this case less than 120 pixels, it starts to influence the screen object's movement values (&lt;span style="color: rgb(153, 255, 255);"&gt;vx&lt;/span&gt; and &lt;span style="color: rgb(153, 255, 255);"&gt;vy&lt;/span&gt;). The closer the node is, the greater the effect. In this example, I have the alteration (((force/distance)*(yDif/distance))/15) being subtracted from the object's velocity, which causes the object to be 'pushed' from the tracking node; counterintuitive I know, but that's how it works out. Adding the alteration value to the velocity results in a 'pulling' behavior, which can be useful for other segments of Luminance.&lt;br /&gt;&lt;br /&gt;I'm not totally certain that I need to divide the alteration value at the end (((force/distance)*(yDif/distance))&lt;span style="color: rgb(255, 204, 51);"&gt;/15&lt;/span&gt;). Without this operation, objects repelled by nodes tended to be flung away at a really high velocity. I think I can simplify the calculation by just reducing the force constant (right now it is set to 125). I'll do that in some later experiments.&lt;br /&gt;&lt;br /&gt;To-Do:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Figure out how to sort arrays by length. This will let me mod the proximity engine to figure out which cell has the highest population in/around it, which would tell us where to point the eyeball in the opening segment. &lt;/li&gt;   &lt;li&gt;Come up with a distance checking algorithm to check the neighbors returned by the proximity engine. Pushing and pulling are still a little flaky - nodes are shifting faster than the engine seems to keep up. &lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-111405015407104431?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/111405015407104431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=111405015407104431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111405015407104431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111405015407104431'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/04/4-20-2005-pushing-and-pulling.html' title='4-20-2005 Pushing and Pulling'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-111387908522237486</id><published>2005-04-18T19:50:00.000-07:00</published><updated>2005-04-20T19:10:27.983-07:00</updated><title type='text'>4-18-2005 Other Updates</title><content type='html'>Whoa, been a while.&lt;br /&gt;Been busy, nevertheless. First things first:&lt;br /&gt;&lt;br /&gt;Everything has been converted to Actionscript 2.0. All of the screen objects I come across (window tiles, tracking nodes, etc.) are now instantiated from base classes that extend the basic movieClip class. We've already seen substantial improvements in development potential, as well as performance and object management.&lt;br /&gt;&lt;br /&gt;The conversion of the tracking nodes to objects was highly successful. I have a few base behaviors assigned to the tracking node primitive, described in the external class file trackingNode.as. At movie startup, a set of 40 tracking nodes are instantiated on the stage, with references to the nodes stored in a master list called nodeList. A function in the main movie parses the incoming XML data and invokes a movement method called setCoord on appropriate nodes, which takes care of moving them around the screen. Another behavior tells each node to hide off of the stage when it gets identical data too many times in a row.&lt;br /&gt;&lt;br /&gt;When a node is de-assigned in EyesWeb, its coordinates are not unassigned, they are simply left as their last value. This meant that when EyesWeb lost tracking on a given point in the previous setup, it would appear to get stuck on the stage in Flash, holding position until it was reassigned (the actual explanation is a little more complicated but this is a good enough description of the behavior).&lt;br /&gt;&lt;br /&gt;The approach involving setting up listeners in flash to handle object updates didn't exactly pan out, though I managed to get around it. Most of the objects that I have built so far are sort of flaky when their internal 'onEnterFrame' scripts are involved. Directly interacting with an object from the main frame script seems to trigger its internal behavior, though - I'll have to do more experimentation to get more reliable results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-111387908522237486?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/111387908522237486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=111387908522237486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111387908522237486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111387908522237486'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/04/4-18-2005-other-updates.html' title='4-18-2005 Other Updates'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-111387291206483355</id><published>2005-04-18T17:43:00.000-07:00</published><updated>2005-04-20T19:10:13.616-07:00</updated><title type='text'>4-18-2005 - the Proximity Manager</title><content type='html'>The grid-based proximity sensor class by Grant Skinner is implemented and working fine. Caught a bit of a break on that one, though it took some careful study, as Mr. Skinner is a bit stingy on comments in this particular bit of code. It works thusly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A proximity manager object is instantiated. This object is described in the external file &lt;span style="color: rgb(102, 255, 153);"&gt;ProximityManager.as&lt;/span&gt;. When instantiated, a grid size is specified - this size value should multiply evenly into the dimensions of the stage for best results.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The proximity manager keeps track of managed objects in a two dimensional array, effectively creating a sort of virtual grid on the stage. When an object is attached to this proximity manager through its &lt;span style="color: rgb(153, 255, 255);"&gt;addItem&lt;/span&gt; method, its coordinates are mathematically approximated to a single cell on this grid, and a reference to that object is stored in that cell of the array.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The business end of the proximity manager is its &lt;span style="color: rgb(153, 255, 255);"&gt;getNeighbours&lt;/span&gt; method. The main frame script invokes this method, passing it a reference to (get this) &lt;span style="font-style: italic;"&gt;any&lt;/span&gt; movie clip in existence on the stage. The manager figures out where the referenced clip would be on its virtual grid, then it builds up a list of all of the managed clips in that cell and all of the neighboring cells. After that, it returns an array full of movie clip references (the neighbors) to whatever called getNeighbours.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We can do other things with this neighbor list once it is received. For example, distance calculations can get somewhat CPU-intensive, especially when you are doing a lot of them (we use the Pythagorean Theorem to determine distance, so we are calculating a lot of square roots). Using Skinner's proximity manager, we can filter out more distant objects using simple, computationally cheap division operations. This saves CPU time for more explicit distance calculations, and ultimately more artwork on the screen.&lt;/p&gt;&lt;p&gt;It should be noted that the grid size specified is pretty important. Let's say you want a 'shark' object to interact whenever it gets within 300 pixels of a 'fish' object. If the grid size is only set to, say, 25, this means that the shark will only really see the fish when it gets inside of 50 pixels. Let me illustrate this a bit better:&lt;br /&gt;&lt;br /&gt;Let's say you have three fish swimming around on the stage:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mmgrad.csuhayward.edu/usr/swong/images/gridExplanation-basic.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The proximity manager will track references of these objects in a virtual grid, visualized here:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mmgrad.csuhayward.edu/usr/swong/images/gridExplanation-proxOnly.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Let's say a shark is added to the stage, so that it looks like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mmgrad.csuhayward.edu/usr/swong/images/gridExplanation-refObject.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Let's say the frame script calls the &lt;span style="color: rgb(153, 255, 255);"&gt;getNeighbours&lt;/span&gt; method of the manager, sending a reference to the shark clip as its parameter. The proximity manager checks all of the surrounding cells, ignoring the rest.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mmgrad.csuhayward.edu/usr/swong/images/gridExplanation-proxCheck.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;A list of tracked objects in these surrounding cells is built, and sent back as the list of neighbors. In this case, it would return 'fish3' as the only neighbor of 'shark.' If the shark were in the next cell up, the manager would return both 'fish1' and 'fish3' as its neighbors.&lt;/p&gt;&lt;br /&gt;Part of the problem, though, is that the cell size is only 40 pixels across. If the shark fell into the lower left corner of one cell, and a fish into the upper right corner of the upper-right neighboring cell, the distance between them would be about 114 pixels. This becomes a problem if I want the shark to react when it is within 200 pixels of a fish; its "sense" range is a square 120 pixels across.&lt;br /&gt;&lt;br /&gt;The solution, of course, is to increase the grid size, so that a fish within 200 pixels of the shark will never be outside of the proximity mask. Increasing the grid to this size, though, means that there will be a bit of a dead zone beyond this radius where fish can be returned as neighbors but will technically be over 200 pixels away.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mmgrad.csuhayward.edu/usr/swong/images/gridExplanation-radii.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The next step in the solution, then, is to run actual distance calculations on the neighbors returned by the manager, then do some stuff based on whatever passes &lt;em&gt;that&lt;/em&gt; test.&lt;br /&gt;&lt;br /&gt;Ultimately, this means that the proximity manager is in place to augment distance calculations, not substitute for them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-111387291206483355?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/111387291206483355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=111387291206483355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111387291206483355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/111387291206483355'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/04/4-18-2005-proximity-manager.html' title='4-18-2005 - the Proximity Manager'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110971376516468851</id><published>2005-03-01T13:32:00.000-08:00</published><updated>2005-03-01T13:49:25.166-08:00</updated><title type='text'>3-1-2005</title><content type='html'>Couple of updates:&lt;br /&gt;&lt;br /&gt;Was working on a control panel type SWF for various movies. I am putting this one on a back burner for now. Ditto for the 'density of motion' sensor in Eyesweb, to make the big floaty eye look toward the region with the most screen motion.&lt;br /&gt;&lt;br /&gt;Pulled in an Actionscript 2.0 grid-based proximity sensor class, courtesy of one &lt;a href="http://gskinner.com/"&gt;Grant Skinner&lt;/a&gt;. This necessitated finding an Actionscript 2.0 version of Laco's tweening library, which happened to be available at his &lt;a href="http://laco.wz.cz/tween"&gt;site&lt;/a&gt;. I encountered no problems dropping this into an older version of the interactive foggy windows test - just had to update the #includes to import commands.&lt;br /&gt;&lt;br /&gt;I have a larger idea for handling tracking nodes, which dovetails into techniques for handling larger populations of screen objects. In the last version of Foggy Windows that I saw, the squares faded out to a given value then stayed clear. JJ had their reactions directly tied to tracking node updates; as updates streamed in, they would trigger object reactions at that rate - the reaction methods are directly called in the input parser.&lt;br /&gt;&lt;br /&gt;This approach works well enough in a test environment, but I can foresee management and development issues as our exhibits become more complicated. Right now, I'm thinking of creating a simple 'tracking node' class that the tracking nodes will be instantiated from (as opposed to taking an empty movie clip and drawing a circle in it. This should let us assign default behaviors to them, like clearing to a safe area off the stage when they don't get updates. This may necessitate setting up listeners in each object, while relegating the XML input parser to the role of a broadcaster. I think this will work, assuming I understand those concepts correctly.&lt;br /&gt;&lt;br /&gt;A little after that, I think I can use those same techniques to instantiate other primitive objects, on which prettier, more interactive objects can be based.&lt;br /&gt;&lt;br /&gt;Also to do: get Skinner's proximity manager working with our tracking points. This is &lt;span style="font-weight: bold;"&gt;critical&lt;/span&gt; to later object interactions, though I need the tracking points handled a little differently, first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110971376516468851?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110971376516468851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110971376516468851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110971376516468851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110971376516468851'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/03/3-1-2005.html' title='3-1-2005'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110868937577995272</id><published>2005-02-17T17:03:00.000-08:00</published><updated>2005-02-17T17:16:15.783-08:00</updated><title type='text'>2-17-2005</title><content type='html'>Couple of updates. We got a screen in our new workspace: 8 foot screen, 8 foot 4 inch wide room. We have to crouch low to get to the camera and capture server, but I think it is all worth it.&lt;br /&gt;&lt;br /&gt;Rear capture works! I'm very pleased with the rear projection screen material; our 2000 lumen projector puts out plenty of light for a crisp image on the back. Need to work a bit with some measuring tape to get the alignment between the camera and the screen squared off.&lt;br /&gt;&lt;br /&gt;I've also noticed a bright spot in the center of the projected image, not strong enough to be visible from the front but just intense enough to occasionally pass the threshold of the filter in eyesweb. It will probably take some slight tweaking of the threshold values to correct for this.&lt;br /&gt;&lt;br /&gt;Been working a bit on a Flash control panel template for quick adjusting some of our movie variables. JJ suggested using local shared objects, and I've had some moderately good results with that - just have to tell the movies the same shared object name and give them the same path, so that they are looking at the same object. I even got the client movie to check the object for updates at intervals; the trick was in &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; instantiating a copy of the shared object in the client movie, instead using the sharedObject.getLocal method in place of where the local instance would go in the code.&lt;br /&gt;&lt;br /&gt;To get the control panel working at this point would require reauthoring our movies with constructors and deconstructors, to clean out old data, objects and movie clips, and reinstantiate them with new data. This might not be necessary for everything, though -- I think we could alter things like constants on the fly, like proximity triggering values, color values, etc.&lt;br /&gt;&lt;br /&gt;Going to have to get into the lab after dark soon to work out some system calibration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110868937577995272?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110868937577995272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110868937577995272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110868937577995272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110868937577995272'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/02/2-17-2005.html' title='2-17-2005'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110868856868075358</id><published>2005-02-17T16:57:00.000-08:00</published><updated>2005-02-17T17:02:48.680-08:00</updated><title type='text'>[discontinuity]</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110868856868075358?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110868856868075358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110868856868075358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110868856868075358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110868856868075358'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2005/02/discontinuity.html' title='[discontinuity]'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110082698645317695</id><published>2004-11-18T17:03:00.000-08:00</published><updated>2004-11-18T17:16:26.453-08:00</updated><title type='text'>11-17-2004</title><content type='html'>WOO breakthrough on the EW-flash linkup. The "gum" issue was a minor one after all; seems the sample flash file had it appending all new messages to a variable instead of overwriting the previous ones, meaning that the variable would take up more and more memory at a linear rate. I fixed this by rewriting all of the "incoming += (new item)" lines to "incoming = (new item)" or the equivalent, and it was pretty stable after that.&lt;br /&gt;&lt;br /&gt;JJ's code ended up slotting in place fairly neatly, with few modifications needed. Most of what we did last night had to do with adjusting his code to parse the incoming OSC packets. As they come out of EW, the packets have a name (defined in the OSC block in EW as their 'OSC_Command'), and two arguments, both of the input coordinates for each point. The arguments always come as X first and Y second, so it was not necessary to append or modify that data to differentiate them. In the flash, JJ has the movie generating an empty movie clip for each distinct packet, then drawing a circle at the proscribed coordinates. He also has the movie assigning the clip names based on the incoming packet names, meaning that 1) we might be able to 'smooth' the motion between updates and 2) the number of points drawn in flash grows automatically with the number of points sent from EW. I tested this by adding two more transmit subpatches into EW to make a total of five; the flash faithfully drew five circles without any modification.&lt;br /&gt;&lt;br /&gt;To do:&lt;br /&gt;&lt;br /&gt;Increase the number of transmitted points in EW, while checking for stability. Mostly grunt work; I'll probably use the EW 4.0.0 beta to take advantage of their new interface.&lt;br /&gt;&lt;br /&gt;Run EW on the sample video file to check for climbing memory usage, indicative of a memory leak or something similar. This may cause stability issues during prolonged usage... something to keep in mind.&lt;br /&gt;&lt;br /&gt;Saturday we plan to try a rough prototype of the system with a live camera feed. I expect some degree of offset in where the points draw in relation to the shadow, due to the necessary difference between the projection angle and the camer viewing angle. This is something that can be worked out in later tuning; right now, we just want to test the system from stem to stern.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110082698645317695?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110082698645317695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110082698645317695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110082698645317695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110082698645317695'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/11-17-2004.html' title='11-17-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110057063316503482</id><published>2004-11-15T16:38:00.000-08:00</published><updated>2004-11-15T18:06:32.883-08:00</updated><title type='text'>11-15-2004</title><content type='html'>Picked up a response this morning on the discussion board post:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;extracting the matrix into indevidual values and then exporting it to flash&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;is the way to go.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;i wasnt able to prase a message with more then one value in it to flash, but&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;something like&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;/xball_01 = 34&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;/yball_01 = 234&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;/xball_02 = 33&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;/yball_02 = 212&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;and then merging it in flash works, and might even be simpler then bringing&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;an array (=matrix) into flash and then spliting it into indevidual values.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;anyways, i know of no other way to send multiple values to flash thru osc.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;sorry for the lousy spelling.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;post back if you find a way to send a couple of values as a single string&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt; &lt;span style="color: rgb(255, 255, 153);font-size:85%;" &gt;and then spliting it in flash into a nice array :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So... he's mostly affirming my approach with the existing tools.&lt;br /&gt;&lt;br /&gt;In the meantime, I tossed the Java Runtime Environment 5 on my machine and fired up flosc. Installation was *very* smooth and easy, no problems starting and running the thing either. So far, I've been able to connect to it from both EW and flash, and using the demo .fla file I was able to get the mouse coordinates to show up in flash.&lt;br /&gt;&lt;br /&gt;I also figured out how to increase the number of inputs available on a StringToOSC or ScalarToOSC block, allowing me to bundle multiple data elements in a single OSC packet. I haven't found any naming options for them, but they do consistently come in in the same order. Besides, I can always concatenate some labels in front of the coordinate strings if this becomes a problem.&lt;br /&gt;&lt;br /&gt;On to the bad news: even three tracked testing points were enough to gum up the system in sending out to flash. Tracking the test video runs this workstation's processor at about 65-70% capacity, if flosc is also running (which doesn't take much when idle). When flash is displaying the coordinate data as well, I can watch the processor usage ramp up to 100%, at which point the flash demo sort of gets "gummed up" and pretty much stops responding. It isn't a hard crash, though... if I stop EW, the system eventually catches up, though the data that streams out of EW seems to get lost. I'll have to do some more work to determine whether it is flosc or flash gumming up the works.&lt;br /&gt;&lt;br /&gt;The best remedy I can think of is to relocate the flash client to another machine. All we have to do is point flash at the IP address of the flosc server and let it run. I think this would work well in the final setup too, because it means we could keep the bulk of the processing with the camera itself, and nothing more than an ethernet cable would need to run to the rendering system (or we could go wireless if we are feeling bold).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110057063316503482?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110057063316503482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110057063316503482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110057063316503482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110057063316503482'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/11-15-2004.html' title='11-15-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-110021609973695533</id><published>2004-11-11T15:33:00.000-08:00</published><updated>2004-11-15T18:05:58.936-08:00</updated><title type='text'>11-11-04</title><content type='html'>Nothing much yet, looking at the SDKs and documentation for developing new blocks if it comes to that. Posted this on the eyesweb discussion board just now:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;Hi all,&lt;br /&gt;&lt;br /&gt;I'm trying to extract the points generated by the LKTracker to send their&lt;br /&gt;coordinates through OSC to flosc, and then on to flash. Has anyone attempted&lt;br /&gt;this before?&lt;br /&gt;&lt;br /&gt;Ideally, I'd like to find some way to send the entire MoCapDataList for each&lt;br /&gt;frame to OSC.&lt;br /&gt;&lt;br /&gt;Barring that, I know that MoCap.Item.Extract lets me pull out values for an&lt;br /&gt;individual point. Is there a way to send out that matrix through OSC?&lt;br /&gt;&lt;br /&gt;I've been able to use Math.Matrix.GetEntry to pick out single values (i.e.&lt;br /&gt;just the X or the Y coordinate), but they are meaningless outside the&lt;br /&gt;context of each other. Is there a way to concatenate these values together&lt;br /&gt;in a string which can then be transmitted with StringToOSC? I'd be willing&lt;br /&gt;to incorporate a subpatch like this for every point tracked by the&lt;br /&gt;LKTracker, if that's what it takes.&lt;br /&gt;&lt;br /&gt;Thanks in advance, any tips/suggestions appreciated,&lt;br /&gt;&lt;br /&gt;-swong&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'll have to see if I get any hits on that. I'd rather not have to learn C++ just for this one thing.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-110021609973695533?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/110021609973695533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=110021609973695533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110021609973695533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/110021609973695533'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/11-11-04.html' title='11-11-04'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109955592385273193</id><published>2004-11-04T01:03:00.000-08:00</published><updated>2004-11-04T00:12:03.853-08:00</updated><title type='text'>11-3-2004</title><content type='html'>I, for one, welcome our Republican Overlords.&lt;br /&gt;&lt;br /&gt;Moving right along,&lt;br /&gt;&lt;br /&gt;Had a bit of success extracting the matrix data from the mocap list coming off of the LK tracker; a mocap.item.extract pointing to the point label coupled with a math.matrix.display block shows me what sort of data is coming off of the LK block. Swapping in a pair of item extractors for the matrix display block lets me isolate the X and Y data to separate "channels." Tying in a string displayer for the label output on the mocap.item.extract lets me see what point is being tracked by that extractor block. In all, three data elements make up a point's location: the point's label, the X, and the Y; out of context, none of those means anything, so they all have to pull from the same input and they all have to go out together. I'd like to find a way to concatenate them together and send them out as a single string with OSC.&lt;br /&gt;&lt;br /&gt;Trust me, it all makes sense on the screen.&lt;br /&gt;&lt;br /&gt;This approach is a bit inelegant. Doing it this way will require me to have a subpatch (that whole mechanism in the preceding paragraph) for every point being tracked, some 40 in all at the moment. I'm keeping my eyes out for a block that will somehow export the whole list at once, though the only stuff I've found so far ports it as a somewhat complex data structure to java or C++. In the meantime, I may have to go with the inelegant solution of writing a new block in C++ that will concatenate two strings together. I'll try posting on one of the discussion boards; I'd be surprised if someone didn't write something like this a long time ago.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109955592385273193?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109955592385273193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109955592385273193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109955592385273193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109955592385273193'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/11-3-2004.html' title='11-3-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936617738242108</id><published>2004-11-01T18:40:00.000-08:00</published><updated>2004-11-01T19:30:37.860-08:00</updated><title type='text'>11-1-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Bit more work on the Lucas-Kanade tracking patch, with some findings.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Threshold, as noted before, seems to deal with the threshold necessary to do a real-time reset of the tracking system and assign new points. Lowering the threshold basically increases the sensitivity of whatever mechanism causes a reset. Lowering the value, then, means that new tracking points are assigned more frequently to the test loop, resulting in a more accurate, more up-to-date edge definition. &lt;/p&gt;     &lt;p class="MsoNormal"&gt;This increased definition comes with the price of an increased computational load, though. Dropping the threshold all the way to .05 definitely results in sluggish playback, and that’s just with a loop with my hand in it. I’m running the system at around .2 now, with reasonable response times and fairly accurate tracking. &lt;/p&gt;     &lt;p class="MsoNormal"&gt;Ultimately, though, I don’t think the LK tracking algorithm, at least in this implementation, will ever be really good at tracking overly rapid motion. For the slower stuff, like where a user moves their hands with spread fingers, it seems good enough to isolate the gaps between the fingers.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Moving right along, I dug up a promising post on the discussion newsgroup, originally posted back in April 2004:&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;From: Anders Bo Pedersen To: eyesweb.discussion&lt;br /&gt;           Re: LKtracker problem&lt;/p&gt;     &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Use the MoCap.Item.Extract and then the Math.Matrix.Extract&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Best&lt;br /&gt;           Anders&lt;/p&gt;                 &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;"trimard_" &lt;trimard be=""&gt; wrote in message&lt;br /&gt;           news:MDU4PpG$DHA.1828@lab0.infomus.dist.unige.it...&lt;br /&gt;           &gt; Is there a way to extract the coordinates of the points made by the&lt;br /&gt;           &gt; LKtracker? so that i can assign a move image action?&lt;br /&gt;           &gt; thnx&lt;br /&gt;           &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/trimard&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;-strapped this configuration into the LK Tracking example, the MoCap.Item.Extract fishing its input right off of the LK block’s output stream (it’s a copy of what is going on to the display stream). &lt;/p&gt;     &lt;p class="MsoNormal"&gt;-spliced Output.MoCap.Draw2DItems into the system near the end of the output stream, taking the output of the LK Tracker and the dot-drawing “view” block, then dropping in a second display block to show the visual output of that sucker.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;The result: the dots in this output are replaced with little crosses and named labels. The implications:&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;1)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;The dots are tracked as discrete data objects, and aren’t the result of some creative visual filtering (kind of obvious in retrospect, but I had to be sure).&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;2)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Since they are labeled, there may be a means of tracking semi-persistent data on the Flash side of things. We could, for example, somehow buffer previous frames in Flash, and look at where, say, point_6 was three frames back, and calculate some rudimentary motion data from it. We don’t have to, but it is another option there if we want it (which is A Good Thing).&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;3)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;There is no point three.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;So, the data is there. MoCap.Item.Extract only seems to want to let me extract the data for one point at a time; I’ll have to go in and look at a way of pulling the whole list for every frame. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936617738242108?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936617738242108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936617738242108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936617738242108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936617738242108'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/11-1-2004.html' title='11-1-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936054813778573</id><published>2004-11-01T17:49:00.000-08:00</published><updated>2004-11-01T17:55:48.136-08:00</updated><title type='text'>10-24-2004</title><content type='html'>The threshold levels don't seem to make *that* much of a difference.&lt;br /&gt;&lt;br /&gt;Neither does that alpha filter slider. I've been tracing the linkages and I think the threshold has to do with how often the system does a live "reset" to pick new points to track.&lt;br /&gt;&lt;br /&gt;Looked up alpha filter in the eyesWeb documentation; it had this to say:&lt;br /&gt;&lt;br /&gt;"This block performs alpha-filtering on the input stream according to the following formula:&lt;br /&gt;&lt;br /&gt;y(sub i) = y(sub i-1) + (alpha)(x(sub i) - y(sub i-1))&lt;br /&gt;&lt;br /&gt;where x(sub i) is the current input, y(sub i) and y(sub i-1) are respectively the current and previous outputs, and (alpha) is the value of the Alpha parameter. Note that if the current input is not valid, accordingly the output will be set as invalid."&lt;br /&gt;&lt;br /&gt;The ramifications are staggering. I hope whoever is reading this is as ecstatic as I am about that.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936054813778573?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936054813778573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936054813778573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936054813778573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936054813778573'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-24-2004.html' title='10-24-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936015012765630</id><published>2004-11-01T17:48:00.000-08:00</published><updated>2004-11-01T17:49:10.126-08:00</updated><title type='text'>10-21-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Poking around some more with Lucas-Kanade feature tracking – adjusted it to draw points instead of stripes, and played around with some other values. The input image the algorithm is working off of is based on the background subtraction method shown in a few other examples, so I tweaked the threshold levels to match what I’ve been using in the other files (more on this in a bit).: 200 levels, minimum at 0, maximum at 200. &lt;/p&gt;     &lt;p class="MsoNormal"&gt;This seems to be as clean as I can get the background subtraction for now. These settings seem to filter out most of the noise, but don’t distinguish between screen black and shadow black. From a graphic standpoint, I think grays darker than 60% are a bad idea, because they are too easily mistaken for shadows. We may see different results on switching to a rear-capture model; all in due time.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Since all but one of my testing files uses some sort of test pattern on the screen that I have since been unable to filter out, I have been using the remaining “clean” test: my hand’s silhouette waving around on the screen. The feature tracker plots a set of points on the screen and attempts to track them in successive frames of input. At intervals, or if the image changes too much, it assigns new points.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;Advantages&lt;/span&gt;: &lt;/p&gt;   &lt;p class="MsoNormal"&gt;“state-neutral” – doesn’t need a beginning reference frame to function, meaning that it can run continuously without having to stop. The tracking points seem to conform to the edges of the shadow pretty well at the right settings (more on this in a bit), though they don’t work out to a perfect edge. &lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;Disadvantages&lt;/span&gt;:&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Need to think about this some more – I’m concerned that I can’t get enough tracking points running simultaneously to calculate more complex shadows. &lt;/p&gt;     &lt;p class="MsoNormal"&gt;To do: put in some more complex shadows. See about extracting the tracking point position data to a set of coordinates. See about skewing and stretching the input frame to match the projector output proportions (is this called normalization in eyesWeb?)&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;Notes on settings&lt;/span&gt;:&lt;/p&gt;   &lt;p class="MsoNormal"&gt;For background subtraction: on the subtraction patch: 200 levels, minimum at 0, maximum at 200.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;For point tracking, setting the threshold to somewhere between .22 and .3 seems to give fairly clean results without any too many jittery artifacts, while maintaining a good number of tracking points. Have to look up what this is actually adjusting, though. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936015012765630?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936015012765630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936015012765630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936015012765630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936015012765630'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-21-2004.html' title='10-21-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936009210750439</id><published>2004-11-01T17:47:00.001-08:00</published><updated>2004-11-01T17:48:12.106-08:00</updated><title type='text'>10-20-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Grabbed and packed some more test footage.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Playing around with Lucas-Kanade feature tracking patch – possibly feeding the locations of the tracked points out through OSC? Motion keyed but doesn’t need reference colors to work from. May experiment later with just feeding point data to a screen readout. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936009210750439?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936009210750439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936009210750439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936009210750439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936009210750439'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-20-2004.html' title='10-20-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936005718315153</id><published>2004-11-01T17:47:00.000-08:00</published><updated>2004-11-04T00:18:15.163-08:00</updated><title type='text'>10-15-2004</title><content type='html'>&lt;p class="MsoNormal"&gt;Showed up to generate testbed footage – found a brand new combination lock on the multimedia cabinet in AE1203 – can’t run the projector without that computer or a laptop. Going to try making some stand-in footage in the cubicle so I have something to work with. (I really could use the clean edges on shadows)&lt;/p&gt;       &lt;p class="MsoNormal"&gt;Started pulling out some of the clips on eyesweb. May have to do some work to reduce some minor flickering in the video capture.&lt;/p&gt;       &lt;p class="MsoNormal"&gt;Fuzzy edges noticed around shadows – this may be because the projector is so close to the screen. Also noticed: in the test conditions, the umbra is nearly the same color as projected black. This may make isolating the shadow from an all-black region difficult.&lt;/p&gt;       &lt;p class="MsoNormal"&gt;Reinstalled eyesWeb 3.3.0 with the upgrade patch and the gesture processing library. It seems to work again. &lt;/p&gt;       &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;Doing yet more reading on patches and other eyesweb notes. &lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936005718315153?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936005718315153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936005718315153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936005718315153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936005718315153'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-15-2004.html' title='10-15-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109936001482824703</id><published>2004-11-01T17:46:00.001-08:00</published><updated>2004-11-01T17:46:54.830-08:00</updated><title type='text'>10-13-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Demo for Phil – seemed impressed by progress. Retrieved DV cam with working firewire.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Played around for a while with different included eyesWeb patches. Probed into some of the motion analysis packages which generate blobs of color around detected motion – I think this is an algorithmic effect, not keeping track those blobs as a set of data, but instead generating them by comparing a sequence of frames for differences based on a threshold value.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Encountered some critical eyesweb errors at one point. Reboot didn’t help, may need to reinstall eyesWeb.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109936001482824703?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109936001482824703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109936001482824703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936001482824703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109936001482824703'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-13-2004_01.html' title='10-13-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109935998630575245</id><published>2004-11-01T17:46:00.000-08:00</published><updated>2004-11-01T17:46:26.306-08:00</updated><title type='text'>10-13-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Demo for Phil – seemed impressed by progress. Retrieved DV cam with working firewire.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Played around for a while with different included eyesWeb patches. Probed into some of the motion analysis packages which generate blobs of color around detected motion – I think this is an algorithmic effect, not keeping track those blobs as a set of data, but instead generating them by comparing a sequence of frames for differences based on a threshold value.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Encountered some critical eyesweb errors at one point. Reboot didn’t help, may need to reinstall eyesWeb.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109935998630575245?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109935998630575245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109935998630575245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935998630575245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935998630575245'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-13-2004.html' title='10-13-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109935996224717408</id><published>2004-11-01T17:45:00.001-08:00</published><updated>2004-11-01T17:46:02.246-08:00</updated><title type='text'>10-11-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Put together the flash test patterns for testing, I’ll have to go into a dark room with a projector later to finish off the test videos.&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Also fished a thread off of the eyesweb.discussion group... I’ll put it in “floscDiscussion.doc” on the server.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109935996224717408?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109935996224717408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109935996224717408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935996224717408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935996224717408'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-11-2004.html' title='10-11-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109935991653622490</id><published>2004-11-01T17:45:00.000-08:00</published><updated>2004-11-01T17:45:16.536-08:00</updated><title type='text'>10-8-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;Note to self: generate test footage to calibrate eyesweb. Test patterns (rendered black areas should be distinct from shadows to eyesweb), sample lighting conditions, off camera angles. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Sample test – rendered black letters on white background: “If you can read this, the threshold is too low” and that sort of thing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109935991653622490?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109935991653622490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109935991653622490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935991653622490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935991653622490'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-8-2004.html' title='10-8-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8971111.post-109935985065203998</id><published>2004-11-01T17:43:00.000-08:00</published><updated>2004-11-04T00:18:39.310-08:00</updated><title type='text'>10-5-2004</title><content type='html'>  &lt;p class="MsoNormal"&gt;&lt;/p&gt; &lt;p style="font-family: georgia;" class="MsoNormal"&gt;Got FW running on my workstation with camera belonging to undergrad program on very temporary loan. Grad program camera should be available by the end of the week for longer term usage. We will be borrowing that and a FW cable for the duration.&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;*note- figure out a good way to mount the camera to point at a background screen installed in cubicle to aid test work&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;Eyesweb took the input signal nicely. Most of the sample patches worked well enough – was able to run some of the basic silhouette and background extraction patches outright. A smooth, matte background screen (a piece of paper) worked best, which makes sense. &lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;Ambient lighting didn’t seem to make too much of a difference considering that we are able to go in and adjust the threshold levels to compensate. There is minimal delay in the more basic patches, which is encouraging. I also spent some time playing around with other individual blocks to manipulate the screen image.&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p style="font-family: georgia;" class="MsoNormal"&gt;*note – look for some kind of shear type block so that we can place the camera at an off-angle and compensate for it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8971111-109935985065203998?l=sas-swong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sas-swong.blogspot.com/feeds/109935985065203998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8971111&amp;postID=109935985065203998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935985065203998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8971111/posts/default/109935985065203998'/><link rel='alternate' type='text/html' href='http://sas-swong.blogspot.com/2004/11/10-5-2004.html' title='10-5-2004'/><author><name>SWong</name><uri>http://www.blogger.com/profile/16804301130237352807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://digitalchemy.net/media/scottHead3.gif'/></author><thr:total>0</thr:total></entry></feed>
