和 C 的标准函数库类似, Cg 提供了一系列内建的标准函数。这些函数用于执行数学上的通用计算或通用算法(纹理映射等),例如,需要求取入射光线的反射光线方向向量可以使用标准函数库中的 reflect 函数,求取折射光线方向向量可以使用 refract 函数,做矩阵乘法运算时可以使用 mul 函数。

有些函数直接和 GPU 指令相对应,所以执行效率非常高。绝大部分标准函数都被重载过,用于支持不同长度的数组和向量作为输入参数。

Cg 标准函数会随着未来 GPU 硬件的发展而不断优化,所以基于标准函数库写的程序是可以用在以后的 GPU 硬件上的。

Cg 标准函数库主要分为五个部分:

1.        数学函数( Mathematical Functions ) ;

2.        几何函数 (Geometric Functions) ;

3.        纹理映射函数 (Texture Map Functions) ;(作为单独的一章进行讲解)

4.        偏导数函数 (Derivative Functions) ;

5.        调试函数 (Debugging Function) ;

8.4.1 数学函数( Mathematical Functions )

表 4 中列举了 Cg 标准函数库中所有的数学函数,这些数学函数用于执行数学上常用计算,包括:三角函数、幂函数、园函数、向量和矩阵的操作函数。这些函数都被重载,以支持标量数据和不同长度的向量作为输入参数。

函数

功能

abs(x)

返回输入参数的绝对值

acos(x)

反余切函数,输入参数范围为 [-1,1] ,

返回  区间的角度值

all(x)

如果输入参数均不为 0 ,则返回 ture ;

否则返回 flase 。 && 运算

any(x)

输入参数只要有其中一个不为 0 ,则返回 true 。 || 运算

asin(x)

反正弦函数 , 输入参数取值区间为  ,返回角度值范围为 

atan(x)

反正切函数,返回角度值范围为 

atan2(y,x)

计算 y/x 的反正切值。实际上和 atan(x) 函数功能完全一样,至少输入参数不同。 atan(x) = atan2(x, float(1)) 。

ceil(x)

对输入参数向上取整。例如: ceil(float(1.3)) ,其返回值为 2.0

clamp(x,a,b)

如果 x 值小于 a ,则返回 a ;如果 x 值大于 b ,返回 b ;否则,返回 x 。

cos(x)

返回弧度 x 的余弦值。返回值范围为 

cosh(x)

双曲余弦( hyperbolic cosine )函数,计算 x 的双曲余弦值。

cross(A,B)

返回两个三元向量的叉积 (cross product) 。注意,输入参数必须是三元向量!

degrees(x)

输入参数为弧度值 (radians) ,函数将其转换为角度值 (degrees)

determinant(m)

计算矩阵的行列式因子。

dot(A,B)

返回 A 和 B 的点积 (dot product) 。参数 A 和 B 可以是标量,也可以是向量(输入参数方面,点积和叉积函数有很大不同)。

exp(x)

计算  的值, e= 2.71828182845904523536

exp2(x)

计算  的值

floor(x)

对输入参数向下取整。例如 floor(float(1.3)) 返回的值为 1.0 ;但是 floor(float(-1.3)) 返回的值为 -2.0 。该函数与 ceil(x) 函数相对应。

fmod(x,y)

返回 x/y 的余数。如果 y 为 0 ,结果不可预料。

frac(x)

Returns the fractional portion of a scalar or each vector component

frexp(x, out exp)

将浮点数 x 分解为尾数和指数,即

x = m* 2^exp ,返回 m ,并将指数存入 exp 中;如果 x 为 0 ,则尾数和指数都返回 0

isfinite(x)

判断标量或者向量中的每个数据是否是有限数,如果是返回 true ;否则返回 false; 无限的或者非数据 (not-a-number NaN) ,

isinf(x)

判断标量或者向量中的每个数据是否是无限,如果是返回 true ;否则返回 false;

isnan(x)

判断标量或者向量中的每个数据是否是非数据 (not-a-number NaN) ,如果是返回 true ;否则返回 false;

ldexp(x, n)

计算  的值

lerp(a, b, f)

计算  或者  的值。即在下限 a 和上限 b 之间进行插值, f 表示权值。注意,如果 a 和 b 是向量,则权值 f 必须是标量或者等长的向量。

