CG之refract函数简单实现

CG的refract函数定义如下:

refract(I, N, eta)  根据入射光线方向I,表面法向量N和折射相对系数eta,计算折射向量。如果对给定的eta,I和N之间的角度太大,返回(0,0,0)。只对三元向量有效。

它的一个简单实现如下:

1 float3 refract(float3 i, float3 n, float eta)
2 {
3     float cosi = dot(-i, n);
4     float cost2 = 1 - eta * eta * (1 - cosi * cosi);
5     float3 t = eta * i + n * (eta * cosi - sqrt(cost2));
6     return t * (float3)(cost2 > 0);
7 }

折射向量的求法如下:

转载请注明出处: http://www.cnblogs.com/jietian331/p/5564427.html

时间: 2024-10-09 16:06:04

CG之refract函数简单实现的相关文章

tchar 输入输出类 和 string 类 函数简单说明 总结各种前缀后缀

标准输入输出printf类_tprintf : 类同printf_tprintf_l : 类同printf, 但是"_l"表示第二个参数是一个locale.locale是操作系统对语言设定的参数, 这个会影响ANSI字符的语言识别, 在Unicode下应该是无差别的_tprintf_s : 类图printf, 但是和_tprintf相比, _tprintf_s多会做一些检查工作.如果你的"format string"是动态的, 这个能帮助你._tprintf_s_l

java8 函数引用 -> 一种利用现有函数简单推理为函数表达式即简化的函数表达式

// ***java8 函数引用 -> 一种利用现有函数简单推理为函数表达式即简化的函数表达式(省去了参数,-> 符号,只有更简化函数表达式体),[从而生成对应接口实现类默认的抽象方法体].*** // 函数表达式可以推理成java的匿名类,那么现有的函数就可以推理成函数表达式.只要现有的函数符合要生成的方法的签名即可(入参,返回值,函数名无关紧要) // 参数和返回值有编译器从上下文获得.从而省去了参数.只提供方法名就可以. // 所以(arg) -> {} 函数表达式,可以简化为利用

Oracle的REGEXP_INSTR函数简单使用方法

REGEXP_INSTR函数让你搜索一个正則表達式模式字符串. 函数使用输入字符集定义的字符进行字符串的计算. 它返回一个整数,指示開始或结束匹配的子位置.这取决于return_option參数的值.假设没有找到匹配.则函数返回0. 语法 Oracle数据库中的REGEXP_INSTR函数的语法是: REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_option [, match_parameter ]

闭包 构建函数 简单工厂模式

今天收获比较多,仿佛无意中打通了七筋八脉,想通了一些原理性的东西.对js有了更深的理解. 首先说说闭包,闭包在我们实际开发中处处被用到,那个它到底是个什么东西呢? var user=(function(){ var USER={ name:"mapleTao", password:"123456" } return { getName:function(){ return USER.name; }, getPassword:function(){ return US

C语言。自定义函数简单版

#include <stdio.h> //函数声明 void sayHi(); //函数实现 void sayHI() { printf("大家好!!\n"); } int main(int argc, const char * argv[]) { // 函数调用 sayHI(); return 0; } 这基本是最简单的函数了, 运行之后是这样 sayHI()就是我自己定义的函数了. 这个是最简单的 .  下面我再举一个例子. #include <stdio.h&g

Oracle的REGEXP_INSTR函数简单用法

REGEXP_INSTR函数让你搜索一个正则表达式模式字符串.函数使用输入字符集定义的字符进行字符串的计算. 它返回一个整数,指示开始或结束匹配的子位置,这取决于return_option参数的值.如果没有找到匹配,则函数返回0. 语法 Oracle数据库中的REGEXP_INSTR函数的语法是: REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_option [, match_parameter ] ]

VC API常用函数简单例子大全[转]

第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCSTR lpWindowName); 第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗口的类名或窗口的标题就可以了,没有的那个就用NULL代替. 比如现在有一个窗口名为"无标题.txt - 记事本"的记事本程序.那么我就可以用上面的函数获得这个

javascrip函数简单介绍

JavaScript 函数定义JavaScript 使用关键字 function 定义函数.函数可以通过声明定义,也可以是一个表达式.函数声明在之前的教程中,你已经了解了函数声明的语法 :function functionName(parameters) { 执行的代码}函数声明后不会立即执行,会在我们需要的时候调用到. 函数表达式JavaScript 函数可以通过一个表达式定义.函数表达式可以存储在变量中:实例var x = function (a, b) {return a * b}; 在函

Oracle中Table函数简单应用实例

说明 表函数可接受查询语句或游标作为输入参数,并可输出多行数据. 该函数可以平行执行,并可持续输出数据流,被称作管道式输出. 应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表. 优势 1.一些复杂的公用信息,但是建立视图又实现不了,此时可以考虑使用管道输出. 2.涉及运算较多,写个简单SQL实现起来较为麻烦,用table实现就ok了 实例 1.前期工作: create or replace type ty_row as object ( col1 varchar2(36), col