⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tutorial_46.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">下面这个函数在扩展名的字符串中查找,如果包含则返回true
<p>&nbsp;</p>
    </td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre><span class="theme">// 判断是否支持这个扩展</span><br>bool WGLisExtensionSupported(const char *extension)<br>{<br>	const size_t extlen = strlen(extension);<br>	const char *supported = NULL;</pre>
<p> <span class="theme">// 返回在WGL的扩展中查找是否支持特定的扩展</span><br>
  PROC wglGetExtString = wglGetProcAddress("wglGetExtensionsStringARB");</p>
<p> if (wglGetExtString)<br>
  supported = ((char*(__stdcall*)(HDC))wglGetExtString)(wglGetCurrentDC());</p>
<p> <span class="theme">//在OpenGL的扩展中查找是否支持特定的扩展</span><br>
  if (supported == NULL)<br>
  supported = (char*)glGetString(GL_EXTENSIONS);</p>
<p> <span class="theme">// 如果都不支持,则返回失败</span><br>
  if (supported == NULL)<br>
  return false;</p>
<p> <span class="theme">// 查找是否包含需要的扩展名</span><br>
  for (const char* p = supported; ; p++)<br>
  {<br>
  p = strstr(p, extension);</p>
<p> if (p == NULL)<br>
  return false; </p>
<p> if ((p==supported || p[-1]==' ') &amp;&amp; (p[extlen]=='\0' || p[extlen]==' 
  '))<br>
  return true; <br>
  }<br>
  }<br>
</p>
<p></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">下面这个函数在扩展名的字符串中查找,如果包含则返回true</td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre><span class="theme">// 初始化多重渲染</span><br>bool InitMultisample(HINSTANCE hInstance,HWND hWnd,PIXELFORMATDESCRIPTOR pfd)<br>{  <br><span class="theme">	 // 检测是否支持多重渲染</span><br>	if (!WGLisExtensionSupported("WGL_ARB_multisample"))<br>	{<br>		arbMultisampleSupported=false;<br>		return false;<br>	}</pre>
<p> <span class="theme">// 返回wglChoosePixelFormatARB函数的入口</span><br>
PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB =
(PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB");
<br>
  if (!wglChoosePixelFormatARB) <br>
  {<br>
  arbMultisampleSupported=false;<br>
  return false;<br>
  }</p>
<p> HDC hDC = GetDC(hWnd);</p>
<p> int pixelFormat;<br>
  int valid;<br>
  UINT numFormats;<br>
  float fAttributes[] = {0,0};</p>
<p> <span class="theme">//下面的代码设置多重采样的像素格式</span><br>
  int iAttributes[] =<br>
  {<br>
  WGL_DRAW_TO_WINDOW_ARB,GL_TRUE,<br>
  WGL_SUPPORT_OPENGL_ARB,GL_TRUE,<br>
  WGL_ACCELERATION_ARB,WGL_FULL_ACCELERATION_ARB,<br>
  WGL_COLOR_BITS_ARB,24,<br>
  WGL_ALPHA_BITS_ARB,8,<br>
  WGL_DEPTH_BITS_ARB,16,<br>
  WGL_STENCIL_BITS_ARB,0,<br>
  WGL_DOUBLE_BUFFER_ARB,GL_TRUE,<br>
  WGL_SAMPLE_BUFFERS_ARB,GL_TRUE,<br>
  WGL_SAMPLES_ARB,4,<br>
  0,0<br>
  };</p>
<p> <span class="theme">// 首先我们测试是否支持4个采样点的多重采样</span><br>
  valid = wglChoosePixelFormatARB(hDC,iAttributes,fAttributes,1,&amp;pixelFormat,&amp;numFormats);<br>
  // 如果返回true并且numformats大于1,则表示成功,那么起用多重采样<br>
  if (valid &amp;&amp; numFormats &gt;= 1)<br>
  {<br>
  arbMultisampleSupported = true;<br>
  arbMultisampleFormat = pixelFormat; <br>
  return arbMultisampleSupported;<br>
  }</p>
<p> <span class="theme">// 接着我们测试是否支持2个采样点的多重采样</span><br>
  iAttributes[19] = 2;<br>
  <span class="theme">// 如果返回true并且numformats大于1,则表示成功,那么起用多重采样</span><br>
  valid = wglChoosePixelFormatARB(hDC,iAttributes,fAttributes,1,&amp;pixelFormat,&amp;numFormats);<br>
  if (valid &amp;&amp; numFormats &gt;= 1)<br>
  {<br>
  arbMultisampleSupported = true;<br>
  arbMultisampleFormat = pixelFormat; <br>
  return arbMultisampleSupported;<br>
  }<br>
  <br>
  // 返回支持多重采样<br>
  return arbMultisampleSupported;<br>
  }<br>
</p>
<p></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">下面到了我们的主程序部分了,和前面一样还是按照常规包含一些头文件</td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre>#include &lt;windows.h&gt;								<br>#include &lt;gl/gl.h&gt;								<br>#include &lt;gl/glu.h&gt;							<br>#include "NeHeGL.h"	<br>
  #include "ARB_MULTISAMPLE.h"</pre>
<p>BOOL DestroyWindowGL (GL_Window* window);<br>
  BOOL CreateWindowGL (GL_Window* window);</p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">下面我们需要在CreateWindowGL函数中添加下面的代码,首先我们先创建一个不需要支持多重采样的窗口,它在不启用多重采样的情况下起作用。</td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre><span class="theme">	//如果不启用多重采样</span><br>	if(!arbMultisampleSupported)<br>	{<br>		PixelFormat = ChoosePixelFormat (window-&gt;hDC, &amp;pfd);				<span class="theme">// 选择一种相容的像素格式</span><br>		if (PixelFormat == 0)												<span class="theme">// 是否获得相容的像素格式</span><br>		{																	   												   <br>			ReleaseDC (window-&gt;hWnd, window-&gt;hDC);							<span class="theme">// 释放设备描述表</span><br>			window-&gt;hDC = 0;												<span class="theme">// 设置窗口设备描述表为0</span><br>			DestroyWindow (window-&gt;hWnd);								<span class="theme">	// 删除窗口</span><br>			window-&gt;hWnd = 0;											<span class="theme">	// 设置窗口句柄为0</span><br>			return FALSE;													<span class="theme">// 返回错误</span><br>		}</pre>
<p> }<br>
  <span class="theme">//如果起用多重采样</span><br>
  else<br>
  {<br>
  PixelFormat = arbMultisampleFormat; <span class="theme">//设置采样格式为多重采样格式</span><br>
  }</p>
