OpenGL_01_基础和数学知识(上)

/*

从前学线代的时候没认真,现在回过头再看看吧。

学习书籍的名字:OpenGL图形开发快速入门。机械工业出版社,杨柏林编写。

*/

一.OpenGL全称为:OpenGraphics Library,开放式图形库,为开发人员提供了图形硬件接口,是一个底层的3d图形函数库,跨平台,兼容主流操作系统。

一.数学相关

a)        点

                        i.             就是传统的横轴x、纵轴y的坐标系,(x,y),

                       ii.             两点坐标公式P1P2 = 根号下(两点x之差的平方+两点y之差的平方),3d场景同样适用,加个y。

·                      

 

                      iii.             OpenGL采用右手坐标系。

在空间直角坐标系中,让右手拇指指向x轴的正方向,食指指向y轴的正方向,如果中指能指向z轴的正方向,则称这个坐标系为右手直角坐标系.

b)        向量

                         1.             向量的大小

向量既有方向又有大小,。我们计算向量的大小就是求响亮的长度或者模。我们可以吧向量n的长度记做: |N|。在3d空间该数值的计算如下:

                             |N| = 根号下(三个N的x、y、z三个方向分量的平方和)

                         2.             向量的归一化

有很多向量,我们只关心他的方向而不关心大小,比如求某个平面的法线方向,这种情况下,使用单位向量就很方便。单位向量就是大小为1的向量,我们称其为标准化向量。

求一个向量的单位向量的过程,叫做向量的归一化,运算法则:(图)

                                               V= V/|V| 

                         3.             向量的加法和减法

可以向对标量一样,对向量进行数学运算。但是要求是参与运算的向量维度都是一样的,即都是一维、二位、或者三维等。向量加法就是将两个向量的各自分量相加就可以了,比如向量A+向量B,得到向量C:

         (Ax+Bx,Ay+By,Az+Bz)

两个向量相减也是一样,直接分量相减:

         (Ax-Bx,Ay-By,Az-Bz)

                         4 .            向量与标量的乘法运算

虽然向量和标量不能加减,但是可以相乘,结果得到一个向量,他与原向量平行,长度不同或者方向相反。例如,用标量2乘以一个向量,结果为一个向量,其方向与向量N的方向一致,其长度变为原来的2倍。相似的用-1乘以一个向量,得到的结果向量大小和原向量相等,方向相反。

                         5.             点乘运算

向量和向量相乘有两种不同的类型,在这里我们首先介绍: 点乘(也叫作内积).

术语点乘来自于:a·b 中的点,标量乘法可以省略点号,但是向量乘法运算不可以省略。

向量点乘就是对应分量乘积的和,结果是一个标量,比如在2d和3d中的运算公式为:

A·B = AxBx + AyBy

A·B = AxBx + AyBy + AzBz

一般来说,点乘的结果描述了两个向量的“相似程度”,结果越大两个向量越相近。点乘等于向量大小与向量夹角的余弦值的积:

A·B = |A| |B| cosα(应该是希特)

                                     由上面两个可知,两个向量之间的夹角:

                                               cosα = A·B / |A| |B|

这就明显简化了性质:

                                     A·B =0,说明A和B之间的夹角为90度

                                     A·B> 0,说明A和B之间的夹角小于90度

A·B< 0,说明A和B之间的夹角大于90度

6. 叉乘运算

另一种向量乘法乘坐叉乘或叉积。叉乘仅可用于3D场景,和点乘不一样的是,叉乘得到的是一个向量。AxB = -(BxA),任意两个3d向量都可以确定一个平面。

AxB的另一个公式:

AxB=(AyBz-AzBy,AzBx-AxBz,AxBy-Ay,Bx)

c)        矩阵

矩阵是3d数学的重要基础,在这里讨论矩阵的性质和运算。

我们用m x n定义一个矩阵,他表示该矩阵m行n列。

两种特殊矩阵:

1.      方阵和对角矩阵

§  行数和列数相同的矩阵称作方阵

§  除了左上角到右下角都是0的,称这种矩阵为对角矩阵。例如

【    

        1  0    0

    0  -3   0

   0   0    2

2.      单位矩阵:

单位矩阵是一种特殊的对角矩阵。他是nxn的矩阵,对角元素为1。

1  0    0

  0    1   0

  0    0   1

}

如果用一个矩阵和单位矩阵相乘,结果还是原来的矩阵。

3.      矩阵的加法和减法:

前提是:确定参加运算的矩阵具有相同的阶数,否则运算无法进行。

然后,将对应位置上的的元素进行相加减,其结果作为结果矩阵在该位置上的值。

4. 矩阵的乘法运算分为三种:

标量和矩阵相乘

标量k 和矩阵M相乘,其结果是一个和M维数相同的矩阵,其元素值为k乘以M中的每一个元素。公式如下:


实例:

§  向量和矩阵相乘

向量可以看作是一行或者是一列矩阵,因此向量可以和矩阵相乘。在这里只有两种情况是允许的,即行向量左乘矩阵时,结果是行向量;列向量右乘矩阵,结果是列向量。其中行向量的列数要和矩阵的行数相等,列向量的行数要和矩阵的列数相等。


§  矩阵和矩阵相乘

比如乘法AB
一、1)用A的第1行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第1行第1列的数;
2
)用A的第1行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第1行第2列的数;
3
)用A的第1行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第1行第3列的数;
依次进行,
(直到)用A的第1行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第1行第末列的的数,
二、1)用A的第2行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第2行第1列的数;
2
)用A的第2行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第2行第2列的数;
3
)用A的第2行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第2行第3列的数;
依次进行,
(直到)用A的第2行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第2行第末列的的数,
依次进行,
三、1)用A的第末行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第末行第1列的数;
2
)用A的第末行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第末行第2列的数;
3
)用A的第末行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第末行第3列的数;
依次进行,
(直到)用A的第末行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第末行第末列的的数.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值