lit(NdotL, NdotH, m)

N 表示法向量; L 表示入射光向量; H 表示半角向量; m 表示高光系数。

函数计算环境光、散射光、镜面光的贡献,返回的 4 元向量:

X 位表示环境光的贡献,总是 1.0 ;

Y 位代表散射光的贡献,如果  ,则为 0 ;否则为 

Z 位代表镜面光的贡献,如果  或者  ,则位 0 ;否则为  ;

W 位始终位 1.0

log(x)

计算  的值, x 必须大于 0

log2(x)

计算  的值, x 必须大于 0

log10(x)

计算  的值, x 必须大于 0

max(a, b)

比较两个标量或等长向量元素,返回最大值。

min(a,b)

比较两个标量或等长向量元素,返回最小值。

modf(x, out ip)

在 Cg Reference Manual 中没有查到

mul(M, N)

计算两个矩阵相乘,如果 M 为 AxB 阶矩阵, N 为 BxC 阶矩阵,则返回 AxC 阶矩阵。下面两个函数为其重载函数。

mul(M, v)

计算矩阵和向量相乘

mul(v, M)

计算向量和矩阵相乘

noise( x)

噪声函数,返回值始终在 0 , 1 之间;对于同样的输入,始终返回相同的值(也就是说,并不是真正意义上的随机噪声)。

pow(x, y)

radians(x)

函数将角度值转换为弧度值

round(x)

Round-to-nearest ,或 closest integer to x 即四舍五入。

rsqrt(x)

X 的反平方根, x 必须大于 0

saturate(x)

如果 x 小于 0 ,返回 0 ;如果 x 大于 1 ,返回 1 ;否则,返回 x

sign(x)

如果 x 大于 0 ,返回 1 ;如果 x 小于 0 ,返回 01 ;否则返回 0 。

sin(x)

输入参数为弧度,计算正弦值,返回值范围为 

sincos(float x, out s, out c)

该函数是同时计算 x 的 sin 值和 cos 值,其中 s=sin(x) , c=cos(x) 。该函数用于“同时需要计算 sin 值和 cos 值的情况”,比分别运算要快很多 !

sinh(x)

计算双曲正弦( hyperbolic sine )值。

smoothstep(min, max, x)

值 x 位于 min 、 max 区间中。如果 x=min ,返回 0 ;如果 x=max ,返回 1 ;如果 x 在两者之间,按照下列公式返回数据:

step(a, x)

如果 x<a ,返回 0 ;否则,返回 1 。

sqrt(x)

求 x 的平方根,  , x 必须大于 0 。

tan(x)

输入参数为弧度,计算正切值

tanh(x)

计算双曲正切值

transpose(M)

M 为矩阵,计算其转置矩阵

4 Cg 标准函数库中的数学函数

8.4.2 几何函数( Geometric Functions )

几何函数,如 表 5 所示,用于执行和解析几何相关的计算,例如根据入射光向量和顶点法向量,求取反射光和折射光方向向量。 Cg 语言标准函数库中有 3 个几何函数会经常被使用到,分别是: normalize 函数,对向量进行归一化; reflect 函数,计算反射光方向向量; refract 函数,计算折射光方向向量。大声呐喊,并要求强烈注意:

1.        着色程序中的向量最好进行归一化之后再使用,否则会出现难以预料的错误;

2.        reflect 函数和 refract 函数都存在以“入射光方向向量”作为输入参数,注意这两个函数中使用的入射光方向向量,是从外指向几何顶点的;平时我们在着色程序中或者在课本上都是将入射光方向向量作为从顶点出发。

函数

功能

distance( pt1, pt2)

两点之间的欧几里德距离( Euclidean distance )

faceforward(N,I,Ng)

如果  ,返回 N ;否则返回 -N 。

length(v)

返回一个向量的模,即 sqrt(dot(v,v))

normalize( v)

归一化向量

reflect(I, N)

根据入射光方向向量 I ,和顶点法向量 N ,计算反射光方向向量。其中 I 和 N 必须被归一化,需要非常注意的是,这个 I 是指向顶点的;函数只对三元向量有效。

refract(I,N,eta)

计算折射向量, I 为入射光线, N 为法向量, eta 为折射系数;其中 I 和 N 必须被归一化,如果 I 和 N 之间的夹角太大,则返回( 0 , 0 , 0 ),也就是没有折射光线; I 是指向顶点的;函数只对三元向量有效。