<p></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">接着测试是否支持多重采样,如果支持,初始化多重采样,并重新创建窗口</td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre><span class="theme">	//检测是否支持多重采样</span><br>	if(!arbMultisampleSupported &amp;&amp; CHECK_FOR_MULTISAMPLE)<br>	{<br><span class="theme">		//如果是,初始化多重采样</span><br>		if(InitMultisample(window-&gt;init.application-&gt;hInstance,window-&gt;hWnd,pfd))<br>		{<br><span class="theme">			//消耗当前窗口</span><br>			DestroyWindowGL (window);<br>		<span class="theme">	//创建一个支持多重采样的窗口</span><br>			return CreateWindowGL(window);<br>		}<br>	}<br>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%">好了创建好多重采样后,只需要起用它。其他的一切绘制都和平常一样。</td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre>glEnable(GL_MULTISAMPLE_ARB);</pre>
<p class="theme">// 渲染场景</p>
<p>glDisable(GL_MULTISAMPLE_ARB);</p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="tl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="tc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="100%"></td>
    <td class="tr"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="l"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
      <td class="back3" valign="top" width="100%"><p>好了,那就是全部,希望你能喜欢:)</p>
<table border="1" width="100%">
  <tbody><tr>
    <td width="27%"><img src="Tutorial_46_files/logo%25203.jpg" align="middle" height="200" width="209"></td>
    <td width="73%">版权与使用声明:<br>
      我是个对学习和生活充满激情的普通男孩,在网络上我以DancingWind为昵称,我的联系方式是zhouwei02@mails.tsinghua.edu.cn,如果你有任何问题,都可以联系我。
      <p>引子<br>
网络是一个共享的资源,但我在自己的学习生涯中浪费大量的时间去搜索可用的资料,在现实生活中花费了大量的金钱和时间在书店中寻找资料,于是我给自己起了
个昵称DancingWind,其意义是想风一样从各个知识的站点中吸取成长的养料。在飘荡了多年之后,我决定把自己收集的资料整理为一个统一的资源库。</p>
      <p>版权声明<br>
所有DancingWind发表的内容,大多都来自共享的资源,所以我没有资格把它们据为己有,或声称自己为这些资源作出了一点贡献。故任何人都可以复
制,修改,重新发表,甚至以自己的名义发表,我都不会追究,但你在做以上事情的时候必须保证内容的完整性,给后来的人一个完整的教程。最后,任何人不能以
这些资料的任何部分,谋取任何形式的报酬。</p>
      <p>发展计划<br>
        在国外,很多资料都是很多人花费几年的时间慢慢积累起来的。如果任何人有兴趣与别人共享你的知识,我很欢迎你与我联系,但你必须同意我上面的声明。</p>
              <p>感谢<br>
                感谢我的母亲一直以来对我的支持和在生活上的照顾。<br>
                感谢我深爱的女友田芹,一直以来默默的在精神上和生活中对我的支持,她甚至把买衣服的钱都用来给我买书了,她真的是我见过的最好的女孩,希望我能带给她幸福。</p>
              <p>资源下载: <br>
                文档 <a href="http://www.owlei.com/DancingWind/Res/mht/NeHe%20OpenGL%20Chinese%20Course%2046.mht">网页格式</a> 
                <a href="http://www.owlei.com/DancingWind/Res/pdf/OpenGL_Nehe_Course_Tutorial_46.pdf">PDF格式</a><br>
                源码 <a href="http://www.owlei.com/DancingWind/Res/Src/46_MultiSample.rar">RAR格式</a></p></td>
  </tr>
</tbody></table>
        <font class="text">
        <table border="0" width="100%">
          <tbody>
            <tr> 
              <td align="left" width="50%"><b><font size="-1"><a href="http://www.owlei.com/DancingWind/Course/Tutorial_45.htm">&lt; 第45课</a></font></b></td>
              <td align="right" width="50%"><b><font size="-1"><a href="http://www.owlei.com/DancingWind/Course/Tutorial_47.htm">第47课 &gt;&nbsp;</a></font></b></td>
            </tr>
          </tbody>
        </table>
        </font> </td>
    <td class="r"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody>
  <tr>
    <td class="bl"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="bc" width="100%"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td>
    <td class="br"><img alt="" src="Tutorial_46_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre>&nbsp;</pre>

</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -