• Directx教程(29) 简单的光照模型(8)


         现在我们新建一个工程myTutorialD3D_23,在这个工程中,对前面一章的代码进行一些整理:

    1、我们在顶点属性中增加材质的的漫反射系数和高光系数,前面我们放在一个光照材质结构中,这样我们能够比较灵活的定义不同顶点的材质属性,当然这也增加了顶点缓冲的大小。

    struct VertexType
    {
    D3DXVECTOR3 position;
    D3DXVECTOR3 normal; //法向
    D3DXVECTOR4 Kd; //材质漫反射系数
    D3DXVECTOR4 Ks; //材质的高光系数
    };


    2、在common.h定义三个结构,分别表示光照、材质和摄像机,它们分别和ps中三个常量缓冲相对应。

    common.h

    struct LightBufferType
    {
    D3DXVECTOR4 lightPosition[NUM_LIGHTS]; //光源位置
    D3DXVECTOR4 lightColor[NUM_LIGHTS]; //光源颜色
    D3DXVECTOR4 globalAmbient[NUM_LIGHTS]; //光源的环境光反射系数
    D3DXVECTOR4 attenuation[NUM_LIGHTS]; //衰减系数,x,y,z对应常量,线性和二次系数
    D3DXVECTOR4 spotlight[NUM_LIGHTS]; //对于spotlight,x,y分别存储内和外角cos值
    D3DXVECTOR3 lightDirection[NUM_LIGHTS]; //平行光方向
    float shininess[NUM_LIGHTS]; //高光指数

    };

    struct MaterialBufferType
    {
    D3DXVECTOR4 Ke; //材质的自发光
    D3DXVECTOR4 Ka; //材质的环境光系数
    };

    struct CameraBufferType
    {
    D3DXVECTOR4 cameraPosition; //摄像机的位置
    };

    相应的light.ps以及各个model类也要发生一些变化。

    程序执行后的最终效果如下:

    image

    完整的代码请参考:

    工程文件myTutorialD3D11_23

    代码下载:

    https://files.cnblogs.com/mikewolf2002/myTutorialD3D11_2345.zip

         接下来的myTutorialD3D11_24、myTutorialD3D11_25分别是简单地形和简单水面的光照版本。代码是myTutorialD3D11_23和myTutorialD3D11_13、myTutorialD3D11_14的组合。

        在这两个工程中,我在GraphicsClass的Render函数中增加dt,以便动态改变光源位置。

    myTutorialD3D11_24的程序执行效果如下,因为有2个光源,且都有spot效果,一个光源位置还会一直转动,所以可以看到明暗的变化:

    image

    工程 myTutorialD3D11_25的效果如下:

    image

     

    完整的代码请参考:

    工程文件myTutorialD3D11_24、 myTutorialD3D11_25

    代码下载:

    https://files.cnblogs.com/mikewolf2002/myTutorialD3D11_2345.zip

  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2435291.html
Copyright © 2020-2023  润新知