Ogre的Ocean例子理解

今天把Ogre的Ocean的Shader部分代码全部看完了,总结如下:

1.在VS中通过叠加两个正弦函数计算每个顶点处的高度。

2.既然构建了顶点的位置,那么它的切空间也是不一样的,因此在VS中通过偏微分的方法计算其法线、副法线、切线构成切线空间。

3.在PS中计算发射向量,采样立方体发射贴图。

4.PS中视线方向和法线点积值决定水面颜色在深浅。

5.菲涅尔系数决定水面颜色和反射颜色比例,决定最终颜色。

时间: 2024-08-27 22:31:25

Ogre的Ocean例子理解的相关文章

一个例子理解threadLocal用法

ThreadLocal可以使对象达到线程隔离的目的.话不多说直接上代码: /** * 一个例子理解threadLocal * * 一个单例模式的类 */ public class SingleThreadLocalTest { private static SingleThreadLocalTest single = new SingleThreadLocalTest(); private ThreadLocal<String> threadLocal = new ThreadLocal<

用最简单的例子理解适配器模式(Adapter Pattern)

中国足球的水平虽然不高,但实际上,在每个城市会有一批足球爱好者,他们踢球.看球.懂球.有这样的2个足球爱好者,一个是左脚选手,另一个是右脚选手. public class PlayWithLeft { public void Play() { Console.WriteLine("我是左脚选手"); } } public class PlayWitRight { public void Play() { Console.WriteLine("我是右脚选手"); }

用一个实际例子理解Docker volume工作原理

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,只不过已经被读写层中该文件的副本所隐藏. 当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失.在Docker中,只读

[PY3]——一个例子理解多线程和daemon

理解 (今天纠结已久,多谢junqi大大帮助理解,一语总结便解心头疑惑)(下面几点总结基本就是我们的对话) 1. 进程就相当于一个机器,多进程就相当于有多个机器在同时运行,多线程是多个任务在同一机器上交替运行,你用一段时间,我用一段时间. 2. 所以进程和线程没有必然联系. 3. 但是不管进程还是线程,一般都是和任务绑定在一起的,任务结束,销毁进程和线程. 4. 如果将进程比喻成一台机器,daemon理解为守护这台机器的东西,daemon守护一旦结束,机器这个进程就down. 5. 可以这样说,

用最简单的例子理解对象为Null模式(Null Object Pattern)

所谓的"对象为Null模式",就是要求开发者考虑对象为Null的情况,并设计出在这种情况下的应对方法. 拿"用最简单的例子理解策略模式(Strategy Pattern) "中的例子来说,在我们的客户端程序中只考虑了用户输入1,2,3的情况,如果用户输入其它数字,比如4,就没有一个对应的IBall接口实现类实例产生,于是会报如下的错: 为了应对这种情况,我们专门设计一个类,当用户输入1,2,3以上的数字,就产生该类的实例.该类同样实现IBall接口. public

单例模式(例子理解)+可变参函数

class Logger { public: /** *@brief 获取Logger实例 */ static Logger* Instance() { if (!ms_pInstance) ms_pInstance = new Logger; return ms_pInstance; } /** *@brief 销毁实例 */ static void Destory() { if (ms_pInstance) { delete ms_pInstance; ms_pInstance = null

小例子理解SQL的左连接与右连接

假设有A,B两个表. 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408 -------------------------------------------- 1.left join sql语句如下: select * from

两个例子理解PHP‘引用’

php变量前面加&符号是两个变量同时指向一个地址,如$a = & $b,不同于C,这里$a 和 $b 指向了同一个变量,$a 和$b 在这里是完全相同的. 示例一:php函数前面加&,如下: function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出 $b的值 为1 $a=5; $a=test();//这 条语句会输出 $b的值 为2 $a=&

一个小例子理解js异步加载

前几天笔试某公司有这样一道题.编写一个javascript函数,可以在页面上异步加载js,在加载结束后执行callback,并在IE和chrome下可以执行. 就这个题我写了一个DOM方法异步加载js的例子,可以给对于异步不了解的朋友参考感受一下. 众所周知,js是一种单线程的语言,它的Event Loop机制可以看一下阮一峰的这篇博客,讲解的很好 http://www.ruanyifeng.com/blog/2014/10/event-loop.html 下面看一下我写的例子 1 <!DOCT