<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi Adrian,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>  Thank you for the ideas.  Yes, it is the Phantom 6DOF
device.  I'm skeptical as well that we'll be able to maintain
1000Hz.  One other option I'm looking at is a voxel based approach where I
use Google's sparsehash code to implement the voxel storage.  It has its
own set of limitations on resolution in particular, but has the one nice
feature of being more or less constant complexity for a lookup vs a tree
implementation. You just hash on 3D points and use a force field function that
is stored in each voxel that is populated, otherwise force = 0.  Resolution
and static objects that aren't always static become challenging, however.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Thanks again,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Matt<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
osg-users-bounces@lists.openscenegraph.org
[mailto:osg-users-bounces@lists.openscenegraph.org] <b>On Behalf Of </b>Adrian
Egli OpenSceneGraph (3D)<br>
<b>Sent:</b> Monday, July 14, 2008 12:41 AM<br>
<b>To:</b> OpenSceneGraph Users<br>
<b>Subject:</b> Re: [osg-users] OSG with Haptics<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal style='margin-bottom:12.0pt'>Hi Matt, <br>
<br>
i implemented once an haptic based application. most of the models are about 1M
triangles, and no device can handle such numbre of tries. but finally the app
runs at 150Hz :-). so you can never get faster than 1000Hz for big scene. ok i
guess you are using the phantom device, and the vendor says: it's running at
1000Hz,... you have to update the triangles for each frame, or you pass the
whole scene to the device, right. if you have to update you can not pass it
with 1000Hz as the device can render it. but no worries, the device can only
render 1000Hz with in an optimal case, and we never have this case in our apps.
how did i achieve +100Hz with such big scenes, i implemented an kdTree to store
the triangles, and then i culled them against a sphere. so since OSG has kdTree
support (since past week) may you can implement a polytopIntersector, or just
for a sphere. the sphere radius is the max distance the device can move between
one frame :-) the faster you render the smaller the radius become, faster again
,... you see, quite important. <br>
<br>
so implement the polytop intersection, add a sphere or a box or ... it would be
greate if you could share the code. :-) new node kit or ... <br>
<br>
what kind of driver you will support ? <br>
<br>
adrian <o:p></o:p></p>

<div>

<p class=MsoNormal>2008/7/14 Matt Sutton <<a
href="mailto:Matt.Sutton@padtinc.com">Matt.Sutton@padtinc.com</a>>:<o:p></o:p></p>

<div>

<p class=MsoNormal><o:p> </o:p></p>

<p><span style='font-size:10.0pt'>Hi Folks,<br>
  I'm brand new to osg, so I wanted to get some feedback from more
experienced users regarding a tactic I am considering for a haptic application
I am developing.  Haptics are 3d force feedback devices.  One of the
challenges with them is that they require update speeds at approximately
1000Hz.  The model that I will be working with is approximately 1,000,000
triangles, so collision detection is challenging at these rates.  The
tactic I am considering in a nut shell is to use a second scene graph for
haptic culling purposes.  I want to create an artificial viewing frustum
near the haptic probe so I can cull away triangles that cannot come into
contact with the probe.  I would then use the haptic rendering software
with this smaller subset of triangles.  The cull doesn't need to process
at 1000Hz, but rather needs to maintain a window around the probe such that the
"visible" triangles include all that can potentially contact the
probe while the probe is moving and before the next cull frame.  Does this
sound reasonable?  If so, what form should I use for my haptic scene
graph?  That is, does the cull work best with a series of nodes
representing smaller patches of the geometry?  Are there any issues,
beyond the extra book-keeping with two separate scene graphs in a single
application?  Is there any benefit in maintaining two separate graphs, or
would alternate traversals of a master graph be sufficient?  Sorry if
these are too elementary.  Please feel free to point me to a piece of documentation
if I am missing something.<br>
Thanks for any help.<br>
Matt Sutton<br>
<a href="http://www.padtinc.com" target="_blank">www.padtinc.com</a></span><o:p></o:p></p>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a
href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org"
target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><o:p></o:p></p>

</div>

<p class=MsoNormal><br>
<br clear=all>
<br>
-- <br>
********************************************<br>
Adrian Egli <o:p></o:p></p>

</div>

</body>

</html>