代码改变世界

(转)从零实现3D图像引擎:(6)向量函数库

2011-03-03 19:36 by CoolJie, 781 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 基本定义:向量由多个分量组成,2D/3D向量表示一条有向线段。下面的ux,uy就是两个分量。向量u = <ux, uy>,如果从点P1(x1, y1)指向点P2(x2, y2),则:U = p2 - p1 = (x2-x1, y2-y1) = <Ux, Uy>向量被定义后,总是相对于原点的,所以可以用一个点来表示从原点指向该点的向量。2) 向量的范数(norm)范数就是向量长度,是从原点到终点的距离。用|u|表示,所以:|U| = sqrt(Ux2 + Uy2)|U| = sqrt(Ux2 + Uy2 + Uz2)3) 单位向量与归一化有时候,我们只 阅读全文

(转)从零实现3D图像引擎:(5)3D坐标系函数库

2011-03-03 19:34 by CoolJie, 799 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 2D笛卡尔坐标系与2D极坐标系2D笛卡尔坐标系就是平面直角坐标系,不说了。2D极坐标系,是用方向和距离来定义2D空间中的点,而非x,y坐标,如下图:其中极坐标的参数用红色表示,笛卡尔坐标的参数用蓝色字表示。非常显而易见,他们之间的转换关系如下:x = r * cos(theta)y = r * sin(theta)r = sqrt(x2 + y2)theta = arctg(y/x)2) 3D笛卡尔坐标系在2D笛卡尔坐标系上增加了Z轴,形成3D笛卡尔坐标系。分为左手坐标系和右手坐标系。区分方法:用左手握住Z轴,大拇指伸直,其他四指的指尖方向从X轴转向Y轴,如果大拇指的指向是 阅读全文

(转)从零实现3D图像引擎:(4)三角函数库

2011-03-03 17:55 by CoolJie, 468 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 整度数在有些地方需要执行三角函数的计算,但是虽然C的数学库的三角函数计算比较精确,但是速度很慢,我们需要写一个能够对整度数进行快速查找的的函数。我们将使用查找表,并在初始化时填充查找表。2) 浮点度数还要写一个对于非整度数的三角函数查询,结果可以不精确,但速度一定要快,这里我们使用查找表和线性插值的方法,达到这种效果。线性插值的原理示意图:首先在查找表中取得45度和46度的值,然后根据小数点位的大小,在45度和46度值的差值间按小数比例取得值的偏移,然后再与Sin(45度)的结果相加即可。2. 函数实现1) 使用Math.h中的函数初始化查找表的代码很简单:int _CPP 阅读全文

(转)从零实现3D图像引擎:(3)超级重要的2D矩形裁剪

2011-03-03 17:44 by CoolJie, 478 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析为什么我们要画2D直线,要做2D的直线-矩形裁剪?原因很简单,无论游戏世界是2D的还是3D的,最终都要投影到玩家的屏幕上,3D的东西最终要是要投影到视平面上。所以3D游戏仍然有很多东西要在2D视平面上做。对于3D游戏的裁剪就有两种方法:一是在3D空间做裁剪,利用视域体的各个面与三角形中直线的关系来做,这叫做立方体空间裁剪;另一种是,把3D物体先投影在2D视平面上,然后在视平面上对2D直线做矩形裁剪,叫作图像空间裁剪。三角形都是由直线组成的,屏幕是矩形的,所以用矩形裁剪一条直线是非常重要的,而且也不是想当然的简单的,也有很多因素要考虑。1) 直线被矩形裁剪的四种情况直线被矩形裁剪只 阅读全文

(转)从零实现3D图像引擎:(2)画2D直线不简单

2011-03-03 17:41 by CoolJie, 482 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 画直线的问题本来我以为画直线会很容易,随便拿个直线公式,遍历X求Y画出来不就完了么,但事实并非如此。以2D直线为例,因为3D直线也只是多引入了个Z坐标而已。关键的问题:我们在数学中所学的直线是基于实数域的,而在计算机屏幕上,所画的直线是基于正整数域的,可以想象这么一个情形,在直线的某一点X=1,Y=0.01时,在屏幕上如何画呢?下图对比了实数域的直线,与基于正整数域的直线:为什么直线在正整数域是不连续的呢,还记得斜率的的定义么:斜率m = dy / dx = (y1 - y0) / (x1 - x0)这意味着当X坐标增加1,则Y坐标就增加m。这就是会出现上述情况的根本原因。 阅读全文

