• DirectX 龙书 画镜子 1


     首先把一些概念强化一下


    各种Buffer,DX里面有TargetBuffer,ZBuffer和StencilBuffer,在创建Device时有一个参数是D3DPRESENT_PARAMETERS结构对象,这个结构里面有一些字段在此提出来再记一下
    D3DPRESENT_PARAMETERS d3dpp;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;    
    // 这个字段值是表示要使用什么格式的TargetBuffer,TargetBuffer存储的是颜色值,所以它的格式一般是说明ARGB各占多少位,详细请看MSDN

    d3dpp.EnableAutoDepthStencil = TRUE; 
    // 这个字段表示打不打算在程序中使用ZBuffer和StencilBuffer,由于这两个buffer是使用同一段内存,所以这个参数就表示,要么两个都用,要么两个都不用(后面还可以单独设置要不要使用某一个)
    // 再记一下,targetBuffer就是backbuffer,后面,还有MSDN上面都说"画"backbuffer,其实就是targetbuffer.
    // zbuffer & stencilbuffer 还要设置到底要不要在程序中使用,而backbuffer却不要设置,因为它一定是要使用的,在显示器上显示的东东就是backbuffer里面的内容

    d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;    
    // zbuffer & stencilbuffer共用一段内容,这个字段就是设置zbuffer & stencilbuffer各占多少个字节

    Device->Clear()函数的第三个参数就要明确指定要清理哪些buffer.
    下面开始画东西.

         g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, D3DCOLOR_XRGB(200,200,200), 1.0f, 0);
         g_pd3dDevice->BeginScene();
              DX是在这个地方画东西的
         g_pd3dDevice->EndScene();
         g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
     
    OK.我把这些东西用自己的理解语言整理一下:<^_^>
     
    先想像一下,有三个面
    第一个面叫backbuffer,这个面的大小与你的显示器一样大(大小自己可以设置),这个面的"厚度"为32位(即ARGB占的位数)
    第二个面叫zbuffer,这个面的大小与backbuffer一样大,这个面的"厚度"为24位(D3DFMT_D24S8,即D24),这个面是用来表示一个画面中的物体的层次感,比如,你觉得镜子里面的东西是在镜子"里面的",而阴影是在地的"上面的"。
    第三个面叫stencilbuffer,这个面的大小也是与backbuffer一样大,这个面的"厚度"为8位(D3DFMT_D24S8,即S8),这个面是用来控制,要将哪些像素画到backbuffer中,哪些像素不必画到backbuffer中去。
     
    看画图像部分
    Clear()函数将指定的buffer用指定的值来"清理"(我更喜欢说,用指定的值来填充),第4、5、6个参数分别是指用什么样的值来填充backbuffer、zbuffer、stencilbuffer
    backbuffer的值就是背景颜色值,zbuffer的值是[0 - 1]的区间值,0表示在"表面"(比如影子),1表示在最里面(比如说镜子里面的东西)
    stencilbuffer,到目前为止,我用到的就是0,1,就是用来作标记
    下面调用BeginScene()表示开始"画"图像
    画完图像后调用EndScene()表示这个buffer(backbuffer & zbuffer & stencilbuffer)画完了
    下面调用Present()把这个画完的buffer送到显示器显示,并将另一个buffer"转换"到当前,下一循环,准备画下一帧图像。
     
    今天先写到这里,下班了。
  • 相关阅读:
    vue----webpack模板----axios请求
    vue-----meta路由元信息
    vue----webpack模板----全局路由守卫
    vue----webpack模板----局部路由守卫
    vue----webpack模板----组件复用解决方法
    vue----webpack模板----编程式导航
    vue----webpack模板----路由跳转的3中方式
    vue----webpack模板----路由传值
    vue----webpack模板----children子路由,路由嵌套
    vue----webpack模板----路由配置项
  • 原文地址:https://www.cnblogs.com/emyueguang/p/2288060.html
Copyright © 2020-2023  润新知