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

📄 surface.htm

📁 DirectX 编程初级教程中文版。只要有C++基础和一点三维知识即可。
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    FACE="宋体" size="3" color="#FFFFFF">ddsd.dwHeight = 10; </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">//创建页面,该页面使用IDirectDrawSurface接口</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">ddrval = lpDD2-&gt;CreateSurface(&amp;ddsd, 
    &amp;lpSurf, NULL); </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">return; </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">//询问IDirectDrawSurface3接口</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">ddrval = lpSurf-&gt;QueryInterface( 
    IID_IDirectDrawSurface3, (LPVOID *)&amp;lpSurf2); </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">return; </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">//调用IDirectDrawSurface3接口特有的函数</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">ddrval = lpSurf2-&gt;PageLock(0); </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">return; </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">ddrval = lpSurf2-&gt;PageUnlock(0); </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" size="3" color="#FFFFFF">return; </font></p>
    <font FACE="宋体" size="4"><p ALIGN="JUSTIFY"></font> </p>
    <p ALIGN="JUSTIFY">上面的例子通过调用<font FACE="Arial" SIZE="3">QueryInterface</font>函数(指定<font
    FACE="Arial" SIZE="3">IID_IDirectDraw2</font>引用标志符)获得一个<font
    FACE="Arial" SIZE="3">DirectDrawSurface</font>对象的<font FACE="Arial" SIZE="3">IDirectDrawSurface3</font>接口。要得到<font
    FACE="Arial" SIZE="3">IDirectDrawSurface3</font>接口,使用<font FACE="Arial" SIZE="3">IID_IDirectDrawSurface3</font>引用标志符即可。</p>
    <hr>
  </ol>
  <b><p></font><font FACE="黑体" SIZE="3">3、<a
  name="宽度(Width)和宽距(Pitch)">宽度(</font><font FACE="宋体" SIZE="3"><font
  FACE="Arial" SIZE="3">Width</font><font FACE="黑体" SIZE="3">)和宽距(</font><font
  FACE="Arial" SIZE="3">Pitch</font><font FACE="黑体" SIZE="3">)</a></p>
  </font></b><font SIZE="3"><p align="right"></font><a href="#目录">返回目录</a></p>
  <ol>
    <p ALIGN="JUSTIFY">如果你的应用程序要写视频<font FACE="Arial" SIZE="3">RAM</font>,内存中的位图并不需要占据连续的内存块。在这种情况下,一条线的<font
    FACE="Arial" SIZE="3">width</font>和<font FACE="Arial" SIZE="3">pitch</font>含义是不同的。<font
    FACE="Arial" SIZE="3">width</font>是指内存中位图的一条线的开始和结束位置的内存地址之差。这个距离只代表了内存中位图的宽度,它不包括位图中到达下一条线开始位置所需要的任何额外的内存。<font
    FACE="Arial" SIZE="3">pitch</font>是指内存中位图的一条线到下一条线开始位置的内存地址之差。 
    </p>
    <p ALIGN="JUSTIFY">对矩形内存来说,比如,视频<font FACE="Arial" SIZE="3">RAM</font>的<font
    FACE="Arial" SIZE="3">pitch</font>将包括位图的宽度加上一部分缓存。下面的例图表示了矩形内存中<font
    FACE="Arial" SIZE="3">width</font>和<font FACE="Arial" SIZE="3">pitch</font>的区别。</p>
    <p ALIGN="JUSTIFY">在这个例图中,前台缓存和后台缓存大小都是<font
    FACE="Arial" SIZE="3">640x480x8</font>,高速缓存是<font FACE="Arial" SIZE="3">384x480x8</font>。要到达下一条线的地址,你必须在<font
    FACE="Arial" SIZE="3">640</font>后加上<font FACE="Arial" SIZE="3">384</font>,得到<font
    FACE="Arial" SIZE="3">1024</font>,这就是下一条线的地址。</p>
    <p ALIGN="JUSTIFY">因此,当直接向页面内存中着色时,一般用<font
    FACE="Arial" SIZE="3">IDirectDrawSurface3::Lock</font>(或<font FACE="Arial" SIZE="3">IDirectDrawSurface3::GetDC</font>)方法返回的<font
    FACE="Arial" SIZE="3">pitch</font>值。不要认为<font FACE="Arial" SIZE="3">pitch</font>只是基于显示模式的。如果你的应用程序在某些显示器上发生显示混乱,这多半是因为<font
    FACE="Arial" SIZE="3">pitch</font>使用错误造成的。 <font FACE="Arial" SIZE="3"></p>
    </font><hr>
  </ol>
  <b><p></font><font FACE="黑体" SIZE="3">4、<a name="关键色">关键色</a></p>
  </font></b><font SIZE="3"><p align="right"></font><a href="#目录"><font FACE="宋体"
  SIZE="3">返回目录</font></a></p>
  <font FACE="宋体" SIZE="3"><ol>
    <font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>支持带源或目标关键色的<font
    FACE="Arial" SIZE="3">Blit</font>操作和覆盖页面。这个关键色可以是单个的颜色值,也可以是一个颜色范围。要得到关于关键色的详细介绍,请参阅前一章的“关键色”一节。通过调用<font
    FACE="Arial" SIZE="3">IDirectDrawSurface3::SetColorKey</font>函数,可以为一个页面设置一个关键色。</p>
    <p ALIGN="JUSTIFY">源关键色(<font FACE="Arial" SIZE="3">Source color key</font>)指定了一个颜色或一个颜色范围,在<font
    FACE="Arial" SIZE="3">Blit</font>过程中,不被复制,或在覆盖页面中,对目标层来说是不可见的。目标关键色(<font
    FACE="Arial" SIZE="3">Destination color key</font>)指定了一个颜色或一个颜色范围,在<font
    FACE="Arial" SIZE="3">Blit</font>过程中,将被替换,或在覆盖页面中,将被目标层所覆盖。源与目标关键色的一个显著的区别就是:源关键色指定了在源页面上什么是可以读和什么是不可以读的;目标关键色指定了在目标页面上,什么是可以写和什么是不可以写的。如果目标页面有关键色,则只有那些符合关键色的像素可以被改变(在<font
    FACE="Arial" SIZE="3">Blit</font>操作中),或被覆盖(在覆盖页面中)。</p>
    <p ALIGN="JUSTIFY">除了与<font FACE="Arial" SIZE="3">Blit</font>相关的关键色之外,覆盖页面还可以使用覆盖关键色。要得到更多信息,请参阅“覆盖关键色”。</p>
    <p ALIGN="JUSTIFY">有些硬件只支持<font FACE="Arial" SIZE="3">YUV</font>像素数据的颜色范围。<font
    FACE="Arial" SIZE="3">YUV</font>数据通常用于视频显示的像素格式,并且其透明背景不是一个特定颜色而导致在数值转换过程中发生错误。所以,只要可能,就应该将数据写到一个特定的透明颜色上,而不管它是什么像素格式。</p>
    <p ALIGN="JUSTIFY">关键色是按页面的像素格式指定的。如果一个页面是调色板格式,关键色是以一个调色板索引或一组调色板索引指定的。如果页面的像素格式是按<font
    FACE="Arial" SIZE="3">FOURCC</font>代码指定的,描述了一个<font FACE="Arial"
    SIZE="3">YUV</font>格式,<font FACE="Arial" SIZE="3">YUV</font>关键色是由<font
    FACE="Arial" SIZE="3">DDCOLORKEY</font>结构的<font FACE="Arial" SIZE="3">dwColorSpaceLowValue 
    </font>和<font FACE="Arial" SIZE="3">dwColorSpaceHighValue</font>成员的低三位字节指定的。最低的字节包含<font
    FACE="Arial" SIZE="3">V</font>数据,下一个包含<font FACE="Arial" SIZE="3">U</font>数据,第三个包含<font
    FACE="Arial" SIZE="3">Y</font>数据。<font FACE="Arial" SIZE="3">IDirectDrawSurface3::SetColorKey</font>的<font
    FACE="Arial" SIZE="3">dwFlags</font>参数指定了关键色是用在<font FACE="Arial"
    SIZE="3">Blit</font>操作中还是覆盖页面中,以及它是源还是目标关键色。以下是一些合法的关键色的例子。</p>
    <font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY"
    style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
    FACE="宋体" color="#FFFFFF" size="3">8位调色板模式:</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">//调色板登录项26是关键色。</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceLowValue = 26;</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceHighValue = 26;</font></p>
    <p ALIGN="JUSTIFY"
    style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">24位真彩模式:</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">//(255,128,128)颜色是关键色</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceLowValue = RGBQUAD(255,128,128);</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceHighValue = RGBQUAD(255,128,128);</font></p>
    <p ALIGN="JUSTIFY"
    style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">FourCC YUV模式:</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">//只要Y在100和110之间,并且U或V在50和55之间的的任何一个YUV颜色为透明。</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceLowValue = YUVQUAD(100,50,50);</font></p>
    <p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
    FACE="宋体" color="#FFFFFF" size="3">dwColorSpaceHighValue = YUVQUAD(110,55,55);</font></p>
  </ol>
  <hr>
  <p></font><b><font FACE="黑体" SIZE="3">5、<a name="像素格式">像素格式</a></font><font
  FACE="宋体" SIZE="3"></p>
  </b><font SIZE="3"><p align="right"></font><a href="#目录">返回目录</a></p>
