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类也要发生一些变化。
程序执行后的最终效果如下:
完整的代码请参考:
工程文件myTutorialD3D11_23
代码下载:
http://files.cnblogs.com/mikewolf2002/myTutorialD3D11_2345.zip
接下来的myTutorialD3D11_24、myTutorialD3D11_25分别是简单地形和简单水面的光照版本。代码是myTutorialD3D11_23和myTutorialD3D11_13、myTutorialD3D11_14的组合。
在这两个工程中,我在GraphicsClass的Render函数中增加dt,以便动态改变光源位置。
myTutorialD3D11_24的程序执行效果如下,因为有2个光源,且都有spot效果,一个光源位置还会一直转动,所以可以看到明暗的变化:
工程 myTutorialD3D11_25的效果如下:
完整的代码请参考:
工程文件myTutorialD3D11_24、 myTutorialD3D11_25
代码下载:
http://files.cnblogs.com/mikewolf2002/myTutorialD3D11_2345.zip
Directx教程(29) 简单的光照模型(8)的更多相关文章
- Directx教程(28) 简单的光照模型(7)
原文:Directx教程(28) 简单的光照模型(7) 现实生活中的点光源都是随着距离衰减的,比如一个电灯泡在近处会照的很亮,远处光线就很弱.本节中我们在前面光公式的基础上,再给漫反射和 ...
- Directx教程(27) 简单的光照模型(6)
原文:Directx教程(27) 简单的光照模型(6) 从myTutorialD3D11_15到myTutorialD3D11_19的工程中,我们都只有一个光源,光源的位置在LightCla ...
- Directx教程(26) 简单的光照模型(5)
原文:Directx教程(26) 简单的光照模型(5) 在前面的工程中,我们都是在vs中实现顶点光照计算,然后再把顶点颜色传到ps中.本章中我们尝试fragment光照(或者说叫ps光照),在 ...
- Directx教程(25) 简单的光照模型(4)
原文:Directx教程(25) 简单的光照模型(4) 在本篇日志中,我们尝试用不带衰减的点光源来计算漫反射颜色. 前面的三个工程,我们都用的是方向光源(directional li ...
- Directx教程(24) 简单的光照模型(3)
原文:Directx教程(24) 简单的光照模型(3) 在工程myTutorialD3D11_17中,我们重新定义我们的cube顶点法向,每个三角形面的顶点法向都是和这个三角形的面法向是一致 ...
- Directx教程(23) 简单的光照模型(2)
原文:Directx教程(23) 简单的光照模型(2) 在工程myTutorialD3D11_16中,我在文件light.vs中定义了一个材质光源属性常量缓冲. //const buffer最好 ...
- Directx教程(22) 简单的光照模型(1)
原文:Directx教程(22) 简单的光照模型(1) 在前面的教程中,我们在顶点属性中直接给顶点赋颜色,这样生成的三维物体缺乏真实感,如下图中两个立方体,左边的是通过光照生成物体表面颜色的 ...
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
- [译]Vulkan教程(29)组合的Image采样器
[译]Vulkan教程(29)组合的Image采样器 Combined image sampler 组合的image采样器 Introduction 入门 We looked at descripto ...
随机推荐
- BZOJ 2165: 大楼
Time Limit: 40 Sec Memory Limit: 259 MB Submit: 957 Solved: 353 [Submit][Status][Discuss] Descriptio ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
1 2{<HeadFirst设计模式>工厂模式之工厂方法 } 3{ 产品类 } 4{ 编译工具 :Delphi20 ...
- redis教程(三)-----redis缓存雪崩、缓存穿透、缓存预热
缓存雪崩 概念 缓存雪崩是由于原有缓存失效(过期),新缓存未到期间.所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机.从而形成一系列连锁反应,造成整个系统崩溃. 解决 ...
- 原 JEECMS导入IDEA进行二次开发图文教程
JEECMS导入IDEA进行二次开发图文教程 2017年05月15日 17:03:53 Swain_Ho 阅读数 3257 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
- 【DM8168学习笔记2】DM8168 EZSDK 结构
1 2 3 4 5
- BZOJ1491:1491: [NOI2007]社交网络
1491: [NOI2007]社交网络 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2204 Solved: 1175[Submit][Status ...
- Luogu P1530 分数化小数 Fractions to Decimals(模拟)
P1530 分数化小数 Fractions to Decimals 题意 题目描述 写一个程序,输入一个形如\(N/D\)的分数(\(N\)是分子,\(D\)是分母),输出它的小数形式.如果小数有循环 ...
- c++设计模式:策略模式
1.主要思想:例如针对不同的算法,创建不同的类. #include <iostream> using namespace std; // The abstract strategy cla ...
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...
- ES6学习笔记之字符串的扩展
字符串的for of ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. const str='abcd'; for(let s of str){ console.log(s ...