自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

操作系统双语阅读 - Schedulers调度器2

Most processes can be described as either I/O bound or CPU bound.大多数进程都可以描述为IO绑定或者CPU绑定。An I/O-bound process is one that spends more of its time doing I/O than it spends doing computations. A CPU-...

2013-10-31 17:49:00 88

LeetCode Triangle Bounus达成 动态规划法解法

TriangleGiven a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.For example, given the following triangle[ [2], [3,4]...

2013-10-31 11:09:00 152

关键帧和动画

关键帧和动画Keyframes and Animation关键帧就是预先记录各个级别的动画数据。前面的机械手和太阳系系统都是在运行的时候计算出动画的。关键帧就是一个对于模型各级别在某个时刻的重要位置。比如关键转完处,动作变向处等。通过一定算法,计算机能自动计算出其关键帧之间的动作位置。这样我们就能产生平滑的动画了。如果做过flash和photoshop的朋友都知道这个概念。但是...

2013-10-31 08:29:00 116

操作系统双语阅读 - Schedulers调度器

These processes are spooled to a mass-storage device (typically a disk), where they are kept for later execution.这些进程存储在进程池中,进程池存放在大容量存储器中,如磁盘,以便后续的载入运行。The long-term scheduler, or job scheduler...

2013-10-30 14:36:00 88

LeetCode Linked List Cycle 解答程序

Linked List Cycle Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?错误解法。因为Cycle可能出现在Link的中间的,所以需要检查其中间Nodes。bool hasCycle(ListNod...

2013-10-30 10:44:00 59

DirectX如何构建一个太阳系

基本上都是之前学过的知识,要运用好!总结运用的知识有:1 物体移位选择(transformation)2 树形数据结构管理整个场景的信息3 根据时间控制恒星旋转如下效果:首先设置太阳系各恒星的数据结构枚举太阳,恒星和月亮三个对象类// We classify the objects in our scene as one of three types.enum S...

2013-10-30 07:57:00 124

Direct3D中模拟机械手动作

人的动作是如何实现的呢?这就要用到分级网格(mesh)的知识了。所谓分级也属于场景管理的基本知识,就是把不同模型分级管理,比如人的手臂是一级,作为父母级,然后前臂是下一级,手掌又是一级,这样分开,以达到模拟人手动作的效果。如下:相当于一个机械手,以各个节点为分界,分级。跟一般的变形(transformation)差不多,只不过世界坐标作为root坐标,由root坐标分为一级一级的节...

2013-10-29 19:18:00 223

LeetCode Reverse Integer 带考虑第二种特殊情况

Reverse IntegerReverse digits of an integer.Example1:x = 123, return 321Example2:x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions to as...

2013-10-29 13:53:00 56

C++ 指针 多维数组传递参数

数组作为函数参数,其实就是把其第一个元素地址传递给函数。而多维数组一般都非常困惑我们,解决好多维数组参数传递也有多种实现方法,但是我觉得还是以The C++ Programming Language这本书为标准,看看如何做吧。C++之父的建议就是不要使用数组传递参数,而是把数组用类包起来,使用STL如:array, string,vector等。如果坚持要直接使用一般数组的话,会要应付各种...

2013-10-29 08:44:00 253

操作系统双语阅读 - PCB数据结构

the PCB is expanded to include information for each thread.PCB(进程控制块)被扩展为线程存储信息。PROCESS REPRESENTATION IN LINUX进程在Linux中的表示The process control block in the Linux operating system is represente...

2013-10-28 19:08:00 271

LeetCode Merge K Sorted Lists 问题和解答程序 C++ priority queue实现方法

Merge k Sorted ListsMergeksorted linked lists and return it as one sorted list. Analyze and describe its complexity.其实这个问题真没有什么“技巧”;想多了反而不好。不外乎就两种方法吧:1. 各列数量头一个数组成一个数组,然后取其最大者,插入新的数组。2. ...

2013-10-28 15:39:00 58

游戏碰撞检测 AABB包围体 sphere 圆形包围体计算

包围体Bounding Volumes有时候我们想要计算一个mesh模型的Bounding Volume。一般使用圆形和AABB。如下图,左边AABB,右边圆形:圆形是由它的圆心和半径确定其位置,AABB是有其最小和最大顶点确定位置。使用包围体的原因是可以只测试一个图形就确定这个包围体里面的所有meshes的碰撞状态。如果希望更加准确的碰撞,那么就可以测试到包围体重合之后...

2013-10-28 09:17:00 161

DirectX 操作.X格式文件总结

Loading an .X File导入.X格式的文件这个是微软格式的模型文件。存储各种任务,树木,花草等模型信息的文件,可以导入并显示与程序屏幕中,导入函数:HRESULT D3DXLoadMeshFromX( LPCSTR pFilename, DWORD Options, LPDIRECT3DDEVICE9 pDevice, LPD...

2013-10-27 22:24:00 305

LeetCode Rotate List 分析解答

看了很多热心人的推荐,觉得LeetCode应该也是个不错的练习算法的地方。问题:Given a list, rotate the list to the right bykplaces, wherekis non-negative.For example:Given1->2->3->4->5->NULLandk=2,return4->5-&g...

2013-10-27 10:36:00 58

C++ inline constexpr 内联函数和常量表达式函数问题

函数问题一)inline: 内联函数,就是相当于把被调用的函数硬嵌入调用它的函数中去,不用保存栈,所以速度快。1. 要使inline起作用,必须是inline函数定义(不但是声明)在其调用函数范围内2. 不同头文件包含相同inline函数,不是重定义,但是两个或多个inline函数必须一模一样。二)constexpr:如果参数是常量,就可以了在编译时计算的函数。 定义一个con...

2013-10-27 08:42:00 150

图形学 Direct3D中手动创建3D模型

手动写一个模型是非常麻烦的,这就是为什么需要美工来做3D模型,美工利用各种可视化的软件如:3DSmax, maya, Blender等等,那样方便做出各种3d模型。如果手工设置,直接编程出来的话,工作量会相当大,甚至不一定能做出我们想要的模型,但是理论上这是可能的,所以我们看看如何做。属性表当模型的mesh被优化,那么它会如下排序:属性表就是一个D3DXATTRIBUTERANGE...

2013-10-26 19:55:00 263

图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化

邻接三角形信息对于某些的模型操作mesh operations),例如优化,需要知道三角形的邻接信息。Mesh的adjacency array存储着这样的信息。ajacency array是一个DWORD数组。每个元素存储一个索引,表示一个mesh中的三角形。例如下标为i的就表示第i个三角形,可以通过计算得到三角形顶点索引信息:A = i · 3B = i · 3 + 1C =...

