原文: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. light oj 1068 数位dp

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...

  2. light oj 1219 树上贪心

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  3. 第15章 RMAN备份 ​

    第15章 RMAN备份 oracle推荐的备份工具是rman(恢复管理器:recovery manager),用操作系统命令执行的备份被称为用户管理的备份.使用rman执行的备份被称为服务器管理备份. ...

  4. Leetcode461Hamming Distance汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y ...

  5. Effective Modern C++  条款1:理解模板型别推导

    成百上千的程序员都在向函数模板传递实参,并拿到了完全满意的结果,而这些程序员中却有很多对这些函数使用的型别是如何被推导出的过程连最模糊的描述都讲不出来. 但是当模板型别推导规则应用于auto语境时,它 ...

  6. iBaties对比hibernate

    翻译至一篇2008年的文章(http://www.javaworld.com/article/2077875/open-source-tools/ibatis--hibernate--and-jpa- ...

  7. Visual Studio 2019 正式发布

    原文链接: https://www.oschina.net/news/105629/vs2019-general-availability 如约而至,微软已于今天推出 Visual Studio 20 ...

  8. java并发系列(五)-----如何正确的关闭一个线程

    正确的关闭一个线程可不是简单的事情,由于线程调度的复杂性以及不可控性(毕竟运行都由操作系统做主),先来了解一下interrupt() 1.interrupt() 根据jdk文档的介绍,如下: inte ...

  9. UvaLive1347

    Programming contests became so popular in the year 2397 that the governor of New Earck — the largest ...

  10. 【扩展推荐】Laravel-ide-helper 高效的 IDE 智能提示插件 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 - Powered by PHPH

    说明# barryvdh/laravel-ide-helper 扩展包能让你的 IDE ( PHPStorm, Sublime ) 实现自动完成.代码智能提示和代码跟踪等功能,大大提高你的开发效率. ...