游戏开发中的数学
开发游戏尤其是三维游戏需要大量的数学知识,这些知识大多取自大学时期线性代数,也有来自高等数学和高中的数学知识。掌握这些知识对于开发游戏会有很大的帮助,可以说游戏的各种效果都是建立在数学的基础上的。专栏作者jiangcaiyang会将开发的心得写成日志的形式供其它同行们学习。
彩阳
学习DirectX还要靠大家指点指点啊。
展开
-
有关GLSL中的gl_FragCoord
在研究阴影映射的时候,我发现了一个很有意思的变量,它可以代替我们自己使用的varying变量,给我们带来方便。但是我们也需要了解它是如何计算的。原创 2015-04-15 17:42:32 · 7572 阅读 · 1 评论 -
阴影映射(Shadow Map)的研究(二)
上一篇文章介绍了我对Z缓存的较为详细的研究。这里之所以对Ze求导函数,是因为的我们需要寻找它的变化曲线,从而找到极值点,这样就能够确定Ze相对于zw的疏密分布情况。幸运的是,我们找到的导函数是双曲函数,并且我们关心的的右侧是单调递增的。原创 2015-04-08 21:20:22 · 2462 阅读 · 0 评论 -
深度缓存(Z缓存)的研究
最近在shadow map过程中卡住了。因为我想在OpenGLES 2.0兼容的平台上运行shadow map,而要顺利运行shadow map,通常的情况是拥有GL_OES_depth_texture扩展,而有些兼容的机器是没有这个扩展,这给我们开发人员带来了一些难度。不过办法还是有的,前提是要对计算机图形学的Z-Buffer要有一个深入的了解才行。原创 2015-04-08 14:10:29 · 6678 阅读 · 1 评论 -
透视投影矩阵的构建
投影矩阵最终建立的是一个平截头体(也可以称为台),在这种变换下呈现远小近大的效果。这里我将我学到知识记录下来,以后备忘用。原创 2015-04-07 21:46:18 · 4527 阅读 · 0 评论 -
解决三维建模软件中摄像机旋转的问题
我们看到很多3D建模软件都可以很方便地对摄像机进行旋转,比如说Blender,通过按下鼠标中键,就可以很方便地对摄像机进行旋转。在学习了几年OpenGL之后,我也想要模仿这一点做出类似的功能。但是当研究的时候,遇到了一些困难。原创 2015-04-02 10:14:22 · 5145 阅读 · 2 评论 -
矩阵的平移(translate)没有想象的那么简单
矩阵在计算机图形学中的地位是举足轻重的,几乎所有的变换都需要通过矩阵来完成。比如我接触的DirectX9就用IDirect3DDevice9::SetTransform()的第二个参数就要求传入矩阵的指针,而OpenGL也有直接载入矩阵的方法:glLoadMatrixf(),足以见矩阵在相关领域的作用是多么大。 对三维物体的变换(transform)包括基本的平移(translation)、旋转(rotation)、缩放(scaling)\错切(shearing)以及它们的组合变换。它们都作用原创 2014-03-06 23:30:35 · 13169 阅读 · 5 评论 -
矩阵求逆计算的实现
学习计算机图形学,那么就应该了解计算机图形学的一些基础知识,比如说向量、矩阵、欧拉角以及四元数。其中矩阵尤其是4×4的矩阵在其中是比较重要的一部分了。因为它包含的信息多,一个4×4的矩阵可以表示平移(translation)、旋转(rotation)、缩放(scaling)以及错切(shearing)以及它们组合后的变换(transform)。其中平移、旋转是刚体转换、在三维程序中较常使用,而缩放以及错切由于改变了三维模型的形状,在实际开发中较少使用。为了表示三维图形的逆变换,引入了逆矩阵的概念。逆矩阵使得原创 2014-03-06 21:42:45 · 4962 阅读 · 2 评论 -
OpenGL中glFrustum()和gluPerspective()的相互转换
OpenGL中glFrustum()和gluPerspective()的相互转换OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和glu函数gluPerspective()函数。网上介绍两个函数联系比较少,所以自己研究呗。OpenGL函数glFr原创 2013-04-28 00:47:14 · 7137 阅读 · 0 评论 -
四元数学习之用四元数旋转向量
最近对四元数的学习又深入了一些,既然可以用四元数来表示三维物体的旋转,那么如何由一个向量和四元数作用得到一个旋转后的向量呢? 上篇博客讲到了如何将四元数转化为矩阵,这次其实是上一次的延伸,我们知道矩阵可以和向量进行相乘的,方法是将向量填充为四维齐次向量,然后4×4的矩阵左乘4×1的列向量,得到的是4×1的列向量,就是经过转换后的向量,再去掉齐次即可。原创 2013-10-24 20:11:10 · 7131 阅读 · 0 评论 -
四元数学习之四元数和矩阵的转换
四元数是一种可以替代矩阵和欧拉角的数学工具。他最初是由William Rowan Hamilton发现的(参考维基百科),它的最大的特点是不满足交换率。也谈一下自己对这一点的体会。在离散数学中有讲到半群、群、环和域的概念,其中环的定义是具有交换率和分配率(详情参考环的数学定义),而域的概念则是在环的基础上加上了交换率。所以说四元数无法满足域的定义,它是除法环的一种。何为除法环?其实很简单,被除数和除数都满足结合律和分配律,但是如果要满足分配律,即被除数和除数交换位置,那么它的结果是不同的(准确地说,如果它们原创 2013-08-17 23:23:28 · 13959 阅读 · 1 评论 -
OpenGL中glRotatef()函数究竟对矩阵做了什么
我们知道OpenGL中维持着两套矩阵,一个是模型视图矩阵(model view matrix),另一个是投影矩阵(projection matrix)。而Direct3D维持着三个矩阵,其实它们的本质是一样的,因为Model(World)矩阵×View矩阵 = ModelView矩阵,也就是OpenGL的模型视图矩阵。通过对OpenGL这两套矩阵的变换,我们可以得到各种投影效果。这回我就来研究OpenGL中一个常见的函数glRotatef(d)。 看参数,glRotatef( angle,原创 2013-08-12 17:40:37 · 19031 阅读 · 4 评论 -
使用向量点积来实现将模型绕着中心点旋转
使用向量点积来实现将模型绕着中心点旋转 如何在三维空间中实现模型绕着中心点旋转?这个问题听起来容易,但是经过我的实践,发现其实还是挺困难的。在研究OpenGL和DirectX的初级阶段,我相信这个问题还是挺伤大家的脑筋的。究竟该如何实现这样的功能呢?我想大家可能需要回过头,复习一下我们高中的知识,通过平面解析几何的类比,大家会找到好方法的。原创 2013-08-08 20:12:52 · 4700 阅读 · 0 评论