2013-10-26 18:53:00 198

双语阅读笔记 - 操作系统 - Process Control Block

It is important to realize that only one process can be running on any processor at any instant.要记住每一时刻一个处理器只能有一个进程运行。Process Control Block 进程控制块Each process is represented in the operating syst...

2013-10-26 15:42:00 150

DirectX的Vertex Buffer顶点缓冲的理解和应用 Shader必知必会

故名思义Vertex Buffer就是存放顶点的缓冲。相当于一个内存区,指明了这些几何图形的顶点的位置。一般简单的几何图形,如正方形,手动地可以定义这些顶点,定义好顶点之后,就需要如下这样来设置好,才能开始画图,而这正是DirectX里面最难理解的问题之一,和OpenGL也一样,同样需要这样设置的,OpenGL SuperBibl 第五版中居然把这个问题放到了差不多最后一个章节去介绍,可想而知...

2013-10-26 07:50:00 88

DirectX中如何分屏显示

有人认为这个很难做,其实在DirectX中是很方便做到的,就是利用视图转换技术(Viewport Transform)视图其实就可以想象成一个镜头口,对着什么地方,就能显示什么地方的东西。而3D图形里面可以说是后台缓冲(back buffer)的所见的内容。一般游戏都是把视图窗口布满整个back buffer的,但是我们可以把back buffer分隔开,以前的三国无双是可以分上下屏,让两个玩...

2013-10-25 18:30:00 227

算法导论Problem6-3 Youngtableau问题 堆排序应用

这道题大概就是要实现一个数组,这个数组中行所有元素都有序,列所有元素都有序。其实这也是应用堆排序的思想,就是把这个数组的看做是二叉树组成的。一个元素的下面一行的对应一个元素是它的左孩子,右边一个元素是它的右孩子。这样就可以应用堆排序来解决这个问题了。同时也是像堆排序一样,实际使用一维数组存储数据,人为规定(按照堆排序的规则,这个是关键思维)地构造二维数组来存储二叉树。详细程序如下:...

