Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 2247

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CTexturedObject.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CTexturedObject.h</div>  </div>
</div>
<div class="contents">
<a href="_c_textured_object_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef opengl_CTexturedObject_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define opengl_CTexturedObject_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="_c_renderizable_display_list_8h.html">mrpt/opengl/CRenderizableDisplayList.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="_c_image_8h.html">mrpt/utils/CImage.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="geometry_8h.html">mrpt/math/geometry.h</a>&gt;</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="keyword">namespace </span>mrpt
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037         <span class="keyword">namespace </span>opengl
<a name="l00038"></a>00038         {
<a name="l00039"></a><a class="code" href="namespacemrpt_1_1opengl.html#a52750ab4c294f664d40461edf1066da8">00039</a>                 <span class="keyword">class </span><a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a>;
<a name="l00040"></a>00040 
<a name="l00041"></a>00041                 <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00042"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_textured_object_ptr.html#a9e35c06cd29836cfcd58892cebfe6b85">00042</a>                 <a class="code" href="_c_serializable_8h.html#a9ef523d787f6cb837a0585b790882588" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE</a>( <a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a>, <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL&#39;s display lists.">CRenderizableDisplayList</a>, <a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> )
<a name="l00043"></a>00043 
<a name="l00044"></a>00044                 <span class="comment">/** A base class for all OpenGL objects with loadable textures.</span>
<a name="l00045"></a>00045 <span class="comment">                  *  \sa opengl::COpenGLScene, opengl::CTexturedPlane, opengl::CSetOfTexturedTriangles</span>
<a name="l00046"></a>00046 <span class="comment">                  * \ingroup mrpt_opengl_grp</span>
<a name="l00047"></a>00047 <span class="comment">                  */</span>
<a name="l00048"></a>00048                 class <a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a> : public <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL&#39;s display lists.">CRenderizableDisplayList</a>
<a name="l00049"></a>00049                 {
<a name="l00050"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#a6fec28a53e20dfc1c4d046c26f9f7b48">00050</a>                         <a class="code" href="_c_serializable_8h.html#a5876f72cf51bfb66a82bf81cc493febc" title="This declaration must be inserted in virtual CSerializable classes definition:">DEFINE_VIRTUAL_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a> )
<a name="l00051"></a>00051 
<a name="l00052"></a>00052                 protected:
<a name="l00053"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#ab7d674c468e9b2be1d5813b3c26cbe71">00053</a>                         mutable <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>            m_glTextureName;
<a name="l00054"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#a76911ec871144075a53c7ed63d15f54a">00054</a>                         mutable <span class="keywordtype">bool</span>                            m_texture_is_loaded;
<a name="l00055"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#a7d4c45901848d0a65d7a58f0c7d49364">00055</a>                         mutable mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>     m_textureImage;
<a name="l00056"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#adca77afd94ab3d00822986c58e5b7c54">00056</a>                         mutable mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>     m_textureImageAlpha;
<a name="l00057"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#ae4eacd10a710dc3e620c7659d1b03a27">00057</a>                         mutable <span class="keywordtype">bool</span>                            m_enableTransparency;  <span class="comment">//!&lt; Of the texture using &quot;m_textureImageAlpha&quot;</span>
<a name="l00058"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#a0c5ecd9b3f5e53c064d2c6e51957161d">00058</a> <span class="comment"></span>                        mutable <span class="keywordtype">int</span>                                     r_width,r_height;               <span class="comment">//!&lt; Size of the texture image, rounded up to next power of 2</span>
<a name="l00059"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html#ade46a1cbebd06e957643f6e2e392dac2">00059</a> <span class="comment"></span>                        mutable <span class="keywordtype">int</span>                                     m_fill_x_left,m_fill_y_top,m_fill_x_right,m_fill_y_bottom; <span class="comment">//!&lt; The size of the fill in pixels in the textured image, w.r.t the image passed by the user.</span>
<a name="l00060"></a>00060 <span class="comment"></span>
<a name="l00061"></a>00061                         <a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a>();
<a name="l00062"></a>00062                         virtual ~<a class="code" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">CTexturedObject</a>();
<a name="l00063"></a>00063                         <span class="keywordtype">void</span> unloadTexture();
<a name="l00064"></a>00064 
<a name="l00065"></a>00065                         virtual <span class="keywordtype">void</span>  render_pre()  const;
<a name="l00066"></a>00066                         virtual <span class="keywordtype">void</span>  render_post() const;
<a name="l00067"></a>00067 
<a name="l00068"></a>00068                         virtual <span class="keywordtype">void</span>  render_texturedobj() const = 0;  <span class="comment">//!&lt; Must be implemented by derived classes</span>
<a name="l00069"></a>00069 <span class="comment"></span>
<a name="l00070"></a>00070                         <span class="keywordtype">void</span>  writeToStreamTexturedObject(mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a> &amp;out) const;
<a name="l00071"></a>00071                         <span class="keywordtype">void</span>  readFromStreamTexturedObject(mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a> &amp;in);
<a name="l00072"></a>00072 
<a name="l00073"></a>00073                 public:<span class="comment"></span>
<a name="l00074"></a>00074 <span class="comment">                        /** Assigns a texture and a transparency image, and enables transparency (If the images are not 2^N x 2^M, they will be internally filled to its dimensions to be powers of two)</span>
<a name="l00075"></a>00075 <span class="comment">                          * \note Images are copied, the original ones can be deleted.</span>
<a name="l00076"></a>00076 <span class="comment">                          */</span>
<a name="l00077"></a>00077                         <span class="keywordtype">void</span>  assignImage(
<a name="l00078"></a>00078                                 const mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp;      img,
<a name="l00079"></a>00079                                 const mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp;      imgAlpha );
<a name="l00080"></a>00080 <span class="comment"></span>
<a name="l00081"></a>00081 <span class="comment">                        /** Assigns a texture image, and disable transparency.</span>
<a name="l00082"></a>00082 <span class="comment">                          * \note Images are copied, the original ones can be deleted. */</span>
<a name="l00083"></a>00083                         <span class="keywordtype">void</span>  assignImage(const mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp; img );
<a name="l00084"></a>00084 <span class="comment"></span>
<a name="l00085"></a>00085 <span class="comment">                        /** Similar to assignImage, but the passed images will be returned as empty: it avoids making a copy of the whole image, just copies a pointer. */</span>
<a name="l00086"></a>00086                         <span class="keywordtype">void</span>  assignImage_fast(
<a name="l00087"></a>00087                                 mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp;    img,
<a name="l00088"></a>00088                                 mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp;    imgAlpha );
<a name="l00089"></a>00089 <span class="comment"></span>
<a name="l00090"></a>00090 <span class="comment">                        /** Similar to assignImage, but the passed images will be returned as empty: it avoids making a copy of the whole image, just copies a pointer.  */</span>
<a name="l00091"></a>00091                         <span class="keywordtype">void</span>  assignImage_fast(mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp;     img );
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">                        /** VERY IMPORTANT: If you use a multi-thread application, you MUST call this from the same thread that will later destruct the object in order to the OpenGL texture memory to be correctly deleted.</span>
<a name="l00094"></a>00094 <span class="comment">                          *  Calling this method more than once has no effects. If you use one thread, this method will be automatically called when rendering, so there is no need to explicitly call it.</span>
<a name="l00095"></a>00095 <span class="comment">                          */</span>
<a name="l00096"></a>00096                         <span class="keywordtype">void</span> loadTextureInOpenGL() const;
<a name="l00097"></a>00097 
<a name="l00098"></a>00098                         virtual <span class="keywordtype">void</span>  render_dl() const;
<a name="l00099"></a>00099 
<a name="l00100"></a>00100                 };
<a name="l00101"></a>00101 
<a name="l00102"></a>00102         } <span class="comment">// end namespace</span>
<a name="l00103"></a>00103 
<a name="l00104"></a>00104 } <span class="comment">// End of namespace</span>
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>