当前位置: 首页 > news >正文

光照系统可以工作了。

光照系统可以工作了,新增加一个Const Buffer专用于传递光照相关的参数:ILightingEnvState.

做光照相对D9来说简单了许多。不需要任何的setShaderParamter之类的调用了。

Simple.Lighting的shade Node 和用于光照的shader lib如下:

libLighting.hlsl:

struct xLightDesc
{
float4 m_Diffuse;
float4 m_Speculer;
float4 m_Position;
float4 m_dir;
};

cbuffer xLightState
{
int4 nLight;
xLightDesc m_Light[8];
}

float4 Phong_Lighting(float3 vNormal , float3 wPosition , float3 eyePosition)
{
float4 vTotal = float4(0.0f,0.0f,0.0f , 0.0f);
for(int i = 0 ; i < nLight.x ; i ++ )
{
xLightDesc _desc = m_Light[i];
float3 LightDirection = _desc.m_Position.xyz - wPosition;

float3 fvLightDirection = normalize( LightDirection );
float3 fvNormal = normalize( vNormal );
float fNDotL = dot( fvNormal, fvLightDirection );

float3 fvReflection = normalize( ( ( 2.0f * fvNormal ) * ( fNDotL ) ) - fvLightDirection );
float3 fvViewDirection = normalize( eyePosition - wPosition);
float fRDotV = max( 0.0f, dot( fvReflection, fvViewDirection ) );

float4 fvTotalAmbient = float4(0.0f,0.0f,0.0f,1.0f);
float4 fvTotalDiffuse = fNDotL * _desc.m_Diffuse;
float4 fvTotalSpecular = float4(_desc.m_Speculer.xyz , 1.0f) * pow( fRDotV, _desc.m_Speculer.w );

vTotal += ( saturate( fvTotalAmbient + fvTotalDiffuse + fvTotalSpecular ) );
}
return vTotal;
}

//Simple.Lighting.hlsl

///{{Slot = Simple_Lighting
Input
{
float4 Color : COLOR0;
float4 wNormal : WNORMAL;
float4 wPosition : WPOSITION;
}

Output
{
float4 color: COLOR0;
}
///}}


///>>Import = libLighting

///{{SourceCode
float4 Simple_Lighting(float4 _Color , float4 wNormal , float4 wPosition)
{
float4 eyePositon = float4(0.0f,0.0f,0.0f,1.0f);
return _Color * Phong_Lighting(wNormal.xyz , wPosition.xyz , eyePositon.xyz );
}
///}}

截个图留念一下。

相关文章:

  • 组播vlan_单播地址、组播地址、广播地址的优缺点
  • 打印表单_重磅更新 | 表单提交校验逻辑、轮播图纷纷上线
  • 期待能好好好好好好的睡一觉。
  • (转)编辑寄语:因为爱心,所以美丽
  • vue 前端设置允许跨域_Vue3.X脚手架项目设置proxy前端跨域
  • SSIS循环导入多个同表结构不同表明的excel
  • docker logs写入文件_Docker 日志的 10 大陷阱
  • long转string mybatis_mybatis split sring(mybatis 返回string)
  • X3DAudio
  • shell 删除了hdfs 文件_Hadoop 系列(六)—— HDFS 常用 Shell 命令
  • IE 里面的activeX控件的打印预览问题
  • mysql特定权限_Mysql中设置指定IP的特定用户及特定权限
  • 紧急寻人:北京工商大学的李阳同学
  • centos7 mysql 源码安装_CentOS7下MySQL5.7.13源码编译安装与配置
  • SD 2.0会议期间两个有趣的活动
  • @jsonView过滤属性
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Angular 响应式表单 基础例子
  • Asm.js的简单介绍
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Cookie 在前端中的实践
  • E-HPC支持多队列管理和自动伸缩
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Flex布局到底解决了什么问题
  • Hexo+码云+git快速搭建免费的静态Blog
  • JAVA_NIO系列——Channel和Buffer详解
  • Java编程基础24——递归练习
  • Laravel5.4 Queues队列学习
  • Less 日常用法
  • mac修复ab及siege安装
  • Python学习之路13-记分
  • STAR法则
  • 阿里云Kubernetes容器服务上体验Knative
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记一次删除Git记录中的大文件的过程
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • UI设计初学者应该如何入门?
  • 进程与线程(三)——进程/线程间通信
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (30)数组元素和与数字和的绝对差
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (九)c52学习之旅-定时器
  • (四)图像的%2线性拉伸
  • (算法)Game
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)JAVA中的堆栈
  • *Django中的Ajax 纯js的书写样式1
  • .bat文件调用java类的main方法
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据