向量在DCC软件里的应用(一)
2020-07-11 本文已影响0人
CGPipeline
向量的基础知识以及在DCC软件里的应用(一)
一.向量的基础概念
向量: 一般认为,同时满足具有大小和方向两个性质的几何对象即可认为是向量
在DCC软件里面可以堪称向量的属性:
- 法线:同时具有大小跟方向, 在Houdini里面一般用作发射物体的初速度。
- 速度:
- 位置:点的坐标,相对于世界坐标中心(0,0,0)
向量模:向量的模就是向量的的长度
eg: 向量a的坐标(x,y,z)则其模长为
[图片上传失败...(image-b49f06-1594397658808)]
单位向量:单位向量是模等于1的向量。由于是非零向量,单位向量具有确定的方向。一个非零向量除以它的模,可得所需单位向量。
应用: 一般在DCC软件里面单位向量被用来确定方向,以及求两个向量的角度。
向量的夹角:两个向量的夹角是将二者图示化后两箭头所夹之角
向量的夹角可由点积的定义导出计算公式,即:
[图片上传失败...(image-218fc4-1594397658808)]
二.空间向量坐标的混合运算
[图片上传失败...(image-39c3ee-1594397658808)]
向量的加法
:两个向量组成的平行四边形的对角线,或者三角形法则
:一般在houdini里面通过给其法线@N + 一个向量来改变其法线方向
# vex code
vector a = point(0,'P',0);
vector b = point(1,'P',0);
@N = b-a;
向量减法
:向量减法的差是由减向量指向被减向量得到的新向量,可以把减向量方向调反变成向量加法
:一般在houdini里面通过向量相减,来调整物体爆炸时候的初速度
vector a = @P;
vector b = point(1,'P',0);
@N = -b-a;
向量乘法
1.向量的点积/标量积
代数定义:
向量a与b的点积定义为:
几何定义:
在欧几里德空间中,点积可以直观的定义为:
从上述几何定义可知:
- 当两个向量垂直的时候。向量点积为零,为1或-1则相互平行
- 当两个向量都是单位向量的时候,其点积就是夹角的余弦值
- 判断两个向量的方向,点积的值大于零两个向量方向相近,小于零方向相反
定义应用
- 求向量夹角
使用 houdini Vex
vector pos1 = {1,2,3};
vector pos2 = {1,0,0};
vector pos1_one = normalize(pos1); # 把向量转换成单位向量
vector pos2_one = normalize(pos2);
float dot_value = dot(pos1_one, pos2_one) # 点积
float angle = acos(dot_value) # 反余弦值
# 欢迎关注微信供公众号CGPipeline获取更多干货
2.向量的叉积
叉积的值还是向量:a向量与b向量的向量积的方向与这两个向量所在平面垂直,且遵守右手定则
代数定义:
[图片上传失败...(image-31ab57-1594397658808)]
几何定义:
从上述几何定义可知:
- 当两个向量垂直的时候。向量叉积的模长为1或者-1,为0则相互平行
- 向量叉积与两向量所在平面垂直
- 在计算机图形学里面利用叉积来计算法线,只要已知物体表面的两个非平行矢量(或者不在同一直线的三个点),就可依靠叉积求得法线。
- 通过叉积来判断两个线段是否相交