代码改变世界

(转)用AGG实现高质量图形输出(二)

2011-04-27 10:50 by CoolJie, 2777 阅读, 0 推荐, 收藏, 编辑
摘要:本文上接《用AGG实现高质量图形输出(一)》,分别介绍了AGG显示流程中的各个环节。 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节。为了方便对照,再放一次AGG显示流程 图 另外,上一篇文章里的例程也很重要,后面的例子都将基于这个代码。 下面,我们来考察AGG显示流程中的每个环节。理解每个环节最好的方法是编写实验代码,建议先参照这里建 立一个可以运行的A... 阅读全文

(转)用AGG实现高质量图形输出(一)

2011-04-27 09:38 by CoolJie, 2297 阅读, 0 推荐, 收藏, 编辑
摘要:AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高(自称超过GDI+)使用前AGG的准备工作下载AGG库,它的家在http://www.antigrain.com,目前最高版本是AGG2.5 解压,后面以[AGG]表示AGG的解压目录. 把[AGG]\include加入到include搜索目录中 把[AGG]\src里所有cpp加入到项目中(或者用makefile一起编译) 另外,AGG还有一些其它组件,用到时也要把它们(都是些.h和.cpp文件)加入项目: 如果要用AGG的控件和窗体,要加入[AGG] 阅读全文

(转)从零实现3D图像引擎:(13)把宽高比、透视投影矩阵、屏幕变换矩阵说透

2011-04-25 15:45 by CoolJie, 922 阅读, 0 推荐, 收藏, 编辑
摘要:1. 问题的引出这个问题的引出又是因为《3D游戏编程大师技巧》这书里面有的问题没讲明白,有的东西又不对。首先宽高比这个名词的出现是因为我们的PC屏幕不是正方形的,屏幕宽度 : 屏幕高度 就是宽高比。但是我们上次搭建的相机系统的视平面是正方形的,那么当很多物体投影到视平面上后,必然最后完成的是一幅正方形的画,而屏幕是长方形的,这时只有两种办法:1) 把照片压扁,这样画上的所有物体都被压扁了。2) 把照片上下多余的两条分别裁下来,只保留屏幕大小的画,这样物体不会走样变形,但是这幅画有一部分看不到了。哪种是正确的?以人眼为例,我们的眼睛不可能因为眼睛的外框不是正方形就把东西压扁吧,所以我们要做的是不 阅读全文

(转)从零实现3D图像引擎:(12)构建支持欧拉和UVN的相机系统

2011-04-25 15:44 by CoolJie, 1542 阅读, 0 推荐, 收藏, 编辑
摘要:1. 相机需要哪些参数先看下图了解一下上次我们建立的相机在3D世界中的意义:如Hello3DWorld中介绍的,在相机坐标系下,相机朝向正Z轴,相机有视野角度,因为视野角度,形成了上图的视锥体,视平面就是要被透视投影到的2D平面。在这幅图里增加了近裁剪面与远裁剪面。他们是做什么的呢?在现实中,我们会发现,离眼睛太远的东西我们就看不到了,离眼睛太近的东西又会挡住大部分景色。于是就定义了远裁剪面和近裁剪面——比近裁剪面还近的物体和比远裁剪面还远的物体,我们不把他们透视到视平面上。他们和视平面平行,也就和x-y平面平行,所以他们的平面方程就分别是z = nearz 和 z = farz。还有什么物体 阅读全文

(转)从零实现3D图像引擎:(10)Hello3DWorld

2011-04-25 15:38 by CoolJie, 1746 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析前面我们已经把预先想到的可能会用到的数学工具都封装好了,从这篇开始,应该很少出现一大篇都是数学推导的了,终于看见光明了,这次我们将开始第一个3D程序的编写,所以题目就叫Hello3DWorld吧。0) 3D程序的本质很多书都会先介绍“3D流水线”的词,但其实明白3D程序的人一下子就知道这是什么,而不了解的人看了这个词也没有意义。其实我也觉得没什么特殊意义,因为所有计算机程序都是一个一个流程执行下来的,不全都是某某流水线么。简单来说,3D流水线就是,从在计算机中表示三维世界的数据,到绘制到计算机2D屏幕上的整个过程。3D流水线的子过程有很多,都列出来只能让人更迷惑,还是举个例子说个 阅读全文