(转)从零实现3D图像引擎:(1)环境配置与项目框架

2011-03-03 17:24 by CoolJie, 907 阅读, 1 推荐, 收藏, 编辑
摘要:0. 要学懂3D程序设计,必然要精通3D相关的线性代数、3D几何、复分析等相关知识,我也因为如此才开始这个博客系列的写作,不自己实现,就不是自己的东西,从今天开始,将会把所学的数学知识,从数学推导到代码实现的心得全部记录于此。最终得到一个独立的3D图像引擎,也就完成了对3D图像知识的基本学习。1. 文章布局。除了本文,所有文章都将由3部分组成。1) 数学理论推导。2) 不参看任何示例,只根据数学原理进行的代码实现。3) 项目代码下载。2. 语言与开发环境1) 语言:C/C++。3D游戏说白了就俩字:速度。所以对于面向对象这种东西,在速度面前完全可以无视,而且对于数学和图形库来说,本来也没有过多 阅读全文

没有任何一个成功的产品是容易的。

2011-02-27 23:44 by CoolJie, 214 阅读, 0 推荐, 收藏, 编辑
摘要:我这里所说的容易并不是容易实现,容易生产的意思,而是指容易的想法,突然的灵光一闪。为什么Google会允许员工有20%的私人自由时间,让员工自己去头脑风暴,去创造自己的产品,因为这样对于迸发一个好的产品是有最大化意义的,与其让员工发呆,看网页,不如让员工做自己的私事,一个产品也许就会应运而生,但是我们仍然没有看到太多的产品。对于汇集了全球的聪明人的企业尚且如此,你能确保你的头脑更加灵活,更容易创造产品吗?如果大家有任何好的想法、评论,欢迎留下 阅读全文

上半年阅读书籍清单

2011-02-10 15:26 by CoolJie, 497 阅读, 0 推荐, 收藏, 编辑
摘要:打算二月底到三月底能读完本书,购买链接:http://www.china-pub.com/197219名字极其老土,看在是本讲Android游戏开发的专著上,耐着性子,争取在4月底前阅读完成,购买链接:http://www.china-pub.com/52070由于本书已经阅读了一半,打算在2月底前全部读完,购买链接:http://www.china-pub.com/196978本书是基础的WPF技术类书籍,用脑不多,纯靠记忆和熟练,打算6月底前阅读完成,购买链接:http://www.china-pub.com/37794没有 ASP.NET 的开发经验,直接阅读本书还是感觉很多知识点不熟悉 阅读全文

通信协议的正确处理方法

2011-01-21 21:01 by CoolJie, 493 阅读, 0 推荐, 收藏, 编辑
摘要:在博客园首页看到一篇文章说使用缓存机制来处理串口收到的数据,这种机制处理,问题非常多,而且难于控制。实际上处理各种类型的通信数据专业而又简易的做法都是使用状态机对通信报文进行处理,而且使用状态机进行处理的话,可以有很多的定制扩展性,维护性更高,代码更清晰易读。  比如,一个经过设计的数据报文格式,最简单的情况下一般都是有同步头,控制字,数据,CRC这样格式,对于这种格式,最简单的方式是:声明4个状态,enum State{ Header, Control, Datas, CRC,} ;接下来,声明一个变量State state;用以记录当前的状态,然后在你的通信通道的接收数据方法中对收到的数据 阅读全文

(转)你不是真的想要100万

2011-01-21 14:54 by CoolJie, 232 阅读, 0 推荐, 收藏, 编辑
摘要:上午,我在办公室里感觉有点憋闷,于是决定去活动活动腿脚,到街头的拐角的商店里去了一趟。我买了一大包薯片,付款时,我问柜台后的伙计干的怎么样。他长叹一声说“累,兄弟。我需要100万,我要出去旅行一下。现在很不顺。”他半开玩笑的说着他这周也许能中彩票头奖的老故事。他没有告诉我更多的事情,我也不想去打听,我告诉他希望他的生活好起来,付款走了。往回走,我不能驱散心头由这次交谈产生的阴霾。我知道当生活遇到挫折时是种什么样的感觉,想逃避,远离这一切。有多少次,我曾对自己说,“如果我有100万”。然而,慢慢的,我开始明白,这对一大笔钱的渴望实际上反映出的是一种思想的懒惰。我知道,这听起来很刺耳。不要误会我: 阅读全文
上一页 1 ··· 3 4 5 6 7 8 下一页