原文:Directx教程(23) 简单的光照模型(2)

   在工程myTutorialD3D11_16中,我在文件light.vs中定义了一个材质光源属性常量缓冲。

//const buffer最好为4 float的倍数,否则创建const buffer会fail
cbuffer LightMaterialBuffer
{
    float4 lightPosition; //光源位置
    float4 lightColor;  //光源颜色
    float4 globalAmbient; //光源的环境光反射系数
    float4 cameraPosition; //摄像机的位置
    float4 Ke;  //材质的自发光
    float4 Ka;  //材质的环境光系数
    float4 Kd;  //材质的漫反射系数
    float4 Ks;  //材质的高光系数
    float3 lightDirection; //平行光方向
    float shininess; //高光指数
   
};

    通过定义这个const buffer,我们可以在lightShaderClass中,来设置顶点材质和光源的各种属性。

同时,我也修改了lightShaderClass类中的Render和SetShaderParameters函数接口,以便传入各种参数。

bool Render(ID3D11DeviceContext*, int, D3DXMATRIX, D3DXMATRIX, D3DXMATRIX, D3DXVECTOR4, D3DXVECTOR4, D3DXVECTOR4,
    D3DXVECTOR4, D3DXVECTOR4,  D3DXVECTOR4,  D3DXVECTOR4,  D3DXVECTOR4, D3DXVECTOR3, float);
bool SetShaderParameters(ID3D11DeviceContext*, D3DXMATRIX, D3DXMATRIX, D3DXMATRIX,  D3DXVECTOR4, D3DXVECTOR4, D3DXVECTOR4,
    D3DXVECTOR4, D3DXVECTOR4,  D3DXVECTOR4,  D3DXVECTOR4,  D3DXVECTOR4, D3DXVECTOR3, float);

    现在来看,这两个函数参数很多,非常丑陋,在后面的工程中,我会只传入摄像机位置,其它的参数都是直接在colorShaderClass中赋值。

    程序执行后的效果如下:

     不过可能是我的cubeModelClass中物体的法向定义问题,cube的后、左、下面都没能显示出来。在下一篇日志中,我会重新定义CubeModelClass中的顶点法向。

完整的代码请参考:

工程文件myTutorialD3D11_16

代码下载:

http://files.cnblogs.com/mikewolf2002/myTutorialD3D11.zip

 

 

Directx教程(23) 简单的光照模型(2)的更多相关文章

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

    原文:Directx教程(29) 简单的光照模型(8)      现在我们新建一个工程myTutorialD3D_23,在这个工程中,对前面一章的代码进行一些整理: 1.我们在顶点属性中增加材质的的漫 ...

  2. Directx教程(28) 简单的光照模型(7)

    原文:Directx教程(28) 简单的光照模型(7)        现实生活中的点光源都是随着距离衰减的,比如一个电灯泡在近处会照的很亮,远处光线就很弱.本节中我们在前面光公式的基础上,再给漫反射和 ...

  3. Directx教程(27) 简单的光照模型(6)

    原文:Directx教程(27) 简单的光照模型(6)      从myTutorialD3D11_15到myTutorialD3D11_19的工程中,我们都只有一个光源,光源的位置在LightCla ...

  4. Directx教程(26) 简单的光照模型(5)

    原文:Directx教程(26) 简单的光照模型(5)     在前面的工程中,我们都是在vs中实现顶点光照计算,然后再把顶点颜色传到ps中.本章中我们尝试fragment光照(或者说叫ps光照),在 ...

  5. Directx教程(25) 简单的光照模型(4)

    原文:Directx教程(25) 简单的光照模型(4)      在本篇日志中,我们尝试用不带衰减的点光源来计算漫反射颜色.     前面的三个工程,我们都用的是方向光源(directional li ...

  6. Directx教程(24) 简单的光照模型(3)

    原文:Directx教程(24) 简单的光照模型(3)      在工程myTutorialD3D11_17中,我们重新定义我们的cube顶点法向,每个三角形面的顶点法向都是和这个三角形的面法向是一致 ...

  7. Directx教程(22) 简单的光照模型(1)

    原文:Directx教程(22) 简单的光照模型(1)      在前面的教程中,我们在顶点属性中直接给顶点赋颜色,这样生成的三维物体缺乏真实感,如下图中两个立方体,左边的是通过光照生成物体表面颜色的 ...

  8. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...

  9. [译]Vulkan教程(23)暂存buffer

    [译]Vulkan教程(23)暂存buffer Staging buffer 暂存buffer Introduction 入门 The vertex buffer we have right now ...

随机推荐

  1. Nodejs Express目录结构

    原文  http://www.leixuesong.cn/1508 Express是一个基于Node.js平台的极简.灵活的web应用开发框架.在前面我们已经详细介绍了Express的安装,下面详细讲 ...

  2. php四种文件加载语句

    https://mp.weixin.qq.com/s/Wsn4grDRxVIgMfu__E_oWQ 1.include 2.require 3.include_once 4.require_once ...

  3. mysql 对数据库操作的常用sql语句

    1.查看创建某个数据库的 创建语句 show create database mysql 这个sql语句的意思是 展示创建名为mysql的数据库的 语句.执行之后如下图所示 仿造上面这个创建语句 创建 ...

  4. OpenCV2.4和OpenCV3之间函数的转变

    OpenCV3里面没有自带opencv-contrib,需要自己手动安装,也很简单,直接在命令行里面打:pip install opencv-contrib-python 就能安装好了 OpenCV3 ...

  5. HDU6135 拓展KMP模板

    emmm...模板,虽然每太搞懂 #include <iostream> #include <cstdio> #include <string.h> #pragma ...

  6. 其他pyton笔记

    #小部分老男孩pyton课程 #所有脚本第一句话都要写解释以下脚本是用什么解释器 #!/usr/bin/env python #语言设置为:简体中文 #_*_coding:utf-8_*_ ##### ...

  7. JavaScript中[]+[] 、[]+{}、{}+[]、{}+{}的结果分析

    看到这样一个问题:{} + [] 的结果是多少? 一脸懵逼.. 于是在chrome控制台运行 {} + [] 和用 console.log({} + []) 输出,发现结果不一样.. 于是,把各种可能 ...

  8. neo4j遍历和图算法

    阅读更多 这篇blog主要和大家分享一下neo4j中是如何对节点进行遍历,和其中集成的图论的一些常用算法. 遍历 http://docs.neo4j.org.cn/tutorials-java-emb ...

  9. ant详细介绍

      Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令 ...

  10. Django与HTML业务基本结合

    app里都有migrations文件 app: migrations 数据修改表结构,数据库操作记录 admin Django为我们提供后台管理 apps 配置当前app models ORM,写指定 ...