2013-10-25 14:17:00 89

操作系统双语阅读笔记 - Process

操作系统概念 Openrating system concepts是本非常好的书,解析的非常透彻,而且感觉是同样的概念它也讲了别的书没有讲的东西。本系列贴出重点句子,并加以翻译,本翻译把意译和直译结合起来,少数地方会增加注解,按情况来使用,因为思维习惯和表达方式的不一样,我认为这么专业的东西,不能都用直译,否则会显得不伦不类,甚至词不达意的,这也是很多计算机翻译书的通病。难以表达的句子还是真真...

2013-10-25 10:02:00 123

图形学 Direct3D的3D模型处理1

下面大部分内容来自DirectX龙书,整理了一下,不过没有太涉及模型格式问题。模型格式其实也是一些格式化的文档,保存了定点,单位向量,材质坐标等信息。这里主要讲怎么在DirectX里面怎么操作。Mesh由几何图形组成,一般是由三角形组成。Direct3D的.x的3d模型文件就是由三角形组成的。保存模型数据用ID3DXMesh,是有ID3DXBaseMesh集成而来的。ID3DXBase...

2013-10-24 18:48:00 186

d-ary heaps 多叉树堆排序C++实现

之前实现了堆排序,那是构造二叉树来实现堆排序的,但是其实二叉树还可以用大于等于二叉树来实现的,就是例如3叉树每个节点有三个孩子,4叉树,每个节点有四个孩子,等等。这个是算法导论的一道Problem,其实该注意的地方和堆排序是一样的,所以有了二叉树堆排序的基础之后就很好实现多叉树了。下面是C++程序:#include<iostream>#include<vector&...

2013-10-24 13:01:00 159

图形学 - 多层纹理技术的底层原理

多层纹理技术就是可以把多个纹理都贴在一个几何图形上,形成一个新的纹理。刚接触这个技术肯定不好懂,但是我们剖析其基本的底层原理就是:每一个纹理就是一张图片,每一张图片就相当于很多像素组合起来的文件,一般每个像素也是由32位组成的,所以把这些像素和不同像素的值“加”起来就可以形成新的像素了。如下图,是龙书书本上的图,但是读者不一定能看懂这个图的意思, 书本上的分析好像也不好懂,也许是偏于数学化...

2013-10-23 14:35:00 231

堆排序的应用 Priority queues 优先级排序

堆排序很多时候的实际应用并不如快速排序(quick sort)那么快,但是也有很多实际的应用,例如优先级排序就是其中之一。优先级排序可以应用到系统的调度算法中,人工智能中也经常要用到,熟悉这个算法很有好处。不要让名字误导我们,优先级队列其实数据结构不一定就是一个普通的队列数据结构,这里的底层数据结构反而是堆,当然也可以使用其他数据结构实现。Priority Queues应该是偏重于概念...

2013-10-23 11:05:00 71

Alpha Test 透明通道测试技术做篱笆效果图

Alpha test是可以通过测试然后丢弃不需要渲染的像素的。顾名思义就是根据他的alpha值与某特定值比较。这个技术做腐蚀效果,某些电影特技如:可以让一个人慢慢各个部位褪色,最后消失……等,而且不需要消耗什么计算时间。计算公式:IF as(Openration function)ref == true THENaccept pixel ELSE reject pixel ...

2013-10-22 19:44:00 153

TCPL C++资源管理简述

The C++ Programming Language 第五章5.2总结资源管理对于大型程序来说非常重要。内存泄漏轻则导致性能下降,严重则会引起程序崩溃等问题。C++的机制主要是constructor/destructor;下面是一个标准库lock类的用法:mutex m; // used to protect access to shared data// ...voi...

2013-10-22 14:56:00 55

Shader Effects 一些着色器的额外功能

Shader渐渐成为主流了,然而大多数公司我估计还是在使用普通的固定管道的功能吧,本文就总结一些用Shader能做,而用固定渲染管道不能做的功能,让大家看看shader的魅力。1. 丢弃像素这个是固定渲染管道所没有的功能,当然非要用固定渲染管道做差不多同样的效果是差不多可以的,就直接吧alpha值设计为0.但是之所以我说差不多,是因为用shader做的这个功能更加强大,shader是可以直...

