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

HLSL学习实践记录: RenderMonkey实现(三):天空盒子

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

我们在游戏里看到的天空实际上就是一个天空盒子,一般可能是圆球状的,然后贴上各种天空贴图,从而模拟一种天空的效果。

当然,现在已经很少有游戏做那种单一的静态天空盒子,这样天空明显比较死板,而且无论在改场景内待多久,天空盒子都不会改变,没有一种时间流逝的感觉。

这里我尝试这两种效果,都是用Pixel Shader实现的。一个是云飘动,另一个是天空变化。

不知道真正游戏开发中是如何做这两个效果的,我这里纯粹是自己胡乱猜想,还望有经验的前辈指导下~

之前天空盒子模型和贴图的载入流程就不记录了,按照之前的博文加旗帜那样就可以了。

第一个云飘动其实很简单,对于一个蓝天白云的背景的天空盒子,云飘动就是让背景贴图动起来。

随着时间的推移增加贴图的x坐标,等于让贴图移动起来。

sampler2D sky;
float ftime;

struct PS_INPUT
{
   float2 TexCoord : TEXCOORD0;
};

float4 ps_main(PS_INPUT Input) : COLOR0
{   
   
   Input.TexCoord.x +=0.01*ftime;
  
   return tex2D( sky, Input.TexCoord ); 
}

第二个效果是天空渐变,比如从白天变到黑夜,因而这里准备了两张贴图。

先取两个采样纹理的颜色,再使用lerp函数将两种颜色混合,混合度由第三个参数决定,从0到1, 对应结果就是完全不添加第二种颜色到完全表现为第二种颜色。

因而只要动态改变第三个参数的值,就能让天空的背景处于一种动态混合的形态,从而完成从白天到黑夜的自然转变。

sampler2D sky;
sampler2D night;
float ftime;

struct PS_INPUT
{
   float2 TexCoord : TEXCOORD0;
};

float4 ps_main(PS_INPUT Input) : COLOR0
{   
    float4 Color = tex2D(sky, Input.TexCoord);
    float4 Color2 = tex2D(night, Input.TexCoord);
    float test = 0.05f*ftime;
    if (test >1.0f){
       test=1.0f;
       }    
    float4 finalColor = lerp(Color,Color2,test);
    
    return finalColor;
   }


转载于:https://my.oschina.net/zhudibrian/blog/191174

相关文章:

  • eclipse安装颜色主题,个性化你的IDE,让你的IDE焕然一新
  • extjs form 取值 赋值 重置
  • linux网络编程涉及的函数
  • coffeescript 基本语法
  • ASP.NET MVC3-第02节-添加一个Controller (C#)
  • for test
  • What’s New in Python 2.7 — Python 3.4.0b2 documentation
  • C# 集合类 Array,Arraylist,List,Hashtable,Dictionary...
  • 转观念 变架构 补短板——析科华恒盛向数据中心方案商转型
  • spring security3.x学习(5)_如何拦截用户请求
  • php.ini中文解释
  • ubuntu下gvim字体设置
  • 《JAVA面向对象的特征 》
  • MySQL安装后设置root 密码
  • 对《神奇的C语言》文中例子 5 代码的分析讨论
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【翻译】babel对TC39装饰器草案的实现
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CSS 专业技巧
  • idea + plantuml 画流程图
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 多线程编程之:notify 和 wait 用法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • mysql innodb 索引使用指南
  • node学习系列之简单文件上传
  • OSS Web直传 (文件图片)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • underscore源码剖析之整体架构
  • Vue UI框架库开发介绍
  • Yii源码解读-服务定位器(Service Locator)
  • 第十八天-企业应用架构模式-基本模式
  • 反思总结然后整装待发
  • 聊聊sentinel的DegradeSlot
  • 通过几道题目学习二叉搜索树
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Hibernate主键生成策略及选择
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​批处理文件中的errorlevel用法
  • $ git push -u origin master 推送到远程库出错
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • *** 2003
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET导入Excel数据
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • @EnableConfigurationProperties注解使用
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [ICCV2017]Neural Person Search Machines
  • [Spring] Spring Boot 生态