(转)从零实现3D图像引擎:(9)四元数函数库

2011-04-25 15:33 by CoolJie, 507 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析 1) 四元数是什么东西? 这个东西算盘、矩阵、复数是一类东西,即数学工具,数学家们创造了这个东西来解决一些数学问题。其实四元数是一种超复数,他不是只有一个虚数的复数,而是有三个虚数的复数。我们先回顾一下复数吧。 2) 虚数的来源 实数集中没有-1的平方根,因为没有哪个实数的平方等于-1,所以数学家们就创造它——虚数i,并且定义了i * i = -1。 所以我们可以计算sqrt(-4... 阅读全文

(转)创业公司的CEO每周须必做的13件事

2011-04-22 10:34 by CoolJie, 272 阅读, 0 推荐, 收藏, 编辑
摘要:当一个创业公司的CEO是个很辛苦很难的事。下面列出的是每个创业公司的CEO每周都应该必做的13件事情: 关注一件事。你的公司一次只能做好一件事情。弄清楚你的这件事。把它贴在墙上。每天都要这样。把它放在公司内的日常交流论坛的顶部。不要让任何其它事情把你的团队从这个事情上分心。 记住:你和你的团队是共荣共损的。花时间去培养你的团队。引进比你更善于做某些事的人。激励他们、督促他们去做他们从来不敢相信自己... 阅读全文

(转)Direct3D新功能

2011-03-15 17:48 by CoolJie, 910 阅读, 0 推荐, 收藏, 编辑
摘要:DirectX 11发布带来了很多令人兴奋的新特性,其中使用Computer Shader进行图形后处理和多线程渲染、乱序透明等功能都是以前的GPU硬件从未想过从未做过的。这些功能标识着GPU的发展结束了一位增强性能来获取更大浮点吞吐以适应增长的三角形数量和更复杂的Shader指令,而是转向使用使用先进渲染技术结合GPU通用计算来实现复杂特效。 回顾历次DirectX的更替过程,几乎都对GPU架... 阅读全文

(转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库

2011-03-03 19:42 by CoolJie, 615 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 参数化直线还记得我们在学习向量时介绍的位移向量吗?参数化直线的原理和他相同。其实所谓参数化直线,就是通过一个参数t来表示直线上的一个线段,当t为0时,则取线段的一端的端点,当t取1时,则取到另一端的端点。如图:核心原理就是向量加法的几何意义,Vd是加数,通过t(从0到1)去乘以这个Vd,则可以描述向量p,而p在某个t时的坐标值,就是从点P1到点P2的线段在t时的坐标值。注意这里我们使用的是图中的p = p1 + t * vd,这样t的取值是0到1,如果是p = p1 + t * v',那t的取值就是0到|Vd|,还需要去先算|Vd|,没有必要这么做,而且0和1是特殊 阅读全文

(转)从零实现3D图像引擎:(7)矩阵函数库

2011-03-03 19:39 by CoolJie, 527 阅读, 0 推荐, 收藏, 编辑
摘要:1. 数学分析1) 矩阵到底是什么,用它来干嘛? 千万不要把矩阵想复杂了,说白了,他和算盘是一类东西,矩阵根本就没有实际意义,他就是个数学工具而已,就好像敲算盘,珠子上上下下的按照一定的规律去拨弄,就能得到结果一样,矩阵是数学家们发明的一个工具,这个工具也有一系列规则,通过这些规则也可以计算出一些结果,只不过他不像算盘是用来做数字加减乘除用的,他是用来求解方程组的。学习完了矩阵的运算规则,就可以发现,所有对向量、点坐标的变换都可以通过矩阵运算来完成,这也是为什么3D图像的运算与矩阵息息相关了。比如方程组:x + 2y = 34x + 5y = 6就可以用三个矩阵来表示他们。系数矩阵:A =| 阅读全文