<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[夕加加的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cppyin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cppyin]]></copyright><item><title><![CDATA[Learning OpenGL : (5) Using OpenGL]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6258688</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6258688</guid><author>cppyin</author><pubDate>Fri, 18 Mar 2011 12:36:00 +0800</pubDate><description><![CDATA[<br />1. GLUT<br />OpenGL utility toolkit.<br />Because GLUT was originally not licensed as open source, a new GLUT implementation, freeglut, has sprung up to take its place.<br /> <br /> <br /><br />2. GLEW<br />GLEW make an easy way to obtain full access]]></description><category></category></item><item><title><![CDATA[Learning OpenGL : (4) What's OpenGL]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6258244</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6258244</guid><author>cppyin</author><pubDate>Fri, 18 Mar 2011 10:25:00 +0800</pubDate><description><![CDATA[<br />1. What is OpenGL<br />OpenGL is strictly defined as a software interface to graphics hardware.<br /> <br /> <br />2. Two Forms<br />OpenGl exists in two forms.<br />A software driver and a graphics card in your PC together make up an OpenGL implemen]]></description><category></category></item><item><title><![CDATA[Learning OpenGL : (3) 3D Programming Principles]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6255054</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6255054</guid><author>cppyin</author><pubDate>Thu, 17 Mar 2011 00:18:00 +0800</pubDate><description><![CDATA[<br />1. Coordinate Clipping<br />In two-dimensional space, the clipping region is the minimum and maximum x and y values that are inside the window.<br /> <br /> <br />2. Viewport<br />The viewport is the region with in the window's client area that is us]]></description><category></category></item><item><title><![CDATA[Learning OpenGL : (2) 3D Terminology]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6254777</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6254777</guid><author>cppyin</author><pubDate>Wed, 16 Mar 2011 22:00:00 +0800</pubDate><description><![CDATA[<br />1. Rendering<br />The process by which mathematical and image data is transformed into a 3D dimensional image.<br /> <br /> <br />2. Transformation<br />Vertex is moved around in space with a convenient mathematical construct called a transformation ]]></description><category></category></item><item><title><![CDATA[Learning OpenGL : (1) Concept of 3D]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6254663</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6254663</guid><author>cppyin</author><pubDate>Wed, 16 Mar 2011 21:07:00 +0800</pubDate><description><![CDATA[<br />1. Which 3D<br />The term three-dimensional, or 3D, means that an object being described or displayed has three dimension of measurement: width, height, and depth.<br /> <br /> <br />2. True 3D <br />To truly see in 3D, you need to actually view an o]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(15)三角形的光栅化 ]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6232453</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6232453</guid><author>cppyin</author><pubDate>Tue, 08 Mar 2011 20:15:00 +0800</pubDate><description><![CDATA[<br />1. 为什么要光栅化一个三角形<br />我们不能总让我们的引擎显示线框，要支持实心颜色、光照还有纹理贴图，这些都需要光栅化一个三角形作为支持。<br /> <br /> <br />2. 三角形的类型<br />为了方便光栅化，一般将三角形分为以下4种：<br /><br /> <br /> <br /> <br />3. 平底三角形光栅化<br />先上图：<br /><br />光栅化平底三角形的原理很简单，就是从上往下画横线。在图里我们取任意的一条光栅化直线，这条直线左边的端点x值为XL]]></description><category></category></item><item><title><![CDATA[Effective C++ 学习笔记(1) : 语言联邦、弱化预编译器、const、初始化]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6230198</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6230198</guid><author>cppyin</author><pubDate>Mon, 07 Mar 2011 21:51:00 +0800</pubDate><description><![CDATA[来源：Effective C++ P11 ~ P23级别：200C++没有绝对适当的语言用法注意：C++是一个四大语言联邦国：C、Object-Oriented C++、Template C++、STL。const double AspectRatio = 1.653;注意：常量问题上多用编译器而少用预处理器。预处理会额外增加debug时追踪变量的时间、使程序变胖。除非编译老到对const的处理有额外内存开销，否则没必要定义宏常量。class GamePlayer { static const int Nu]]></description><category></category></item><item><title><![CDATA[C++ Primer 学习笔记(2) : 基本语言2]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6230127</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6230127</guid><author>cppyin</author><pubDate>Mon, 07 Mar 2011 21:15:00 +0800</pubDate><description><![CDATA[来源：C++ Primer P49 ~ 67级别：100const int i, j = 0;注意：常量在定义时必须初始化。extern const int bufsize = 100;注意：在全局作用域声明的const变量默认为文件内部对象，在加上extern后，可以跨编译单元访问。int & refval = ival;注意：非const引用初始化后，一直绑定到该对象。且类型必须与绑定对象相同。double dval = 1.1;const int &ri = dval;注意：const引用可以绑定到不]]></description><category></category></item><item><title><![CDATA[C++ Primer 学习笔记(1) : 基本语言]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6230054</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6230054</guid><author>cppyin</author><pubDate>Mon, 07 Mar 2011 20:32:00 +0800</pubDate><description><![CDATA[来源：C++Primer P1 ~ P49级别：100std::endl注意：效果不仅仅是换行，还会刷新缓冲区，以便立即看到结果。在debug过程中的log应该每句都用endl刷新缓冲区，避免因崩溃导致的缓冲区信息丢失，造成调试误导。MS-DOS窗口中输入Ctrl+Z来输入文件结束符注意：在一些简短的小测试程序中，经常会用while (std::cin >> value)来获取输入，这时按回车并不会导致退出循环，按Ctrl+Z则可以达到目的。true和false注意：任何非0值都代表true。0值代表fal]]></description><category></category></item><item><title><![CDATA[VC2010中"Include Directories" 和 "Additional Include Directories"的区别]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6225596</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6225596</guid><author>cppyin</author><pubDate>Sat, 05 Mar 2011 15:50:00 +0800</pubDate><description><![CDATA[<br />右键一个Project，可以发现有两个地方设置Include的相关目录：<br />1. VC++ Directories -> Include Directories<br />2. C/C++ -> General -> Additional Include Directories<br /> <br />不知道具体有什么区别，后在MSDN上得到答案：<br />“VC++ Directories -> Include Directories” : Directory settings di]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(14)背面消隐的三大陷阱]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6207206</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6207206</guid><author>cppyin</author><pubDate>Fri, 25 Feb 2011 11:48:00 +0800</pubDate><description><![CDATA[<br />1. 为什么要背面消隐<br />通过之前的DEMO，能够知道如果在渲染过程中多边形越多，那么要不处理的内容就越多，就越消费计算机的处理能力。对于物体来说，一般我们只看到它面对我们的面，可能不是正对着，但是肯定有很多面是完全背对我们的，我们就应该在渲染时跳过他们。这将减少大约一半的三角形渲染量。原理其实很简单，就是向量与平面的关系，这个原理我在参数化直线与平面的那篇文章中特意推导了整个来龙去脉。<br />我喜欢在2D俯视图中来分析问题，如下图：<br /><br /> <br /> <br /]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(13)把宽高比、透视投影矩阵、屏幕变换矩阵说透]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6203000</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6203000</guid><author>cppyin</author><pubDate>Wed, 23 Feb 2011 16:58:00 +0800</pubDate><description><![CDATA[<br />1. 问题的引出<br />这个问题的引出又是因为《3D游戏编程大师技巧》这书里面有的问题没讲明白，有的东西又不对。<br />首先宽高比这个名词的出现是因为我们的PC屏幕不是正方形的，屏幕宽度 : 屏幕高度 就是宽高比。但是我们上次搭建的相机系统的视平面是正方形的，那么当很多物体投影到视平面上后，必然最后完成的是一幅正方形的画，而屏幕是长方形的，这时只有两种办法：<br />1) 把照片压扁，这样画上的所有物体都被压扁了。<br />2) 把照片上下多余的两条分别裁下来，只保留屏幕大小的画，这]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(12)构建支持欧拉和UVN的相机系统]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6198669</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6198669</guid><author>cppyin</author><pubDate>Mon, 21 Feb 2011 22:02:00 +0800</pubDate><description><![CDATA[<br />1. 相机需要哪些参数<br />先看下图了解一下上次我们建立的相机在3D世界中的意义：<br /><br />如Hello3DWorld中介绍的，在相机坐标系下，相机朝向正Z轴，相机有视野角度，因为视野角度，形成了上图的视锥体，视平面就是要被透视投影到的2D平面。<br /> <br />在这幅图里增加了近裁剪面与远裁剪面。他们是做什么的呢？在现实中，我们会发现，离眼睛太远的东西我们就看不到了，离眼睛太近的东西又会挡住大部分景色。于是就定义了远裁剪面和近裁剪面——比近裁剪面还近的物体和比远裁剪]]></description><category></category></item><item><title><![CDATA[C++运算符优先级列表收藏备查]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6194664</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6194664</guid><author>cppyin</author><pubDate>Sat, 19 Feb 2011 10:43:00 +0800</pubDate><description><![CDATA[C++运算符优先级列表收藏备查]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(11)讲解3D变换矩阵的推导]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6193076</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6193076</guid><author>cppyin</author><pubDate>Fri, 18 Feb 2011 12:36:00 +0800</pubDate><description><![CDATA[1. 数学分析
上一篇中间在做旋转的时候我直接用了旋转变换矩阵，当时觉得很尴尬，因为之前没说过是怎么产生的该矩阵。
 
1) 矩阵和向量的微妙关系
如果您还记得向量加法的几何意义，那么不难看懂下面的等式：
      [x]    [x]     [0]    [0]          [1]          [0]          [0]
v = [y] = [0] + [y]]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(10)Hello3DWorld]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6191491</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6191491</guid><author>cppyin</author><pubDate>Thu, 17 Feb 2011 14:35:00 +0800</pubDate><description><![CDATA[<br />1. 数学分析<br />前面我们已经把预先想到的可能会用到的数学工具都封装好了，从这篇开始，应该很少出现一大篇都是数学推导的了，终于看见光明了，这次我们将开始第一个3D程序的编写，所以题目就叫Hello3DWorld吧。<br /> <br />0) 3D程序的本质<br />很多书都会先介绍“3D流水线”的词，但其实明白3D程序的人一下子就知道这是什么，而不了解的人看了这个词也没有意义。其实我也觉得没什么特殊意义，因为所有计算机程序都是一个一个流程执行下来的，不全都是某某流水线么。简单来说，]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(9)四元数函数库]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6177742</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6177742</guid><author>cppyin</author><pubDate>Thu, 10 Feb 2011 21:24:00 +0800</pubDate><description><![CDATA[<br />1. 数学分析<br />1) 四元数是什么东西？<br />这个东西算盘、矩阵、复数是一类东西，即数学工具，数学家们创造了这个东西来解决一些数学问题。其实四元数是一种超复数，他不是只有一个虚数的复数，而是有三个虚数的复数。我们先回顾一下复数吧。<br /> <br />2) 虚数的来源<br />实数集中没有-1的平方根，因为没有哪个实数的平方等于-1，所以数学家们就创造它——虚数i，并且定义了i * i = -1。<br />所以我们可以计算sqrt(-4)了，sqrt(-4) = 2*i<]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(8)参数化直线与3D平面函数库]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6177213</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6177213</guid><author>cppyin</author><pubDate>Thu, 10 Feb 2011 15:46:00 +0800</pubDate><description><![CDATA[<br />1. 数学分析<br />1) 参数化直线<br />还记得我们在学习向量时介绍的位移向量吗？参数化直线的原理和他相同。其实所谓参数化直线，就是通过一个参数t来表示直线上的一个线段，当t为0时，则取线段的一端的端点，当t取1时，则取到另一端的端点。如图：<br /><br />核心原理就是向量加法的几何意义，Vd是加数，通过t(从0到1)去乘以这个Vd，则可以描述向量p，而p在某个t时的坐标值，就是从点P1到点P2的线段在t时的坐标值。注意这里我们使用的是图中的p = p1 + t * vd，这]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(7)矩阵函数库]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6175733</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6175733</guid><author>cppyin</author><pubDate>Wed, 09 Feb 2011 16:35:00 +0800</pubDate><description><![CDATA[<br />1. 数学分析<br />1) 矩阵到底是什么，用它来干嘛？<br /> 千万不要把矩阵想复杂了，说白了，他和算盘是一类东西，矩阵根本就没有实际意义，他就是个数学工具而已，就好像敲算盘，珠子上上下下的按照一定的规律去拨弄，就能得到结果一样，矩阵是数学家们发明的一个工具，这个工具也有一系列规则，通过这些规则也可以计算出一些结果，只不过他不像算盘是用来做数字加减乘除用的，他是用来求解方程组的。学习完了矩阵的运算规则，就可以发现，所有对向量、点坐标的变换都可以通过矩阵运算来完成，这也是为什么3D图像的]]></description><category></category></item><item><title><![CDATA[从零实现3D图像引擎：(6)向量函数库]]></title><link>https://blog.youkuaiyun.com/cppyin/article/details/6174087</link><guid>https://blog.youkuaiyun.com/cppyin/article/details/6174087</guid><author>cppyin</author><pubDate>Mon, 07 Feb 2011 22:46:00 +0800</pubDate><description><![CDATA[1. 数学分析1) 基本定义：向量由多个分量组成，2D/3D向量表示一条有向线段。下面的ux,uy就是两个分量。向量u = ，如果从点P1(x1, y1)指向点P2(x2, y2)，则：U = p2 - p1 = (x2-x1, y2-y1) = 向量被定义后，总是相对于原点的，所以可以用一个点来表示从原点指向该点的向量。2) 向量的范数(norm)范数就是向量长度，是从原点到终点的距离。用|u|表示，所以：|U| = sqrt(Ux2 + Uy2)|U| = sqrt(Ux2 + Uy2 + Uz2)3)]]></description><category></category></item></channel></rss>