摘要: 显示列表:想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码。这次我将教你如何使用显示列表,显示列表将加快程序的速度,而且可以减少代码的长度。当你在制作游戏里的小行星场景时,每一层上至少需要两个... 阅读全文
posted @ 2014-10-06 16:21 fish7 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 飘动的旗帜:这一课从第六课的代码开始,创建一个飘动的旗帜。我相信在这课结束的时候,你可以掌握纹理映射和混合操作。大家好!对那些想知道我在这里作了些什么的朋友,您可以先按文章的末尾所列出的链接,下载我那毫无意义的演示(Demo)看看先!我是bosco,我将尽我所能教您来实现一个以正弦波方式运动的图象。... 阅读全文
posted @ 2014-10-06 16:10 fish7 阅读(729) 评论(1) 推荐(0) 编辑
摘要: 加载3D世界,并在其中漫游:在这一课中,你将学会如何加载3D世界,并在3D世界中漫游。这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码。这一课是由Lionel Brits (βtelgeuse)所写的。在本课中我们只对增加的代码做解释。当然只添加课程中所写的代码,程序是不会运行的。如果您有... 阅读全文
posted @ 2014-10-06 16:00 fish7 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 3D空间中移动图像:你想知道如何在3D空间中移动物体,你想知道如何在屏幕上绘制一个图像,而让图像的背景色变为透明,你希望有一个简单的动画。这一课将教会你所有的一切。前面的课程涵盖了基础的OpenGL,每一课都是在前一课的基础上创建的。这一课是前面几课知识的综合,当你学习这课时,请确保你已经掌握了前面... 阅读全文
posted @ 2014-10-06 15:26 fish7 阅读(1236) 评论(0) 推荐(0) 编辑
摘要: 混合:在这一课里,我们在纹理的基础上加上了混合,它看起具有透明的效果,当然解释它不是那么容易,当希望你喜欢它。简单的透明OpenGL中的绝大多数特效都与某些类型的(色彩)混合有关。混色的定义为,将某个象素的颜色和已绘制在屏幕上与其对应的象素颜色相互结合。至于如何结合这两个颜色则依赖于颜色的alpha... 阅读全文
posted @ 2014-10-05 14:31 fish7 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 下一段代码绘制贴图立方体。我只对新增的代码进行注解。如果您对没有注解的代码有疑问,回头看看第六课。int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制{ glClear(GL_COLOR_BUFFER_BI... 阅读全文
posted @ 2014-10-05 14:27 fish7 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 光照和键盘控制:在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观。这一课我会教您如何使用三种不同的纹理滤波方式。教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的光照。这一课包含了很多内容,如果您对前面的课程有疑问的话,先回头复习一下。进入后面的代码之前,很好的理解... 阅读全文
posted @ 2014-10-05 14:18 fish7 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 纹理映射:在这一课里,我将教会你如何把纹理映射到立方体的六个面。学习 texture map 纹理映射(贴图)有很多好处。比方说您想让一颗导弹飞过屏幕。根据前几课的知识,我们最可行的办法可能是很多个多边形来构建导弹的轮廓并加上有趣的颜色。使用纹理映射,您可以使用真实的导弹图像并让它飞过屏幕。您觉得哪... 阅读全文
posted @ 2014-10-05 13:57 fish7 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 3D空间:我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体。在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象。我们给三角形增加一个左侧面,一个右侧面,一个后侧面来生成一个金字塔(四棱锥)。给正方形... 阅读全文
posted @ 2014-10-05 09:59 fish7 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 旋转:在这一课里,我将教会你如何旋转三角形和四边形。左图中的三角形沿Y轴旋转,四边形沿着X轴旋转。上一课中我教给您三角形和四边形的着色。这一课我将教您如何将这些彩色对象绕着坐标轴旋转。其实只需在上节课的代码上增加几行就可以了。下面我将整个例程重写一遍。方便您知道增加了什么,修改了什么。我们增加两个变... 阅读全文
posted @ 2014-10-05 09:41 fish7 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 添加颜色:作为第二课的扩展,我将叫你如何使用颜色。你将理解两种着色模式,在下图中,三角形用的是光滑着色,四边形用的是平面着色上一课中我教给您三角形和四边形的绘制方法。这一课我将教您给三角形和四边形添加2种不同类型的着色方法。使用Flat coloring(单调着色)给四边形涂上固定的一种颜色。使用S... 阅读全文
posted @ 2014-10-05 09:20 fish7 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 你的第一个多边形:在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形。读完了这一课,你会学到如何在空间放置模型,并且会知道深度缓存的概念。第一课中,我教您如何创建一个OpenGL窗口。这一... 阅读全文
posted @ 2014-10-05 08:31 fish7 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题意:N个点,形成一棵树,边有长度。M个询问,每个询问(a,b),询问a和b的距离思路:模板题,看代码。DFS预处理算出每个结点离根结点的距离。注意:qhead[maxn],而不是qhead[maxm]。输出用%I64d,不要用%lld。C++ RE后 尝试用 G++交。代码:struct node... 阅读全文
posted @ 2014-10-04 21:53 fish7 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 题意:N个点,构成一棵树。给出这棵树的结构。M条边,(a1,b1)...(am,bm),代表给树的这些点对连上边。这样就形成了有很多环的一个新”树“。现在要求你在原树中断一条边,在M条边中断一条边,使得新”树“被分成两个部分。问有多少种方案。思路:连上某条新边(a,b),则必定形成一个环。环的路径是... 阅读全文
posted @ 2014-10-04 20:35 fish7 阅读(410) 评论(0) 推荐(0) 编辑
摘要: /* *算法引入: *树上两点的最近公共祖先; *对于有根树的两个结点u,v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u,v的祖先且x的深度尽可能大; *对于x来说,从u到v的路径一定经过点x; * *算法思想: *Tarjan_LCA离线算法; *Tarjan算法基... 阅读全文
posted @ 2014-10-04 15:38 fish7 阅读(1015) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一棵树的结构。给出两个点X和Y,求它俩的LCA。思路:只需求两个点的LCA,用了两种方法,一种离线tarjan,一种直接搞。看代码。代码:方法一:直接搞。int const maxn = 10005;int T,n,a,b;int fa[maxn];int X,Y;int main(){ ... 阅读全文
posted @ 2014-10-04 15:12 fish7 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题意:n堆石头,每堆石头个数:s[1]...s[n]。每人每次可以选择在一堆中取若干个(不能不取),或者把一堆石头分成两堆(两堆要都有石头)。无法操作者负。数据范围:(1 ≤ N ≤ 10^6, 1 ≤ S[i] ≤ 2^31 - 1)思路:S[i]太大了,直接求SG铁定TLE,所以先把SG打出来看... 阅读全文
posted @ 2014-10-03 20:35 fish7 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意:一排石头,个数是K。有n个数,a1...an。每人每次取石子只能取连续的x个。x属于a1...an的一个。没法取者负。思路:简单的SG。但是TLE!后面加了一个优化~这个优化不好想到吧,看了别人的代码才发现的。就是把a1...an中重复的去掉!。。。直接看代码。代码:int sg[1005];... 阅读全文
posted @ 2014-10-03 20:28 fish7 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 题意:3堆石头,个数分别是m,n,p。两个轮流走,每走一步可以选择任意一堆石子,然后取走f个。f只能是菲波那契中的数(即1,2,3,5,8.....)取光所有石子的人胜。判断先手胜还是后手胜。思路:简单SG。看代码。代码:int sg[1005];int dfs(int x){ if(sg[x... 阅读全文
posted @ 2014-10-03 20:23 fish7 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题意:有一张W*H的纸片。每人每次可以横着撕或者竖着撕,先撕出1*1那一方胜。数据范围:W and H (2 <= W, H <= 200)思路:很好抽象出游戏图的模型,用SG解决。直接看代码。代码:int dp[maxn][maxn];int sg(int w,int h){ if(dp[w... 阅读全文
posted @ 2014-10-03 16:05 fish7 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个由N个点组成的一张有向图,不存在环。点的编号是0~N-1。然后给出M个棋子所在的位置(点的编号)【一个点上可同时有多个棋子】。每人每次可移动M个棋子中的一个棋子一步,移动方向是有向边指向的方向。最后无法移动棋子的人输。思路:一眼就可看出的裸的SG,直接看代码吧。代码:int sg[100... 阅读全文
posted @ 2014-10-03 10:58 fish7 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 题意:1 ×n 个格子,每人每次选一个格子打上叉(不得重复),如果一个人画完叉后出现了连续的三个叉,则此人胜。给n,判断先手胜还是先手败。思路:假设选择画叉的位置是i,则对方只能在前[1,i-3]中或[i+3,n]中选择画叉。子问题出现。根据SG的定义,即可求出SG(N)。看代码。代码:int sg... 阅读全文
posted @ 2014-10-03 02:41 fish7 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题意:K个数,s1...sk。m个状态,对于某一个状态,有L堆石子,每人每次取的石子个数只能是s1...sk的一个,且只能在一堆中取。输出m个状态是先手胜还是先手败,先手胜输出W,否则输出L。输入格式及数据范围:For each test case: The first line contains ... 阅读全文
posted @ 2014-10-03 01:35 fish7 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题意:N个棋子,位置分别是p[1]...p[N]。Georgia和Bob轮流,每人每次可选择其中一个棋子向左移动若干个位置(不能超过前一个棋子,不能超出最左边【位置1】且不能不移)Georgia先手,问谁赢。思路:将棋子按位置从右到左两个两个作为一对。若棋子总个数是奇数,将第一个棋子和【位置0】作为... 阅读全文
posted @ 2014-10-02 19:51 fish7 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 1.游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己有利。2.当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。3.游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。4.任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关... 阅读全文
posted @ 2014-10-02 16:32 fish7 阅读(976) 评论(0) 推荐(0) 编辑
摘要: 题意:m堆石头,每堆石头个数:a[1]....a[m]。每次只能在一堆里取,至少取一个。最后没石子取者负。先取者负输出NO,先取胜胜输出YES,然后输出先取者第1次取子的所有方法。如果从有a个石子的堆中取若干个后剩下b个后会胜就输出a b思路:裸的NIM。单看一堆石子,没有石头sg[0]=0,一个石... 阅读全文
posted @ 2014-10-01 21:05 fish7 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题意:n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边。无法移动硬币的人负。给出n和m,问,先手胜还是后手胜。数据范围:n, m (0=1 && b1>=1 && go(a1,b1)==1) return f[n][m] = 0; if(a2>=1... 阅读全文
posted @ 2014-10-01 20:35 fish7 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意:N=4时规则:双方每次可以连接自己颜色的两个点(相邻,长度为1),线和线不能交叉重叠。蓝方要连接左右,红方要连接上下。蓝方先。问谁先连接?思路:经过观察。。。。蓝方胜。。。。。。。(无语)【我不知道如何证明!】代码:就不贴了。。。 阅读全文
posted @ 2014-10-01 20:12 fish7 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 题意:n张牌,双方轮流抓取。每人每次抓取的牌数必须是2的幂次(1,2,4,8...)。最后抓完的人胜。思路 :考虑剩3张牌,后手胜。考虑3的倍数。假设先抓者当轮抓2x 张,2x %3等于1或2。故先手不管怎么取,后手取1或2则可凑成3的倍数。故若总牌数是3的倍数,先手败。否则先手胜。代码:int n... 阅读全文
posted @ 2014-10-01 19:49 fish7 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 题意:N个点。N行N列d[i][j]。d[i][j]:结点i到结点j的距离。问这N个点是否可能是一棵树。是输出YES,否则输出NO。思路:假设这个完全图是由一棵树得来的,则我们对这个完全图求最小生成树,得到原树。(画个图就明白)故我们对完全图求最小生成树,然后用DFS从这棵树上的每个点出发,判断距离... 阅读全文
posted @ 2014-09-30 02:35 fish7 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 有N个人。每个人都有两个名字。给出这N个人的一个排列。p[1]...p[N]。现在让每个人挑自己丙个名字中的一个名字。问是否存在一种方案,使得挑出来的N个名字按字典序排完以后正好是p[1]...p[N]。思路:按照p[1]..p[N]的顺序挑第p[i]个人名字中小的(要大于第p[i-1]个人挑出来的... 阅读全文
posted @ 2014-09-30 00:56 fish7 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 有N个人站在一楼。一个电梯最多承载K个人。每个人都有一个想去的楼层。f[1]....f[N]。 f[i]属于[2,2000]从a层到b层需花费abs(a-b)秒。问电梯送完所有人然后回到一楼至少需要多少秒。思路:把每个人想去的楼层从小到大排序。先把高层的人送完再送低层的人,每次送K个。(证明:送最高... 阅读全文
posted @ 2014-09-30 00:37 fish7 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题意:给N个数。a[1]....a[N]。M种操作:S X Y:令a[X]=YQ L R D P:查询a[L]...a[R]中满足第D位上数字为P的数的个数数据范围:1#include #include #include #include #include #include #include #in... 阅读全文
posted @ 2014-09-29 23:44 fish7 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 给一个由小写字母构成的字符串S,问有多少个子串满足:在这个子串中每个字母的个数都不超过K。数据范围:1#include #include #include #include #include #include #include #include #include using namespace st... 阅读全文
posted @ 2014-09-29 20:15 fish7 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 给N个数字(0-9),让你组成一个数。要求:1.这个数是奇数 2.这个数没有前导0问这个数最大是多少。思路&解法:N个数字从大到小排序,将最小的奇数与最后一位交换,把剩下前N-1位从大到小排序。输出。(判断第一位是否为0)代码:#include #include #include #inclu... 阅读全文
posted @ 2014-09-29 19:58 fish7 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 昨天想写东西的时候最先到了“幸福”这个词,我想,并非单纯因为我现在生活得很幸福,而是我觉得对一个女人来说,再没有什么东西比幸福更珍贵,尤其是在今天这个看上去每个人都生活得非常幸福,而每个人却又都在忙忙碌碌寻找幸福的年代。物质的丰富未必是绝对的好事,对物质的过分追求和拥有会让很多东西褪去原本的颜色,包... 阅读全文
posted @ 2014-09-29 17:43 fish7 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 下面的代码处理所有的窗口消息。当我们注册好窗口类之后,程序跳转到这部分代码处理窗口消息。LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄 UINT uMsg, ... 阅读全文
posted @ 2014-09-27 00:10 fish7 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 一场恋爱,一场风雨。当那曾经视为珍宝的甜蜜的爱情,被一阵风雨淋失了温度,多少有情人一气之下选择了分道扬镳。而再经历若干情感、若干时光之后,很多人在心底弥漫出一丝痛。这时他们发现,原来割舍掉的那份情感才是最美好的。可是,已经选择了分离,自己还有颜面去争取挽回吗?而即便自己真的要去挽回,对方又能否接受这... 阅读全文
posted @ 2014-09-27 00:02 fish7 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 接下来的代码段创建我们的OpenGL窗口。我花了很多时间来做决定是否创建固定的全屏模式这样不需要许多额外的代码,还是创建一个容易定制的友好的窗口但需要更多的代码。当然最后我选择了后者。我经常在EMail中收到诸如此类的问题:怎样创建窗口而不使用全屏幕?怎样改变窗口的标题栏?怎样改变窗口的分辨率或pi... 阅读全文
posted @ 2014-09-26 15:14 fish7 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 下一段包括了所有的绘图代码。任何您所想在屏幕上显示的东东都将在此段代码中出现。以后的每个教程中我都会在例程的此处增加新的代码。如果您对OpenGL已经有所了解的话,您可以在 glLoadIdentity()调用之后,返回TRUE值之前,试着添加一些OpenGL代码来创建基本的形。如果您是OpenGL... 阅读全文
posted @ 2014-09-26 15:01 fish7 阅读(272) 评论(0) 推荐(0) 编辑