</blockquote>

<blockquote>
  <blockquote>
    <p ALIGN="JUSTIFY">像素格式规定了页面内存中的每个像素的数据是怎样进行编码的。<font
    FACE="Arial" SIZE="3">DirectDraw</font>使用<font FACE="Arial" SIZE="3">DDPIXELFORMAT</font>结构来描述各式各样的像素格式(请参阅“<font
    FACE="Arial" SIZE="3">DirectDraw</font>参考手册中关于该结构的帮助”)。<font
    FACE="Arial" SIZE="3">DDPIXELFORMAT</font>结构中的成员包含了各种像素格式相互区别的以下几个显著的特点:</p>
  </blockquote>
</blockquote>

<blockquote>
  <blockquote>
    <ul>
      <li>像素格式是基于调色板的还是非调色板式的</li>
      <li>如果是非调色板式,像素是<font FACE="Arial" SIZE="3">RGB</font>,还是<font
        FACE="Arial" SIZE="3">YUV</font>格式</li>
      <li>位深度</li>
      <li>位掩码</li>
    </ul>
  </blockquote>
</blockquote>

<blockquote>
  <blockquote>
    <p ALIGN="JUSTIFY">通过调用<font FACE="Arial" SIZE="3">IDirectDrawSurface3::GetPixelFormat</font>函数,你可以获得关于当前页面的像素格式的信息。</p>
  </blockquote>
  <hr>
</blockquote>

<blockquote>

⌨️ 快捷键说明

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