游戏开发学习起步之图形学基础

来源:互联网 发布:数据采集费资料费清单 编辑:程序博客网 时间:2024/05/20 15:12

        昨天补习了3D图形学的基础--vector(3D),matrices(矩阵),plane(平面)和ray(射线)。vector和matrices可以说应用在3D图形学的每一个角落,如:translation,prospective(这些知识在以后会提及)。plane以及ray在图形学中也有着重要的地位,在射线查询、剔除算法的实现中都会应用。

 Vector--向量

       这里我们关注的是图形学中的vector,和任何图形引擎中的vector不能画等号。在图形引擎中我们可以用vector来表示position,或者vector(这里代表向量)。但是在图形学中,vector只有两种属性:magnitude(大小或者长度)、direction(方向);而没有position这个属性。向量在图形学中大概能用来做什么呢?它可以来用来表示射线光的方向,polygon的方向。

        向量的加减都非常简单。但是乘法分为dot和cross。

       dot: u·v = u(x)v(x) + u(y)v(y) = s

       另一种表示结果的方法是u·v = |u||v|cosØ。

       如果u·v = 0,表示u和v垂直或者正交。

       如果u·v > 0,表示Ø,u和v之间的夹角小于90°。

       如果u·v < 0,表示Ø,u和v之间的夹角大于90°。

       cross:u×v = [(u[y]v[z]-u[z]v[y]),(u[z]v[x]-u[x]v[z]),(u[x]v[y]-u[y]v[x])]。

       u×v同时和u、v垂直。

Matrix--矩阵

    一个m×n的matrix是一个有m行n列的2维数组。

    

       图形学中经常用到一种特定的矩阵--Identity Matrix,该矩阵必须是一个正方型的矩阵,且只有在主对角线上的元素为1,其他元素都为0。

      Identity Matrix被视作一个乘法单位:IM = MI = M。当一个矩阵乘以Identity Matrix时,不会改变该矩阵的值。

      矩阵的逆(Inverses),需要注意只有正矩阵有逆矩阵,且不是所有的正矩阵都有逆矩阵。

      矩阵的基本transformation(变换)

         translation matrix(平移矩阵)

         

         rotation matrix(旋转矩阵)

            绕X轴旋转

            

           绕Y轴旋转

            

           绕Z轴旋转

            

            Scaling Matrix(缩放矩阵)

             

Plane(平面)

        平面在图形学中通过平面的法线n和平面上任意一点p0描述。有一个这样的等式n·p0 + d = 0。在d3d中用一个(n,d)来表示平面

      我们怎么确定空间中任意一点p于平面的关系呢

      如果n·p+d=0,表示点p在平面上。

      如果n·p+d>0,表示点p在平面的上方。

      如果n·p+d<0,表示点p在平面的下方。

      怎样在d3d中平移平面,首先我们将translation matrix(平移矩阵)求逆,再将平移矩阵的逆转置。将得到的矩阵和Normalize后的           plane相乘,得到平移后的平面。

Ray(射线)

      在图形学中射线由一个原点和一个方向表示。

      ray的数学表达式:p(t) = p0 + tu。如图1

      

       判断ray时候穿过平面。

       假设ray和plane相交的点为p。

       n·p + d = 0

       n(p0 + tu) + d = 0

       t = (-d -(n·p0))/(n·u)

       当t > = 0的时候ray穿过plane,当t < 0 的时候,ray没有穿过plane。


好了,图形学基础就介绍到这里。

原创粉丝点击