2013-10-22 13:40:00 136

棋盘覆盖问题 C++实现11

具体问题陈述和相关解说可以参照百度百科:http://baike.baidu.com/link?url=Tk1lkOLnZ3ofYRYiLOCtvIk0MIcvgDCpF1Ab5TmZUs2fKXy2kS-mvRKo992tx6QlayP7s4vqqxmoipPSXCrwlq但我发现,百度百科的说明和《算法设计与分析》这本书是一样的,错的地方还是一样的错。到底出处是哪里?是谁抄谁的还是...

2013-10-22 12:27:00 207

最大字段和问题 难点分析和C++实现9

给定n个数组成的序列,求其中最大子段和,并规定其中如果所有数均为负值的时候,那么最大字段和为零。解决这样的问题需要用的算法是:分治法基本思路:1. 划分两个长度基本相同的子段,得出以下三种情况2.如果最大和出现在左边,就左边最大子段和为解3. 如果最大和出现在右边,就右边最大子段和为解4. 如果是最大和在左子段的最右边的数组成,和右子段的最左边的数组成,那么就合并这两个子段...

2013-10-21 13:10:00 103

TCPL C++迭代器的用法 用作参数传递 读写文件

C++数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是C++的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。例如下面是一个简单的程序:int main(){ string from,...

2013-10-21 08:57:00 242

平面阴影技术 DirectX例子 图形学2

平面阴影虽然不能满足所有的阴影要求,但是如果是相对简单的场景的话,用平面阴影也是个不错的选择,它的优点是速度快,并不需占用多少运算时间。步骤如下:1. 定位需要渲染阴影的物体,和阴影所在平面2. 计算出平面上阴影的物体定点,定义一定透明度,如50%透明度3. 渲染一、首先解决问题是如何计算方法就是利用向量代数和空间解析几何的知识,知道了光照的方向向量,物体定点,和平面位置,...

2013-10-20 21:12:00 96

算法数据结构C++实现8 堆排序 难点分析

算法导论第六章开始就开始介绍堆排序。这是个非常难理解的排序算法,主要需要经过三个步骤:1 大顶堆化; 2 利用大顶堆化函数简历大顶堆; 3 最后再利用前面两个函数进行排序这个算法有几个理解难点需要克服的:1. 计算堆中的孩子节点要仔细,因为堆排序用的是一位数组表示二维二叉树的概念的,这都是人为地把数值中的元素和二叉树的一个节点一个节点地第一对应起来的,所以要程序员自己计算好这些对应关系...

2013-10-20 15:27:00 80

TCPL - C++迭代器的用法 - 操作数组和数据流

C++的迭代器(iterator)是个非常好的技术,能灵活运用内带来很优雅的程序代码。1 遍历数组最简单的也是最常用的就是遍历访问一个数组了,如检查一个字符串里面是否含有某个字符:bool has_c(const string& s, char c) // does s contain the character c?{ auto p = find(s.begin(),s....

2013-10-20 09:05:00 157

Stenciling技术实现镜子效果 图形学1

本人花时间整理的渲染镜子的技术,有需要的朋友可以参照一下。出处。http://blog.csdn.net/kenden23简介:模板缓冲(The stencil buffer)(或者翻译为蒙蔽层缓冲吧)属于是一个后台缓冲,不过它跟back buffer不一样,它主要用来完成一些特效。比如:镜子效果,阴影效果等。它的缓冲大小是和一般的后台缓冲(back buffer)和深度缓冲(de...

2013-10-19 14:53:00 127

算法数据结构C++实现7 - 同时查找最大值和最小值优化算法

算法导论第九章开始的算法 同时查找最大值和最小值的算法。本算法并不是直接拿数组中的元素来和最大值和最小值比较的,而是先比较数组中两个数组,然后那其中小的和最小值对比,其中大的和最大值对比,那么算法就可以由原来需要对比2n次,降到只需要对比3n/2次了。对于一个无序查找最小值的算法一般都如下:template<typename T>T minimum(vector<T...

2013-10-19 10:43:00 357

空空如也

空空如也

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

TA关注的人

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