<?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-25373511</id><updated>2011-07-07T20:45:28.990-07:00</updated><category term='Haptics'/><title type='text'>VR Center</title><subtitle type='html'>Where you can create everything from nothing</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-25373511.post-6454038086767501266</id><published>2010-03-19T04:29:00.000-07:00</published><updated>2010-03-19T06:00:05.161-07:00</updated><title type='text'>Edit Stereoscopic Video</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZwUzOhP-_x8/S6NvKmOC6mI/AAAAAAAAADg/MsHMdptV9C0/s1600-h/Pocket_stereoscope.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 338px; height: 213px;" src="http://2.bp.blogspot.com/_ZwUzOhP-_x8/S6NvKmOC6mI/AAAAAAAAADg/MsHMdptV9C0/s400/Pocket_stereoscope.jpg" alt="" id="BLOGGER_PHOTO_ID_5450322201897265762" border="0" /&gt;&lt;/a&gt;Will not talk about how to get your footage...use two cameras, no matter real cameras or cameras in any 3d software...so, if you have image sequence please start from step 1, or else you have AVI files as footage, go straight to step 2. I'd suggest using &lt;a href="http://avisynth.org/mediawiki/Main_Page"&gt;AviSynth &lt;/a&gt;and &lt;a href="http://www.virtualdub.org/"&gt;VirtualDub &lt;/a&gt;to do the job. Both AviSynth and VirtualDub are free!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 204);font-size:78%;" &gt;Note:image borrowed from Wiki&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Image sequence--&gt;AVI&lt;/li&gt;&lt;br /&gt;create a file name it as "left.avs", suppose you have 100 tga files, from 0001.tga through 0100.tga, put the following line to "left.avs"&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ImageSource("%04d.tga", 1, 100, 25)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;at this point, you can use Windows Media Player to play this "left.avs" already! But we can get our AVI file via VirtualDub. From VirtualDub open "left.avs" and save it as "left.avi". Just as easy as that! Repeat the same steps, you will get right eye video ready, say you have "right.avi" up to now.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Stack two AVIs Horizontally&lt;/li&gt;&lt;br /&gt;Create a new file and name it as "stereoscopic.avs" first, put the following line to it&lt;br /&gt;&lt;br /&gt;&lt;code&gt;StackHorizontal(DirectShowSource("yourlocation\left.avi"),&lt;br /&gt;DirectShowSource("yourlocation\right.avi")&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Generate stereoscopic AVI&lt;/li&gt;&lt;br /&gt;Open "stereoscopic.avs" from VirtualDub, and save it as "stereoscopic.avi"...done!&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;...and DONE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-6454038086767501266?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/6454038086767501266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=6454038086767501266' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/6454038086767501266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/6454038086767501266'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2010/03/edit-stereoscopic-video.html' title='Edit Stereoscopic Video'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZwUzOhP-_x8/S6NvKmOC6mI/AAAAAAAAADg/MsHMdptV9C0/s72-c/Pocket_stereoscope.jpg' height='72' width='72'/><thr:total>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-7146212228537656673</id><published>2009-10-14T08:09:00.001-07:00</published><updated>2009-10-14T08:09:50.945-07:00</updated><title type='text'>OpenGL 3.2 and More</title><content type='html'>Check out this SlideShare Presentation: &lt;div style="width:425px;text-align:left" id="__ss_2172343"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/Mark_Kilgard/opengl-32-and-more" title="OpenGL 3.2 and More"&gt;OpenGL 3.2 and More&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gtc2009openglkilgard-091008215235-phpapp01&amp;stripped_title=opengl-32-and-more" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gtc2009openglkilgard-091008215235-phpapp01&amp;stripped_title=opengl-32-and-more" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/Mark_Kilgard"&gt;Mark Kilgard&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-7146212228537656673?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/7146212228537656673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=7146212228537656673' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/7146212228537656673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/7146212228537656673'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2009/10/opengl-32-and-more.html' title='OpenGL 3.2 and More'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-5359200277564474105</id><published>2009-09-21T04:01:00.000-07:00</published><updated>2009-09-21T06:42:20.137-07:00</updated><title type='text'>Proposal for PROPOSAL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZwUzOhP-_x8/Srdep7nmf8I/AAAAAAAAAC0/Rm1a_5cjXhY/s1600-h/coldwarm.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 148px;" src="http://3.bp.blogspot.com/_ZwUzOhP-_x8/Srdep7nmf8I/AAAAAAAAAC0/Rm1a_5cjXhY/s400/coldwarm.jpg" alt="" id="BLOGGER_PHOTO_ID_5383875954016157634" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;01, Cross-Modality&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Sept 21&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;While I was reading an article on Codex from MOD about research on hyperthermia  and hypothermia at QinetiQ, this idea popped up: how about we provide opposite visual signal, giving subjects opposite suggestion about what they are experiencing?  With synthetic environment, we can easily generate illusive scene implying that the temperature is not as high as experienced. How much visual suggestion can alter body's feeling of temperature? Not sure. But cross-modal projections do exist.&lt;br /&gt;&lt;br /&gt;To this point, I'm thinking more about cross-modal interaction. The facilities in VR lab equipped us for researching on cross-modal interaction. For example, visual/audio interaction (we'll need some audio devices), visual/haptics interaction and also I'm thinking of motion perception on treadmill that involves multisensory procedures as well. With the help of VR Technologies, all of these research can be much more convenient than using traditional methods only.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Back to the thought about hyperthermia and hypothermia, if my assumption serves well, we can handily make synthetic environment deploy-able (to field) by implementing it on mobile computing device. Mobile computing device not only makes Virtual Environment deploy-able to field, actually, any lab (I'm thinking of climatic chambers at QinetiQ, indeed, I mean any lab) without large-scale VR Facilities, can adopt mobile VR now. It does not cost a fortune.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-5359200277564474105?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/5359200277564474105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=5359200277564474105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5359200277564474105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5359200277564474105'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2009/09/proposal-for-proposal.html' title='Proposal for PROPOSAL'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZwUzOhP-_x8/Srdep7nmf8I/AAAAAAAAAC0/Rm1a_5cjXhY/s72-c/coldwarm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-5031528763450758578</id><published>2008-12-12T01:46:00.000-08:00</published><updated>2008-12-12T03:07:09.485-08:00</updated><title type='text'>Embedded mplayer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZwUzOhP-_x8/SUJAMtKtybI/AAAAAAAAACQ/MZMlq-UX4gI/s1600-h/stereomplayer.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 148px;" src="http://4.bp.blogspot.com/_ZwUzOhP-_x8/SUJAMtKtybI/AAAAAAAAACQ/MZMlq-UX4gI/s400/stereomplayer.jpg" alt="" id="BLOGGER_PHOTO_ID_5278852300258789810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Still, I don't know whether this is useful, but you can try it for fun--I mean it was fun for me. Here it comes:&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;The sample I post here was created by c# as a WindowsForm, but as I aware there's nothing wrong if you prefer c++.&lt;br /&gt;&lt;br /&gt;I'm not sure whether I should rumble about how to create a winform project from Visual Studio, just skip it for now.&lt;br /&gt;&lt;br /&gt;Create a winform project, leave everything as default. As showing from the top picture, you drag a button to the form for "stop" and draw another button for "start". I really don't care where you put your buttons or how many you prefer, what they should look like, etc..&lt;br /&gt;&lt;br /&gt;Note: at the postion of video window, I put a lable there as pre-opened window, we'll use that window to play media.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now we come to the job itself, I mean embed mplayer to a window.&lt;br /&gt;&lt;br /&gt;Open the Form1.Designer.cs, add a private member:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;private System.Diagnostics.Process mplayerP;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Double click the "start" button, it will lead you to the click function:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;private void button1_Click(object sender, EventArgs e)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            int hWnd = mplayerwin.Handle.ToInt32();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            string margs = string.Format( @"-wid {0} -vo gl2_stereo yourmedia.wmv", hWnd );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            mplayerP = System.Diagnostics.Process.Start("mplayer.exe", margs);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Double click the "stop" button:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;private void button2_Click(object sender, EventArgs e)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            mplayerP.Kill();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DONE! have fun.&lt;br /&gt;&lt;br /&gt;Note: the picture on top was playing video from 3dtv.at, a stereoscopic demo clip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-5031528763450758578?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/5031528763450758578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=5031528763450758578' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5031528763450758578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5031528763450758578'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2008/12/embeded-mplayer.html' title='Embedded mplayer'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZwUzOhP-_x8/SUJAMtKtybI/AAAAAAAAACQ/MZMlq-UX4gI/s72-c/stereomplayer.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-3617308697195757089</id><published>2007-09-07T02:46:00.001-07:00</published><updated>2007-09-10T04:14:46.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haptics'/><title type='text'>Three Steps  Build a Haptic Model</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZwUzOhP-_x8/RuEi9tTrPlI/AAAAAAAAAA8/B-TMGlN6GMA/s1600-h/haptics.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_ZwUzOhP-_x8/RuEi9tTrPlI/AAAAAAAAAA8/B-TMGlN6GMA/s320/haptics.jpg" alt="" id="BLOGGER_PHOTO_ID_5107401895944339026" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;I suggest you start from simple model, mine is a big H. You can do a sphere, cube as your first try. To keep the model as simple as you can will give you a clear field levels in X3D file. It will be helpful to understand where the haptic field goes from the beginning.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;Step 1: Build a normal 3D model&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;You can use any 3D modeling application you're familiar with. I do not have 3D Max on my computer, so I created my model with &lt;a href="http://www.blender.org/download/get-blender/"&gt;blender&lt;/a&gt;. It's free and fabulous. Oh, don't forget assign material for your model, a default material will do.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;Step 2: Export the model as X3D file&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;This is too easy to blog anyting on it, just export the file you created.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;Step 3: Edit X3D file&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;Here comes something new. Open the X3D file you just exported with a text editor. Find the field &amp;lt;Appearance&amp;gt; and just after &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;Appearance&amp;gt; we add a new field &amp;lt;SmoothSurface/&amp;gt;. OK that's all, now you can use H3DLoad to check your model with default SmoothSurface.&lt;br /&gt;Currently, without any programming work we have three haptic surface nodes to choose from. They are:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;SmoothSurfce - a surface without friction&lt;/li&gt;&lt;li&gt;FrictionalSurface - a surface with friction&lt;/li&gt;&lt;li&gt;MagneticSurface - makes the shape magnetic&lt;/li&gt;&lt;/ul&gt;Note: H3DLoad comes with h3dapi package, you can download it from &lt;a href="http://www.h3dapi.org/"&gt;here&lt;/a&gt;&lt;br /&gt;Pre requirement: a haptic stylus of course&lt;br /&gt;&lt;br /&gt;PS: some H3DLoad options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;-f for fullscreen&lt;/li&gt;&lt;li&gt;-m for mirror&lt;/li&gt;&lt;li&gt;-s for with spacemouse&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;x3d version="3.0" profile="Immersive" xsd="http://www.w3.org/2001/XMLSchema-instance" nonamespaceschemalocation="http://www.web3d.org/specifications/x3d-3.0.xsd"&gt;&lt;scene&gt;&lt;navigationinfo headlight="FALSE" visibilitylimit="100.0" type="EXAMINE, ANY" avatarsize="0.25, 1.75, 0.75"&gt;&lt;fittoboxtransform boxcenter="0 0 0" boxsize="0.2 0.2 0.2" uniformscalingonly="true" active="true"&gt;&lt;background groundcolor="0.057 0.221 0.4" skycolor="0.057 0.221 0.4"&gt;&lt;transform def="Cube" translation="0.0 0.0 0.0"&gt;&lt;br /&gt;&lt;/transform&gt;&lt;/background&gt;&lt;/fittoboxtransform&gt;&lt;/navigationinfo&gt;&lt;/scene&gt;&lt;/x3d&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-3617308697195757089?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/3617308697195757089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=3617308697195757089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/3617308697195757089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/3617308697195757089'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2007/09/two-steps-to-build-haptic-model.html' title='Three Steps  Build a Haptic Model'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZwUzOhP-_x8/RuEi9tTrPlI/AAAAAAAAAA8/B-TMGlN6GMA/s72-c/haptics.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-5382738121653830013</id><published>2007-09-06T08:33:00.000-07:00</published><updated>2007-09-07T03:45:43.626-07:00</updated><title type='text'>A Simple OpenGL Sample as Firefox plugin</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZwUzOhP-_x8/RuAkANTrPjI/AAAAAAAAAAs/Eyd9ROZG1Bs/s1600-h/firefoxopengl.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_ZwUzOhP-_x8/RuAkANTrPjI/AAAAAAAAAAs/Eyd9ROZG1Bs/s320/firefoxopengl.gif" alt="" id="BLOGGER_PHOTO_ID_5107121563428929074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;     It does OpenGL rendering as Firefox plugin. Don't know whether it's useful. I did     it for fun!&lt;/p&gt;&lt;h2&gt;Background&lt;br /&gt;&lt;/h2&gt;  &lt;p&gt;     I was trying to render x3d file with OpenGL as a Firefox plugin. I know there are     many such x3d file viewers, but mine intends to handle haptic field...well, this     sample is just a by-product.&lt;/p&gt;&lt;h2&gt;         Tinkering the code&lt;/h2&gt;  &lt;p&gt;     You will first need to download Gecko plugin API and Firefox source code.&lt;/p&gt;&lt;p&gt;         &lt;a href="http://developer.mozilla.org/en/docs/Gecko_SDK"&gt;Download Gecko SDK &lt;/a&gt;         extract to \yourroot\gecko-sdk\&lt;/p&gt;     &lt;p&gt;         Download Firefox source code from &lt;a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest-2.0/source"&gt;             here&lt;/a&gt;, extract to \yourroot\mazilla. Then we start from a basic plugin sample,         come to the folder:  yourroot\mozilla\modules\plugin\tools\sdk\samples\basic\windows&lt;/p&gt;     &lt;p&gt;         Here's a little trick, we need to run &lt;a href="http://www.iconv.com/unix2dos.htm"&gt;unix2dos&lt;/a&gt;         on npbasic.dsp and npbasic.dsw under this folder. Then we open and cover the project         by Visual C++ Express, will be successed now. From project properties change the         Additional include directories to yourroot\gecko-sdk\include;yourroot\mozilla\modules\plugin\tools\sdk\samples\include.         Try to build now, if successed, we continue...&lt;/p&gt;     &lt;p&gt;         Open plugin.cpp, after     &lt;/p&gt;     &lt;p&gt;         #include "plugin.h"&lt;/p&gt;     &lt;p&gt;         add&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    #include &amp;lt;gl/gl.h&amp;gt;&lt;gl h=""&gt;&lt;gl h=""&gt;&lt;/gl&gt;&lt;/gl&gt;&lt;/strong&gt;&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;     &lt;p&gt;         then after the line&lt;/p&gt;     &lt;p&gt;         static WNDPROC lpOldProc = NULL; add two functions EnableOpenGL and DisableOpenGL&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;&lt;pre&gt;&lt;strong&gt;void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC);&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC);&lt;/strong&gt;&lt;/pre&gt;     &lt;p&gt;         and in&lt;/p&gt;     &lt;p&gt;         NPBool nsPluginInstance::init(NPWindow* aWindow)     &lt;/p&gt;     &lt;p&gt;         {&lt;/p&gt;     &lt;p&gt;         .................&lt;/p&gt;     &lt;p&gt;         //we add EnableOpenGL and SetTimmer&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;&lt;pre&gt;&lt;strong&gt; EnableOpenGL( mhWnd, &amp;hDC, &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;hRC );&lt;br /&gt;SetTimer(mhWnd, 0,  1,  (TIMERPROC) NULL);&lt;/strong&gt; // no timer callback&lt;br /&gt;&lt;/pre&gt;     &lt;p&gt;         ............&lt;/p&gt;     &lt;p&gt;         }&lt;/p&gt;     &lt;p&gt;         then in&lt;/p&gt;     &lt;p&gt;         void nsPluginInstance::shut()     &lt;/p&gt;     &lt;p&gt;         {&lt;/p&gt;     &lt;p&gt;         // subclass it back     &lt;/p&gt;     &lt;p&gt;         //We add DisableOpenGL&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;&lt;pre&gt;&lt;strong&gt;    DisableOpenGL( mhWnd, hDC, hRC );&lt;/strong&gt;&lt;/pre&gt;     &lt;p&gt;         ....&lt;/p&gt;     &lt;p&gt;         }&lt;/p&gt;     &lt;p&gt;         then in PluginWinProc we need to handle WM_TIMMER message like the following&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;     &lt;pre&gt;   &lt;strong&gt;case WM_TIMER:&lt;br /&gt;   theta += 1.0f;&lt;br /&gt;   PostMessage( hWnd, WM_PAINT, NULL, NULL );&lt;br /&gt;   break;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt; &lt;/pre&gt;     &lt;p&gt;         At last we do OpenGL rendering in case WM_PAINT, remove the original code under         this case, and replace them with ours as the following:&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;     &lt;pre&gt;&lt;strong&gt;    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );&lt;br /&gt; glClear( GL_COLOR_BUFFER_BIT );&lt;br /&gt; glPushMatrix();&lt;br /&gt; glRotatef( theta, 0.0f, 0.0f, 1.0f );&lt;br /&gt; glBegin( GL_TRIANGLES );&lt;br /&gt; glColor3f( 1.0f, 0.0f, 0.0f );&lt;br /&gt; glVertex2f( 0.0f, 1.0f );&lt;br /&gt; glColor3f( 0.0f, 1.0f, 0.0f );&lt;br /&gt; glVertex2f( 0.87f, -0.5f );&lt;br /&gt; glColor3f( 0.0f, 0.0f, 1.0f );&lt;br /&gt; glVertex2f( -0.87f, -0.5f );&lt;br /&gt; glEnd();&lt;br /&gt; glPopMatrix();&lt;br /&gt; SwapBuffers( hDC );&lt;/strong&gt;&lt;/pre&gt;     &lt;p&gt;         it's almost done, but don't forget to define EnableOpenGL and DisableOpenGL&lt;/p&gt;     &lt;p&gt;     &lt;/p&gt;     &lt;pre&gt;&lt;strong&gt;void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC)&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;p&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New;font-size:100%;"  &gt;&lt;strong&gt;    PIXELFORMATDESCRIPTOR pfd;&lt;br /&gt; int format; &lt;/strong&gt;// get the device context (DC)&lt;br /&gt;&lt;strong&gt;    *hDC = GetDC( hWnd ); &lt;/strong&gt;// set the pixel format for the DC&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:100%;"  &gt;&lt;strong&gt;    ZeroMemory( &amp;pfd, sizeof( pfd ) );&lt;br /&gt; pfd.nSize = sizeof( pfd );&lt;br /&gt; pfd.nVersion = 1;&lt;br /&gt; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;&lt;br /&gt; pfd.iPixelType = PFD_TYPE_RGBA;&lt;br /&gt; pfd.cColorBits = 24;&lt;br /&gt; pfd.cDepthBits = 16;&lt;br /&gt; pfd.iLayerType = PFD_MAIN_PLANE;&lt;br /&gt; format = ChoosePixelFormat( *hDC, &amp;pfd );&lt;br /&gt; SetPixelFormat( *hDC, format, &amp;pfd );&lt;/strong&gt; // create and enable the render context (RC)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;&lt;span style="font-family:Courier New;"&gt;    *hRC = wglCreateContext( *hDC );&lt;br /&gt; wglMakeCurrent( *hDC, *hRC );&lt;br /&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New;font-size:100%;"  &gt;// Disable OpenGL &lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;&lt;span style="font-family:Courier New;"&gt;void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC)&lt;br /&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:9;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;    wglMakeCurrent( NULL, NULL );&lt;br /&gt; wglDeleteContext( hRC );&lt;br /&gt; ReleaseDC( hWnd, hDC );&lt;/span&gt;&lt;br /&gt;}&lt;/strong&gt;  &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;/pre&gt;&lt;p&gt;      &lt;/p&gt;     &lt;p&gt;         Done!!!&lt;/p&gt;  &lt;h2&gt;     Build the Project&lt;/h2&gt;  &lt;p&gt;     Nothing to say, just build it.&lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;     Test the plugin&lt;/h2&gt;  &lt;p&gt;     Copy npbasic.dll to C:\Program Files\Mozilla Firefox\plugins\ or yourfolder\Mozilla     Firefox\plugins\&lt;br /&gt;From the folder yourroot\mozilla\modules\plugin\tools\sdk\samples\basic\ you will     find test.html, double click, you would see a rotating triangle, corlorful...&lt;/p&gt;     Another way to test the plugin. If we open a file of the type a plugin registered     then the plugin will be triggered. Open basic.rc with a text editor, find the string     "FileExtents" and change the value to whatever you want. I changed it to hx3d.     Next, create an empty file with the extension .hx3d, I created testbasic.hx3d under     my folder. In firefox url box type c:\r.wang\testbasic.hx3d, you would also see     the plugin triangle&lt;br /&gt;&lt;br /&gt;Now, em....enjoy.&lt;br /&gt;.&lt;br /&gt;.&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/25373511-5382738121653830013?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/5382738121653830013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=5382738121653830013' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5382738121653830013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/5382738121653830013'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2007/09/simple-opengl-sample-as-firefox-plugin.html' title='A Simple OpenGL Sample as Firefox plugin'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZwUzOhP-_x8/RuAkANTrPjI/AAAAAAAAAAs/Eyd9ROZG1Bs/s72-c/firefoxopengl.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115918263381842930</id><published>2006-09-25T04:08:00.000-07:00</published><updated>2006-09-26T01:41:15.183-07:00</updated><title type='text'>OpenRT—Realtime RenderMan Ray-Tracing OpenGL</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4481/2650/1600/rt2006.0.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4481/2650/320/rt2006.0.png" alt="" border="0" /&gt;&lt;/a&gt; &lt;p align="justify"&gt;OpenRT is a realtime &lt;a href="http://vrlab.blogspot.com/2006/09/ray-tracing-vs-raster-graphics.html"&gt;ray tracing&lt;/a&gt; rendering engine and API. It is designed as powerful as RenderMan by offering all features of ray tracing. And as similar as OpenGL, while as possible. It is RenderMan-like for shader writer and OpenGL-like for application programmers. OpenRT in contrast of OpenGL, supports no immediate mode. This means that every geometry you want to display has to be contained in an OpenRT object. This object has to be instantiated and can then be rendered. This is because ray tracing uses a global approach, not as &lt;a href="http://vrlab.blogspot.com/2006/09/ray-tracing-vs-raster-graphics.html"&gt;raster&lt;/a&gt; dealing triangles independently.   &lt;/p&gt; &lt;p align="justify"&gt;A non-commercial version of OpenRT can be &lt;a href="http://www.openrt.de/getting_OpenRT.php"&gt;download&lt;/a&gt; from &lt;a href="http://www.openrt.de/getting_OpenRT.php"&gt;here&lt;/a&gt;. But it supports no cluster. And so a dual-core Itanium2 might be a not-so-not-decent processor to run it as a single node. IMHO, OpenRT is designed to run over cluster other than super powerful single node, at least talk against today's computer. I tried the commercial version on my so humble cluster of old old pentium 4s, yet what makes me love it most is that the speedup is so so linear to the number of nodes due to the properties of ray tracing algorithm.&lt;/p&gt; &lt;p align="justify"&gt; &lt;/p&gt;&lt;p align="justify"&gt; &lt;/p&gt;&lt;p align="justify"&gt;Imagine, realtime RenderMan! Leading digital effects houses and computer graphics specialists use RenderMan and every movie nominated for a Visual Effects Oscar in the last 10 years relied somewhat on RenderMan.&lt;/p&gt; &lt;p align="justify"&gt;&lt;span style="font-family:Times New Roman,serif;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;span style="font-family:Times New Roman,Times,serif;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;The commercial version is around £40,000 for 16 nodes Itanium2 (IA64). So you see, OpenRT is by no means of Open Source project, only but puns OpenGL.&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115918263381842930?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115918263381842930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115918263381842930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115918263381842930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115918263381842930'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/09/openrtrealtime-renderman-ray-tracing.html' title='OpenRT—Realtime RenderMan Ray-Tracing OpenGL'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115918225201753382</id><published>2006-09-25T04:01:00.000-07:00</published><updated>2006-09-26T01:24:14.563-07:00</updated><title type='text'>Ray Tracing vs. Raster Graphics</title><content type='html'>The rendering technique—ray tracing has reached the stage where it is feasible that it will take over from raster graphics in the near future for interactive simulation/gaming and other application domains. Ray tracing is the act of tracing the trajectory of a ray from one point to another to determine if anything is hit and the distance to the nearest hit point. In fact, ray-tracing techniques can achieve the exact same results as raster-based techniques (including all the approximations and tricks that raster solutions typically require); however, it does not work the other way round.&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;br /&gt;The primary differentiating factor between raster- and ray tracing approaches is that a ray tracing approach enables one to solve a global problem, while a raster-based approach seeks to achieve similar results by solving a local problem.&lt;br /&gt;&lt;br /&gt;Raster graphics attempts to render an image efficiently by making certain convenient assumptions. In particular, it &lt;span style="color: rgb(0, 0, 0);"&gt;treats triangles as if each triangle is entirely independent of every other triangle&lt;/span&gt;. There is a concept of the current state and the current triangle. This is the Graphics Processing Unit's (GPU) view of the entire world; it has no idea if or what comes next. In general, due to the way that raster systems work, they process every pixel of every submitted triangle to determine the final image that needs to be displayed. So raster graphics performance scales strongly with the number of triangles and pixels that have to be processed for a given image, &lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;so cost scales strongly linearly with viewport size and overall scene complexity.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Because ray tracing takes a global approach, the natural interface to it is different that that used with raster graphics. Recall that raster graphics use an “immediate mode” interface, and is only aware of a current state and a current primitive at any point in time. Ray tracing, on the other hand, needs a “retained mode” interface where random access to the whole scene is required, and when a visible triangle is determined, a specific shader needs to be invoked on demand. However, the really exciting news is how the ray tracing workload scales. It is strongly effected by the number of rays shot in a scene and weakly effected by the complexity of the scene! &lt;span style="color: rgb(0, 0, 0);"&gt;Ray tracing scales linearly with the number of rays shot and only logarithmically with the complexity of the scene&lt;/span&gt;&lt;b style="color: rgb(0, 0, 0);"&gt;.&lt;/b&gt; For a fixed resolution image, the cost of raster graphics doubles (roughly) as the complexity of the scene doubles; for ray tracing, you would have to increase the &lt;span style="color: rgb(0, 0, 0);"&gt;viewed scene&lt;/span&gt; complexity by 10 times to double the cost. Here we emphasize &lt;span style="color: rgb(0, 0, 0);"&gt;viewed scene&lt;/span&gt; for the ray tracing is not so much overall scene complexity dependent, but dependent upon the visible complexity of the scene. Another amazing fact of ray tracing is that its performance scales linearly with the number of CPUs ( with today's raster oriented graphics accelerators ). And measured linear performance scales &lt;span style="color: rgb(0, 0, 0);"&gt;up to 128 CPUs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;(3.2GHz Pentium 4).&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115918225201753382?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115918225201753382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115918225201753382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115918225201753382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115918225201753382'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/09/ray-tracing-vs-raster-graphics.html' title='Ray Tracing vs. Raster Graphics'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115806682055814820</id><published>2006-09-12T06:10:00.000-07:00</published><updated>2006-09-12T06:13:40.570-07:00</updated><title type='text'>5DT Data Glove Successfully Connected to Linux Cluster CAVE Demo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4481/2650/1600/5dtglove.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4481/2650/320/5dtglove.gif" alt="" border="0" /&gt;&lt;/a&gt; &lt;p align="justify"&gt;The 5DT Data Glove 16 (right hand) now successfully connected to our Linux cluster city demo, a four-screen CAVE demo.  As simple as using pre-defined gesture, index finger, for example to indicate  turn right, you can program the gesture as complicated as you want while using raw data instead of pre-defined gestures.&lt;/p&gt; &lt;p align="justify"&gt;The 5DT Data Glove 16 measures finger flexure as well as the abduction between the fingers. Finger flexure is measured at two places (1&lt;sup&gt;st&lt;/sup&gt; joint/knuckle, 2&lt;sup&gt;nd&lt;/sup&gt; joint) on each finger. The glove consists of a lycra glove with embedded fibre optic sensors. The 5DT Data Glove 16 connects to a 9-pin RS232 serial port (DB9 connector) via the interface cable.&lt;/p&gt; &lt;p align="justify"&gt;The 5DT Data Glove Driver provides access to the 5DT range of data gloves at an intermediate level. The Linux version is provided in form of a C/C++ header file (fglove.h), and a dynamic library file (libfglove.so). The API is free for both Windows and Linux.&lt;/p&gt; &lt;p align="justify"&gt;There are 16 pre-defined gestures, i.e., 0 for fist and 15 for flat hand, etc.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115806682055814820?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115806682055814820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115806682055814820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115806682055814820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115806682055814820'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/09/5dt-data-glove-successfully-connected.html' title='5DT Data Glove Successfully Connected to Linux Cluster CAVE Demo'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115710998505342004</id><published>2006-09-01T04:25:00.000-07:00</published><updated>2006-09-04T01:12:58.740-07:00</updated><title type='text'>Capture Muscle's Subtle Movement</title><content type='html'>&lt;div style="text-align: justify;"&gt;During dynamic activities, the surface of the human body moves in many subtle but visually significant ways: bending, bulging, jiggling, and stretching, according to this SIGGRAGH 2006 paper. They used around 350 small markers (diameter 3.0mm with hemispherical shape) and commercial motion capture system from Vicon (12 cameras with 4 megapixel resolution capture at rate 120 frame/sec). The average distance between two neighbouring markers was 4-5mm. In order to get high precise, they located the cameras close to the subject, so the capture region was approximately 2m by 2m by 2.5m. Two cameras were set looking up rather than down to capture markers facing toward ground.   &lt;/div&gt;&lt;p style="text-align: justify;"&gt;If you interested, you can &lt;a href="http://www.cs.cmu.edu/%7Esipark/muscle/Final_MuscleMovie_Mpeg4.mov"&gt;downloaded&lt;/a&gt; the movie to see how this method work. And read the whole &lt;a href="http://graphics.cs.cmu.edu/projects/muscle/muscle_siggraph.pdf"&gt;paper&lt;/a&gt; for more details.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115710998505342004?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115710998505342004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115710998505342004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115710998505342004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115710998505342004'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/09/capture-muscles-subtle-movement.html' title='Capture Muscle&apos;s Subtle Movement'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115615894378140669</id><published>2006-08-21T04:15:00.000-07:00</published><updated>2006-09-04T06:11:59.220-07:00</updated><title type='text'>PC Clusterrenderizer</title><content type='html'>&lt;a href="http://vrlab.blogspot.com/"&gt; &lt;/a&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Our PC clusters are configured to drive multi-projector display systems, with a single PC node for either one or two projectors, depending on your graphics card ( two projectors to provide stereoscopic view ). For mono-display, you can also build a tiled monitor wall by racking all your old monitors on a grid-rack. So this PC cluster can support monoscopic as well as passive-stereo display. The cluster is built with only off-the-shelf ( out-of-service actually ) commodity components and all the software are of open source. With a variety of flexible &lt;a href="http://www.python.org/"&gt;python&lt;/a&gt; configuration, you can do  either arbitrary high resolution( such as 1280x2&lt;sup&gt;n/2&lt;/sup&gt;x1024x2&lt;sup&gt;n/2&lt;/sup&gt; for a 2&lt;sup&gt;n &lt;/sup&gt;PCs cluster ) tile-like rendering or CAVE-like rendering.&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;Currently we have a four-PC-cluster demo system, which can do both tiled display and CAVE.&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Besides old PCs, you should have a decent switch, the number of ports depends on how many PCs you have for this cluster. As we mentioned before all the support software as well as developing environment are of open source, so there no budget happens on this.&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115615894378140669?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115615894378140669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115615894378140669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115615894378140669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115615894378140669'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/08/pc-clusterrenderizer.html' title='PC Clusterrenderizer'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-115614992503285451</id><published>2006-08-21T01:36:00.000-07:00</published><updated>2006-08-21T02:02:41.403-07:00</updated><title type='text'>Portable Stereoscopic Solution</title><content type='html'>&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;" align="justify" lang="en-GB"&gt;&lt;span style="font-size:100%;"&gt;laptop  with stereoscopic monitor, such as Sharp’s 3D notebook Actius  AL3DU around £1600&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;span style="font-size:100%;"&gt;Normal  laptop with graphics card has dual head output, plus stereoscopic  head mounted display or goggles. The price of HMD or goggles are  ranging from £300.00 to ..indefinite huge number.&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;span style="font-size:100%;"&gt;Normal  laptop with stereoscopic supported projector, such as Infocus DepthQ  3D projector circa£2500&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;span style="font-size:100%;"&gt;The  followings are amateur’s solutions. First, you can use  a normal  laptop ( almost any laptop will work ), plus shutter glasses. For  the LCD monitor most possibly polarized a degree, so you may need to  search for a piece of cellophane for most laptop monitors but THERE  ARE some LCD monitors don’t need. Secondly, you have another  choice you can even use polarizer with your laptop while apply  half-wave cellophane on half of you monitor. This may need some  skills or experience though we can provide tutor for free.&lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;span style="font-size:100%;"&gt;So we recommend the first three options for business application. But if you want to play with stereo at home, we’d like to recommend the last option. You actually need almost naught additional pay to get stereo besides some of your time.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;System requirements:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;Graphics Card: &lt;span lang="en-GB"&gt;quadro-buffer and with dual head&lt;/span&gt;&lt;br /&gt;VRAM:  no less than 256MB&lt;br /&gt;System RAM: no less than 1024MB&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;A sample laptop system circa £2000&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;span style="font-size:100%;"&gt;Dell Precision Mobile Workstation M70&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;     &lt;p style="margin-bottom: 0cm;" lang="en-GB"&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;CPU:  Pentium® M 780 (&lt;b&gt;2.26GHz,2MB L2 Cache&lt;/b&gt;,533FSB)15.4 WUXGA&lt;br /&gt;Graphics Card: NVIDIA® &lt;b&gt;Quadro&lt;/b&gt;® FX Go1400 &lt;b&gt;256MB&lt;/b&gt; OpenGL graphics&lt;br /&gt;Memory: &lt;b&gt;2GB&lt;/b&gt;, 533MHz, DDR2 SDRAM (2 DIMMS)&lt;/span&gt;&lt;br /&gt;HD:  80GB Hard Drive (7200 RPM)&lt;br /&gt;DVD:  8-24-24-24X CDRW/DVD Combo Drive w/ CyberLink PowerDVD™&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-115614992503285451?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/115614992503285451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=115614992503285451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115614992503285451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/115614992503285451'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/08/portable-stereoscopic-solution.html' title='Portable Stereoscopic Solution'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-114440833104018155</id><published>2006-04-07T04:11:00.000-07:00</published><updated>2006-04-07T04:12:11.040-07:00</updated><title type='text'>One of main screen projectors not working</title><content type='html'>One of main screen projectors--upper one,v4010018-- is in problem: no signal at all. We are still waiting for Virtalis' response...if sent back to manufacturer for repairing, it'll take at least two weeks to get repaired.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-114440833104018155?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/114440833104018155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=114440833104018155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114440833104018155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114440833104018155'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/04/one-of-main-screen-projectors-not.html' title='One of main screen projectors not working'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-114440779880953633</id><published>2006-04-07T04:02:00.000-07:00</published><updated>2006-08-21T07:41:35.993-07:00</updated><title type='text'>MultiScreen / MultiPC tracked environment</title><content type='html'>&lt;div style="text-align: justify;"&gt;Now the multiscreen/multi-PC tracked environment get working in our own way. Stonehenge demo upgraded to .net successfully with some vital changes, but while comparing with the lines of original source code the number of lines changed are trivial(I don't think the number of lines is the unit to measure the functionality of software). What important is that now we know how to program the whole system.&lt;br /&gt;&lt;br /&gt;The other thing, with upgraded Stonehenge (precisely, the original Stonehenge has the function of load different scene of nff format, but it hadn't been found before I did it) we can load 3D scene from most of 3D application through a shareware software (one month free trial), which can read most of popular 3D files and save as nff file.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-114440779880953633?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/114440779880953633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=114440779880953633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114440779880953633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114440779880953633'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/04/multiscreen-multipc-tracked.html' title='MultiScreen / MultiPC tracked environment'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25373511.post-114415924743407338</id><published>2006-04-04T06:59:00.000-07:00</published><updated>2006-04-04T07:00:47.446-07:00</updated><title type='text'>Test</title><content type='html'>This is a helloWorld post, please ignore...........&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25373511-114415924743407338?l=vrlab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrlab.blogspot.com/feeds/114415924743407338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25373511&amp;postID=114415924743407338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114415924743407338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25373511/posts/default/114415924743407338'/><link rel='alternate' type='text/html' href='http://vrlab.blogspot.com/2006/04/test.html' title='Test'/><author><name>VRLab</name><uri>http://www.blogger.com/profile/04218068560125667139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/blogger/4481/2650/1600/vrlogo.jpg'/></author><thr:total>0</thr:total></entry></feed>
