自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (1)
  • 收藏
  • 关注

原创 计算机图形学:纹理

第八章:纹理(Texture)1 程序贴图(Procedure Texture)由计算机算法生成的贴图,而非存储的数据,有低存储的优点。主要用于木材,大理石,花岗岩,金属,石头等材质。程序贴图纹理通常用于离线渲染应用程序,而图像纹理在实时渲染中更为常见,毕竟快。2 纹理合成(Texture Synthesis)2.1 Pixel-based texture synthesisSynt...

2020-03-13 19:19:48 2323

原创 计算机图形学:Mesh

第七章:Mesh0 基本描述网格有一系列的三角面片组成三角面片包含三个点的索引点索引可以在点表中找到相应的点1 Tessellation1.1 基础网格化方法(低效)检测多边形的任意两顶点连线是否与任意边相交如果相交则无法切割,否则可以切割,继续用该方法进行三角化.1.2 Ear clipping取相邻三个顶点i,i+1,i+2,检查线段[i, i+2]是否与边相交...

2020-03-13 19:11:18 7702

原创 计算机图形学:贝塞尔曲线和B样条

贝塞尔曲线和B样条1.Bézier curve贝塞尔曲线一个连续函数都可以用一个多项式无限逼近贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。1.1 一阶贝塞尔曲线B1(t)=(1−t)P0+tP1,t∈[0,1]\mathbf{B_1(t)= (1-t)P_0 + tP_1, t\in[0,...

2020-03-07 13:05:28 7951 1

原创 计算机图形学:光线追踪加速

Ray Tracing Acceleration1.Hierarchical (层次性) Bounding Volumes (包围盒)1.1 Axis-Aligned Bounding Box Creation(AABB)the box is parallel to the x,y,z axis of the world coordinate systemCreationFor ...

2020-03-05 16:15:29 1238

原创 计算机图形学:光线追踪

1.Ray Tracing AlgorithmIntersectColor( vBeginPoint, vDirection){ Determine IntersectPoint; Color = ambient color; for each light Color += local shading term; if(surface is ...

2020-02-26 16:44:31 649

原创 计算机图形学:PBR

BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数参考Spherical Coordinate (球面坐标)方向相对法线的角度θ\bm \thetaθ,称为 极角(Polar Angle) 或天顶角(Zenith Angle)方向在平面上的投影相对于平面上一个坐标轴的角度φ\bm \varphiφ,称为方位角(Az...

2020-02-26 16:37:30 2333

原创 计算机图形学:颜色模型、图像基本知识、Phong光照模型

颜色模型、图像基本知识、Phong光照模型1.颜色模型1.1 RGB Color SpaceThe reason why we pick red, green, and blue?essentially because of the structure of our visual systemOur visual system is sensitive to those three ...

2020-02-23 14:34:06 2179

原创 计算机图形学:基本变换

基本变换1 基向量的变换1.1 基向量的变换初始基向量为$\hat{i}(1,0),\hat{j}(0,1)$,经过变换后变为$\hat{i}(3,-2), \hat{j}(2,1)$1.2 线性变换对向量的作用仅需取出向量的坐标,将它们分别于矩阵的特定列相乘,然后将结果相加即可逆时针旋转90°的例子当两个向量变为线性相关时,两个向量共线,二维空间会被挤压到一维2 Tra...

2020-02-23 13:15:49 1376

原创 UML(Unified Modeling Language)

UML(Unified Modeling Language)可见性- : private+ : public# : protected类之间的关系1.关联关系1.1单向关联1.2双向关联1.3自关联1.4多重性关联1.5聚合关系(Aggregation)1.6组合关系(Composition)组合与聚合的区别语义上的区别组合的成员对象生命周期与自己一致...

2019-11-22 08:52:23 105

原创 Linux命令:系统

系统基础命令1.进程管理1.1进程信息ps:显示当前控制台下,当前用户的进程,仅某个时间点 top:实时显示进程信息1.2结束进程kill -s signal pid:向pid发送信号,默认为TERM killall p_name:通过进程名结束进程,可用通配符2.检测磁盘空间2.1挂载mount -t type a b:将a以type文件系统类型挂载到b上...

2018-09-15 13:25:53 138

原创 Linux命令:文件处理

文件处理1.浏览文件系统‘.‘表示当前目录‘..‘表示上级目录cd(change directory): 切换目录,无参数时回到用户目录pwd (print working directory): 输出当前工作目录ls:列出文件当参数为目录时将列出目录内的文件 可以使用通配符筛选,my*表示列出以my开头的文件-l 显示文件的属性-F 可区分文件格式,*表示可...

2018-09-15 09:43:18 200

原创 从零开始写光栅化渲染器4:三维物体的呈现

1.三维物体的呈现过程 这里主要详细介绍投影转换及屏幕映射。2.投影转换当模型转换到相机空间时,便要对顶点进行裁剪处理,剔除那些不在视锥体之内的顶点。 视锥体的空间如下,包含一个近裁剪面和一个远裁剪面,以及一个视角角度Fov,视角屏幕的宽高比Aspect。 投影转换矩阵如下: ⎡⎣⎢⎢⎢⎢Cot(fov/2)/Aspect0000Cot(fov/2)0000(Far+Near)/(Far

2016-11-20 11:46:48 2316 2

原创 从零开始写光栅化渲染器3:三角形光栅化

1.平底三角形光栅化我们已经知道如何绘制一条2D直线,接下来我们开始绘制实心三角形。其实原理比较简单,如下图是一个平底三角形,V2.y==V3.y,所以我们只要沿着三角形的两条边不断画直线,就可以将三角形填满。首先我们必须确定每条直线的左右两个点,即$V_L和V_R$,我们可以通过插值法确定,例如$V_L.x$可以这样得到:  VL.x=V1.x+(V2.x−V1.x)∗factorV_L.x =

2016-11-08 10:54:25 3697 4

原创 从零开始写光栅化渲染器2:直线绘制光栅化算法

直线绘制光栅化算法1.数值微分DDA(Digital Differential Analyzer)算法1.1原理引入增量思想,以dx≥dy(斜率[0,1])为例,考虑直线y=kx+b,当x步进为1时,y步进为k,即yi+1=yi+ky_{i+1}=y_i+k ,根据四舍五入法即可绘制直线1.2伪代码y = y1;for(x:[x1,x2]){ drawPixel(x,y); y

2016-11-05 15:40:55 3373

原创 读过的书

买书如山倒,看书如抽丝操作系统《深入理解计算机系统》★★★★★ 《鸟哥的linux私房菜》★★★ 《UNIX环境高级编程》★★★★ 《LINUX系统编程》★★★ 《Linux就是这个范儿》★★语言《汇编语言》★★★★★ 《C语言程序设计》★★★★★ 《C和指针》★★★★ 《C陷阱与缺陷》★★★ 《C专家编程》★★★ 《C++ Primer》★★★★★ 《Accelerated C

2016-10-19 09:59:32 1010

原创 校招总结(华为、远景、新美大、百度、腾讯、网易游戏)

校招总结10月中旬(2016),结束了几个月的校招之旅,最终选择了网易游戏,准备好好养猪,以下均为现场面试的经历,所有题目都是回忆版,可能有一些遗漏,真正面试题量≥回忆版,每个公司的面试也根据面试官而风格迥异,以下仅供学习参考,()内地点为意向工作地,所有面试均在南京进行1.华为FX(C++研发-杭州)机试三道编程题,难度相对校招机试题更难,最后每道都有一个测试用例没过一面直接打开我的github

2016-10-19 09:48:28 4928 1

原创 3.关联容器

Item19:理解相等(equality)和等价(equivalence)的区别equality:调用operator== equivalence:!(aItem20:为包含指针的关联容器指定比较类型不可以通过创建函数来指定,因为关联容器模板的参数都是类型,可以通过继承public binary_function<const type*,const type*,bool>用于比较指针所指对象。

2016-08-07 16:29:19 445

原创 快慢指针

快慢指针我们可以让两个指针每次递进不同的步数来巧妙的完成一些任务1.判断链表是否有环指定两个指针,快指针每次走两步,慢指针每次走一步,若最终两个指针指向相同的节点,则链表存在环。 代码如下: 2.找到链表环入口通过上面的例子我们可以发现,7号节点和1号节点往前走5步都刚好到达6号节点(链表环的入口),这是巧合还是确实是这样呢? 我们可以进行如下推导: 当快慢指针相遇时,两者走的步数

2016-08-03 11:29:56 528

原创 2.vector和string

Item13:vector和string优先于动态分配的数组如果在多线程环境下使用了引用计数的string,应当注意因支持线程安全而导致的性能问题。是否能通过改变某个预处理变量的值禁止引用计数开发一个不使用引用计数的string实现使用vector< T >替换Item14:使用reserve来避免不必要的重新分配Item15:注意string实现的多样性通常包含size,capaci

2016-07-23 11:36:15 544

原创 1.容器

Effective STL—容器Item01慎重选择容器类型基于节点的容器指针,引用变为无效的次数少,正在删除的元素指向除外,如list。Item02不要试图编写独立于容器类型的代码不同的容器特性不一样迭代器失效的规则也不一样可以采用typedef vector< Widget > widgetContainer类型定义的方式,减少改动的代码。Item03确保容器中的对象拷贝正确而高效将子类

2016-07-11 15:45:59 582

原创 从零开始写光栅化渲染器1:绘制一个像素点

1.准备工作光栅化渲染器的第一步就是绘制一个像素点,然后再进行线,三角形的绘制,这里主要通过directx9(具体哪个版本不重要,主要是用来绘制,也可以通过其它方式)进行像素点的绘制。//DirectX是自己定义的一个类,主要负责DirectX设备的创建,以及图形的绘制bool DirectX::initialDirectX(HINSTANCE hInstance, HWND hWnd, int

2016-06-21 16:05:34 4887

原创 从零开始写光栅化渲染器0:创建windows窗口

0.光栅化渲染器概述主要实现了以下功能:2D部分:光栅化2D点光栅化2D直线光栅化2D三角形3D部分:把顶点从三维世界空间变换至二维屏幕空间,把顶点连线(如各种三维正多面体)光栅化成wire frame模型三角形光栅化使用深度缓冲实现简单的纹理映射,先做屏幕空间的插值,然后实现简单的透视纹理校正实现简单的顶点光照,使用顶点颜色插值实现Gouraud shading具体参考以下前辈

2016-06-20 20:30:09 4549

原创 状态模式

状态模式定义:Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.允许一个对象在其内部状态改变时改变它的行为,看起来就像修改了它的类  类似魂斗罗的游戏中,我们操纵的英雄会有不同的状态,而在不同的状态下,对应不同的输入会有

2016-06-01 16:26:47 466

原创 单例模式

单例模式定义:Ensure a class has one instance, and provide a global point of access to it.确保一个类只有一个实例,并且提供一个全局访问的途径。一个系统中我们定义一个文件系统来管理所有的文件操作,单例模式的经典实现如下:1.经典实现class FileSystem{public: static FileSystem

2016-05-26 22:28:19 335

原创 原型模式

原型模式定义:  原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。  在游戏中我们会遇到各种各样的怪物,我们为了创建各种不同的怪物,可以简单粗暴的为每个怪物类设计一个创建类,关系如下:   1.粗暴方式:class Monster //怪物基类{ // Stuff...};class Ghost : pu

2016-05-24 22:23:00 507

原创 数据流中的中位数

数据流中的中位数题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路: 代码:class Solution {public: void Insert(int num) { int size = minHeap.size

2016-05-20 15:27:45 432

原创 享元模式

享元模式运用共享技术有效地支持大量细粒度的对象。1.一个简单的场景在游戏场景中,经常会出现大量的树木,形成森林。 每一个树基本有如下部分组成:class Tree{private: Mesh mesh_; //3D网格模型 Texture bark_; //树皮材质 Texture leaves_; //树叶材质 Vector position_

2016-05-18 21:10:47 438

原创 命令模式

Commands are an object-oriented replacement for callbacks.

2016-05-17 21:37:33 369

原创 编程之美2.16最长递增子序列

思想:对每一个长度建立其最大值的记录maxV,当输入一个新值v时,找到最大值小于v的最后一个索引i,若i为maxV的最后一个索引,则最大长度maxL+1,否则maxV[i+1]=v;代码:#include #include #include #include #include #include using namespace std;int find_index(vec

2016-04-07 12:50:29 494

转载 C++静态库与动态库

C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非

2016-04-07 09:32:47 378

原创 KMP算法

KMP算法:next计算         0   1   2   3    4   5   6   7   8 sub  A   B   C   D   A   B   C   F   Xnext  -1  0   0   0    0   1    2   3  0  指前面有多少个匹配相同第0位为标记位-1,第1位为0;第2位对应前一位字符B,next为0,B和A(su

2016-04-06 16:55:05 339

原创 编程之美2.8找符合条件的整数

问题:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。思路:建立模N的余数记录表,通过动态规划的思想找到相应的M;例子:当N=3时:Record1101000  11111  2 11 当

2016-04-04 20:32:13 426

原创 10个房间里放着随机数量的金币

10个房间里放着随机数量的金币。每个房间只能进入一次,并只能在一个房间中拿金币。 一个人采取如下策略:前四个房间只看不拿。随后的房间只要看到比前四个房间都多的金币数, 就拿。否则就拿最后一个房间的金币。编程计算这种策略拿到最多金币的概率。#include #include #include using namespace std; const int rooms = 10; cl

2016-03-20 12:12:31 693

原创 VISITOR(访问者)——对象行为模式

1.意图表示一个作用于某对象结构中的各元素的操作。它使你在不改变各元素类的前提下定义作用于这些元素的新操作。2.适用性一个对象结构包含很多类对象,而你想根据对象的类别对这些对象实施不同的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。

2016-03-15 15:50:29 408

原创 227. Basic Calculator II

常用方法为两个栈,数值栈与操作符栈,每次操作符入栈前比较优先级,小的推迟运算。以下是不用栈的方法, class Solution { public: int calculate(string s) { istringstream is('+'+s+'+'); char op; int result=0,n,prevalue=0;

2016-03-15 13:05:39 294

原创 OBSERVER(观察者)——对象行为模式

1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。2.适用性当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将二者封装在独立的对象中以使它们可以 各自独立地改变和复用。当一个对象改变需要同时改变其它对象,而不知道具体有多少对象有待改变(数量)。当一个对象必须通知其它对象,而它又不知道这些对象是谁。3.结构4.实现观察多个目

2016-03-14 19:48:59 676

原创 309.Best Time to Buy and Sell Stock with Cooldown

1.基本思路:此题可通过DP来解决,但状态转移方程的构想不是那么明显,首先可以通过两个数组来表示买与卖的信息:buy[i]:表示第i天为止,最近一次股票购入后所持有的利润sell[i]:表示第i天为止,最近一次股票抛售后所持有的利润其中:最近一次表示在第i天或者之前所做的股票交易。2.状态转移方程buy[i] = max(buy[i-1],sell[i-2]-prices[i]); /

2016-03-14 16:36:07 383

原创 STRATEGY(策略)-对象行为模式

1.意图定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。使得算法独立于客户而变化。2.适用性许多相关的类仅行为有异:提供了一种用多个行为中的一个来配置一个类的方法。需要使用一个算法的不同变体:这些变体实现为一个算法的类层次时。算法使用客户不该知道的数据:以避免暴露复杂的、与算法相关的数据结构。类中的操作以多个条件语句的形式出现:将相关的条件分支移入它们各自的Strategy类

2016-03-14 12:33:42 494

原创 310. Minimum Height Trees

310. Minimum Height TreesFor a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with

2016-03-13 11:45:06 363

原创 8.定制new和delete

Item49:Understand the behavior of the new-handler.set_new_handler允许客户指定一个函数,在内存无法获得满足时调用。Item50:Understand when it makes sense to replace new and delete.当需要改善效能,对heap运用错误进行调试,收集heap使用信息时。Item51:Adhere

2016-03-12 22:19:29 313

编译原理实验报告

实现一个简单语言(CPL)的编译器(解释器)

2013-06-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除