5 Cg 标准函数库几何函数

Cg(C for Graphic)标准函数库之数学函数与几何函数的更多相关文章

  1. Standard C 语言标准函数库速查(彩色的函数列表,十分清楚)

    Standard C 语言标准函数库速查 (Cheat Sheet) wcstombs 函数说明 #include <stdlib.h> size_t mbstowcs(wchar_t * ...

  2. 【Unity Shader】---CG标准函数库

    1.CG标准函数库 和C的标准函数库类似,CG也提供了一系列的内建函数库,这些函数用于计算数学上的通用计算或算法(如纹理映射).例如:求取入射光线的反射光线用Reflect函数,求折射光线用Refla ...

  3. CG 标准函数库

    (1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回tu ...

  4. CG标准函数库

    (1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回tu ...

  5. Standard C 语言标准函数库介绍

    全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...

  6. c语言: Standard C 语言标准函数库

    Standard C 语言标准函数库速查 (Cheat Sheet) http://ganquan.info/standard-c/ c语言标准头: <assert.h> 断言 <c ...

  7. 12C语言标准函数库

    C语言标准函数库 数学函数 三角函数 指数和对数函数 双曲线函数 其它函数 Sqrt() Pow() Exp() Log() Sin() Cos() Tan() 时间函数 查找和排序 Bsearch( ...

  8. C语言常用的库文件(头文件、函数库)

    C语言常用的库文件(头文件.函数库) C系统提供了丰富的系统文件,称为库文件.C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过.在& ...

  9. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法

    最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...

随机推荐

  1. PreparedStatemnet预编译操作数据库的增删改

    /**************PreparedStatemnet使用******************/ /*特点:相当于ADO.NET中的参数化命令对象  * 1.预编译,执行相同的sql语句,提 ...

  2. WisDom .net开发框架设计 2

    随笔- 10  文章- 0  评论- 57  WisDom .net开发框架设计 (二)   WisDom .net 权限设计  1.前言        几乎在所有的管理的系统,都离不开用户,角色,权 ...

  3. Dynamics CRM 提示“操作无效”

    今天打开一个许久没用的CRM学习环境发现出现下面的错误.顿时感觉到莫名其妙.(貌似CRM的所有错误都让人感觉到莫名其妙) 于是查看系统日志,错误如下: Current key (KeyType : C ...

  4. 推荐5个漂亮的网站html源码

    给大家推荐几个很漂亮的html网站源码模板,下面就简单列几个,更多的自己可以去看 1.大屏背景摄影工作室作品案例网页模板 [效果预览及下载] 2.粉色响应式IT科技服务器机房企业模板 [效果预览及下载 ...

  5. c# 发邮件功能

    using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using Sy ...

  6. HTML5小游戏UI美化版

    HTML5小游戏[是男人就下一百层]UI美化版 之前写的小游戏,要么就比较简单,要么就是比较难看,或者人物本身是不会动的. 结合了其它人的经验,研究了一下精灵运动,就写一个简单的小游戏来试一下. 介绍 ...

  7. Make Things Move -- Javascript html5版(三)三角函数形式的动画

    角度制和弧度制 生活中通常是用角度度来理解的,代码里都是用弧度制来计算. 角度转弧度:DEG_TO_RAD = Math.PI / 180 弧度装角度:RAD_TO_DEG = 180 / Math. ...

  8. 案例研究:Web应用出现间歇性的SqlException

    案例研究:Web应用出现间歇性的SqlException 2013-07-29 14:36 by 微软互联网开发支持, 231 阅读, 3 评论, 收藏, 编辑 最近有客户找到我,说他们生产环境的事件 ...

  9. 解决TXT乱码问题

    初装Ubuntu,打开windows保存的txt文件很可能会遇到各种乱码问题. 下面是wiki ubuntu里的解决办法: Gedit中文乱码 缺省配置下,用 Ubuntu 的文本编辑器(gedit) ...

  10. 关于EL表达式的生效时间(猜想)

    通过ajax与服务端异步交互的时候,在服务端将某些变量或对象设置到request等域里,此时页面上的EL表达式是获取不到ajax异步交互时设置在request等域里的变量或对像的. 我猜测可能EL表达 ...