zoukankan      html  css  js  c++  java
  • 3D游戏从头编之D3D(5)

    灯光

    一、环境光(Ambient Light)
      最简单的一种光,只有一个颜色值,它为世界提供一个基本的照明亮度。没有方向、没有衰减,也不会产生阴影。

    二、点光(Point Light)
      从一个点向周围均匀发射的光,有最大的照明范围,亮度随距离衰减,最明显的一个例子就是我们家里用的灯泡。
      引用 3D游戏从头编之D3D(5) - 迷茫 - bendanchenzhicheng的博客 

    三、方向光(Directional Light)
      方向光是一组没有衰减的平行光,类似太阳光的效果。
      引用 3D游戏从头编之D3D(5) - 迷茫 - bendanchenzhicheng的博客 

    四、聚光灯(Spot Light)
      最复杂的一种灯,有光源点位置、有方向、有范围、有发光的内径和外径,光照强度还会随距离衰减。类似的例子是电筒。
       引用 3D游戏从头编之D3D(5) - 迷茫 - bendanchenzhicheng的博客

      在D3D中用结构D3DLIGHT8来设置灯光的属性,不同类型的灯光需要指定不同的属性,下面对这些属性做个简要说明:

      typedef struct _D3DLIGHT8 {
        D3DLIGHTTYPE Type;     // 灯光类型
        D3DCOLORVALUE Diffuse;   // 光的漫反射颜色
        D3DCOLORVALUE Specular;  // 镜面反射颜色
        D3DCOLORVALUE Ambient;   // 总体颜色(相当于环境光)
        D3DVECTOR Position;    // 光源在空间中的位置(方向光不需要设置)
        D3DVECTOR Direction;    // 光照的方向(只对方向光和聚光灯有效)
        float Range;        // 光照的的最大距离,在这个距离以外将不起作用
        float Falloff;       // 聚光灯内圈到外圈的衰减值,一般为1.0
        float Attenuation0;    // 距离衰减系数,通常为0.0
        float Attenuation1;    // 距离衰减系数,通常为一个常数1.0
        float Attenuation2;    // 距离衰减系数,通常为0.0
        float Theta;        // 聚光灯的内圈大小(单位:弧度)
        float Phi;         // 聚光灯的外圈大小(单位:弧度)
      } D3DLIGHT8;

      灯光的属性设置好后,需要把这个灯光加入到场景中,使用下面的程序做这件事情。

      // 要让渲染的时候灯光起作用,运行这条命令
      g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );

      // 设置0号灯为我们设置的灯
      g_pd3dDevice->SetLight( 0, &light );

      // 打开0号灯光
      g_pd3dDevice->LightEnable( 0, TRUE );

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/bendanchenzhicheng/p/2177720.html
Copyright © 2011-2022 走看看