游戏开发学习起步之图形学基础
来源:互联网 发布:数据采集费资料费清单 编辑:程序博客网 时间: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。
好了,图形学基础就介绍到这里。
- 游戏开发学习起步之图形学基础
- Java游戏开发起步
- Android游戏开发起步[转]
- 【图形学与游戏编程】开发笔记-基础篇5:光照与着色基础
- 【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境
- D3DX开发之起步
- android 游戏开发基础学习
- j2ee学习之路--从java基础起步
- 【图形学与游戏编程】开发笔记-基础篇2:DX11初始化
- 【图形学与游戏编程】开发笔记-基础篇4:程序方面的补充知识
- 【图形学与游戏编程】开发笔记-基础篇6:缓冲区与混合
- 【图形学与游戏编程】开发笔记-基础篇7:纹理映射
- Android学习之起步
- 图形学基础复习之矩阵
- j2ee起步之基础篇
- MIDP 2.0 开发J2ME游戏起步
- MIDP 2.0 开发J2ME游戏起步之一
- Android游戏开发起步(译文)
- 给年轻程序员的几句话
- Two Simple Rules for HTTP Caching
- 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
- 包外类
- 4、从头学Android之Menu选项菜单
- 游戏开发学习起步之图形学基础
- MPI并行计算环境建立之二--挂载nfs文件系统
- Extjs.grid 详解
- 封装spring jdbc
- 我的大学这8年(2004-2012)
- 动态内存分配
- 生活有时候还是需要点这个的
- T-SQL:插入并返回自增ID
- 如何制作CRAMFS + YAFFS2文件系统