<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:m="http://schemas.microsoft.com/office/2004/12/omml" 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 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><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:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></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="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m trying to generate my own texture coordinates (on-the-fly) by having a callback that runs when a piece of geometry intersects my object.  So for example, I create a realworld frustum and when my frustum has a shader that’s bound to
 some arbitrary object in the world.  When my frustum intersects this object, I would like to generate texture coordinates on this object based on how far or near I am to the frustum’s near/far planes (it’s perspective frustum).  We had the following code for
 doing this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:#569CD6">void</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">ViewshedOSG</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">updateTextureCoordinates</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">()</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">{</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// write the plane equation for all 3 planes</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// that make up the camera view frustum.  We can</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// then access this from the shader to test whether</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// we are in the frustum's volume or not.</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">   
</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">osg</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">Matrixd</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">projection</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">=</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#DADADA">mCamera</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">-></span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">getViewMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">();</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">     
</span><span style="font-size:14.5pt;font-family:Consolas;color:#DADADA">mTexGen</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">-></span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">setPlanesFromMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">(</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">projection</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">*</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> <o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">     
</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">osg</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">Matrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">translate</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">(</span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">1.0</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">1.0</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">1.0</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">)</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">*</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">     
</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">osg</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">Matrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">scale</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">(</span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">0.5f</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">0.5f</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B5CEA8">0.5f</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">));</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// Bring our models viewspace coordinates back</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// into model space coordinate of the camera frustum</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">osg</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">RefMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">*</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">refMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">=</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#569CD6">new</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">osg</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">::</span><span style="font-size:14.5pt;font-family:Consolas;color:#4EC9B0">RefMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">          
</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">(</span><span style="font-size:14.5pt;font-family:Consolas;color:#DADADA">mCamera</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">-></span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">getInverseViewMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">()</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">*</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">*</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">_cv</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">-></span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">getModelViewMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">());</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// Copy the texture generator to the mesh where you </span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"></span><span style="font-size:14.5pt;font-family:Consolas;color:#57A64A">// can index it's coordinates from the ViewshedID</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">      _cv</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">-></span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">getRenderStage</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">()-></span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">getPositionalStateContainer</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">()-></span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">            addPositionedTextureAttribute<o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro">           
</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">(</span><span style="font-size:14.5pt;font-family:Consolas;color:#DADADA">mId</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">refMatrix</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">,</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"> </span><span style="font-size:14.5pt;font-family:Consolas;color:#DADADA">mTexGen</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">.</span><span style="font-size:14.5pt;font-family:Consolas;color:#C8C8C8">get</span><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">());</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:#1E1E1E"><span style="font-size:14.5pt;font-family:Consolas;color:#B4B4B4">}</span><span style="font-size:14.5pt;font-family:Consolas;color:gainsboro"><o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">However, this code was based on a cull visitor calling this function from a callback.  I have my own callback and it’s not based on a visitor. Is there anyway to get the objects modelview matrix() without calling it from a cull visitor? 
 Also only need to write the ‘addPositionedTextureAttribute’ on the geometry in order to access the coordinates through a shader.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m trying to keep this simple.  Am I in the right direction?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-M<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D">----------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D">Marlin Rowley<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D">Software Engineer, Staff<o:p></o:p></span></p>
<p class="MsoNormal"><img width="156" height="40" style="width:1.625in;height:.4166in" id="Picture_x0020_1" src="cid:image001.jpg@01D3D33C.612DDB10" alt="cid:image002.jpg@01D39374.DEC5A2E0"><span style="font-size:10.0pt;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><i><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#1F497D">Missiles and Fire Control</span></i><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D">972-603-1931 (office)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D">214-926-0622 (mobile)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif"><a href="mailto:marlin.r.rowley@lmco.com"><span style="color:#0563C1">marlin.r.rowley@lmco.com</span></a></span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>