每天c++封装《WINDOWS游戏编程大师技巧>>1DEMO
文章平均质量分 79
directx3d_beginner
这个作者很懒,什么都没留下…
展开
-
demo7-4,后备缓冲
双缓冲就是开辟一个后备缓冲(不要忘了给它分配内存),然后锁定它,绘制之,再解锁,再逐行复制给主表面,(因为每行都有多余空间,所以必须逐行) 书上的源代码定义后备缓冲指针和主缓存指针,主缓存指针只是在主表面锁定时只想主表面,并不分配空间。UCHAR * double_buffer = NULL;UCHAR *primary_buffer原创 2013-03-04 14:24:01 · 490 阅读 · 2 评论 -
理论考核部分终于搞定了
用了一周时间,实现了理论考核部分,包括上下翻页和给分。就差美工了原创 2013-05-24 13:13:28 · 575 阅读 · 0 评论 -
2013年8月27日星期一(DEMO7-19窗口的裁剪等)
OK,现在马不停蹄,结束这个第7章,拖延的时间真长,有11个月了,汗。。。这个是上次的应用,加上逻辑判断如何画点,并用GetWindowRect()是客户区,实际上这不对,应该是GetClientRect(),果然不对,只能是说把图画上了。 代码如下 DDSURFACEDESC2 ddsd; RECT client; Get原创 2013-08-26 21:23:04 · 605 阅读 · 0 评论 -
2013年8月30日星期五(8-3多边形)
设定了端点和多边形两个结构体// a 2D vertextypedef struct VERTEX2DI_TYP { int x,y; // the vertex } VERTEX2DI, *VERTEX2DI_PTR; // a 2D polygontypedef struct POLYGON2D_TYP原创 2013-08-30 16:06:59 · 690 阅读 · 0 评论 -
2013年9月10日星期二(DEMO8_6矩阵)
首先设置了2个矩阵1,把所有的点存储为1*2矩阵 typedef struct MATRIX1X2_TYP { float M[2]; }MATRIX1X2, * MATRIX1X2_PTR;M = |X Y|,2把所有变换矩阵采用3*2矩阵typedef原创 2013-09-11 00:04:54 · 740 阅读 · 0 评论 -
2013年8月28日星期三(8-2,裁剪Cohen_sutherland算法)
这节就是只保留裁剪区域内的像素,这个例子用直线表示,分为4种情况1, 直线完全在裁剪区外,不用处理2, 直线完全在裁剪区之内,也无需改动,直接光栅化3, 直线的一个端点在裁剪区之外,必须进行裁剪4, 直线的两个端点都在裁剪区之外,但部分在裁剪区之内。必须进行裁剪 Cohen-Sutherland算法中,把裁剪区分成很多部分,然后给每一段被裁剪的线段的两端分配原创 2013-08-28 12:37:02 · 964 阅读 · 0 评论 -
2013年9月11日星期三(demo8-7,三角形)
开始定义了#define FIXP16_SHIFT 16#define FIXP16_MAG 65536#define FIX16_DP_MASK 0x0000ffff#define FIX16_WP_MASK 0xffff0000#define FI原创 2013-09-20 11:28:38 · 832 阅读 · 0 评论 -
2013年9月16日星期一(DEMO8_8,多边形)
此例子很简单,就是把四边形分为两个三角形绘制即可。 inline void Draw_QuadFP_2D(int x0,int y0, int x1,int y1, int x2,int y2, int x3, int y3,原创 2013-09-20 11:31:50 · 838 阅读 · 0 评论 -
2013年9月2日星期一(8-4,平移和旋转)
首先,坐标从整型换为浮点型,typedef struct VERTEX2DF_TYP { int x,y; // the vertex } VERTEX2DI, *VERTEX2DF_PTR; // a 2D polygontypedef struct POLYGON2D_TYP {原创 2013-09-20 11:15:49 · 723 阅读 · 0 评论 -
2013年9月5日星期四(8-5,缩放)
缩放很简单,就是把各个坐标乘以缩放因子即可。 这次是一个多边形 int Scale_Polygon2D(POLYGON2D_PTR poly,float sx, float sy){ // this function scalesthe local coordinates of the polygon // test for v原创 2013-09-20 11:17:58 · 669 阅读 · 0 评论 -
2013年11月20日星期三(DEMO8_10,BOB引擎)
这一节主要进行BOB引擎的使用,加个 bitmap类,派生出一个bob类 #include "common.h"#pragma once class ddraw_bitmap{public: ddraw_bitmap( ); ~ddraw_bitmap(void); public: int原创 2013-12-27 18:13:59 · 1310 阅读 · 0 评论 -
2013年11月21日星期四(地图)
初始DDraw_BOB bob;BOB textures;tool mytool;char buffer[80];BITMAP_FILE原创 2013-12-27 18:15:40 · 582 阅读 · 0 评论 -
2013年11月22日星期五(demo8-12,稀疏平铺显示)
不用tile地图填充每个子屏幕,而仅仅是将每个对象放在世界坐标系中的某个位置。将游戏环境分区,创建一个备用的数据结构来跟踪所有的对象。 // size of universe, could be anything#define MAX_UNIVERSE_X 6400#define MAX_UNIVERSE_Y 4800 #define NUM_OBJECTS_UNIVERS原创 2013-12-27 18:18:04 · 571 阅读 · 0 评论 -
2013年12月20日星期五(OUTPOST)
今天找我谈话了,看来裁员可能有我,那我就先找个2D小游戏的工作吧,至少这一年别闲着,现在干啥都心里乱,不过,这几年不就是为此做准备了吗?还好,功夫没落下,就用目前封装完的引擎去做吧,顺便封装完剩下的2D引擎,数了数,目前封装的CPP部分已经有4600行了。继续吧,就算把这段时间熬过去, 先改为640*480*8全屏模式,先看Game_Init()这里,进行了 //初始化DDR原创 2013-12-27 18:23:05 · 687 阅读 · 0 评论 -
2013年11月13日星期三(DEMO8_9,三角形光栅化)
首先,介绍了一种算法,就是1, 凸边形顶点按照顺时针或者逆时针顺序排列,2, 先提取3个点,组成一个三角形,并分离这个三角形,3, 再把剩下n-1个点递归计算, 然后提出了矢量光栅化,这个属于流水线部分的光栅化算法之一流程如下:1, 从上到下,从左到右,进行顺时针排列顶点顺序2, 从最高顶点开始,光栅化从该顶点发出的左右两条边,3, 当其中一条边到达终点,也就是原创 2013-12-27 18:11:35 · 767 阅读 · 0 评论 -
2013年11月22日星期五(T3DLIB1剩余---1)
现在进行T3DLIB的残余。 #define SCREEN_DARKNESS 0#define SCREEN_WHITENESS 1#define SCREEN_SWIPE_X 2#define SCREEN_SWIPE_Y原创 2013-12-27 18:20:06 · 577 阅读 · 0 评论 -
2013年8月27日星期二(DEMO8_1,画线)
这一节进入了数学阶段,画线,主要介绍了BRESENHAM算法,开始于(x0,y0)点,但是不采用斜率,它先在X轴方向移动1个像素,然后决定如何移动Y方向的像素,以使所描绘的直线尽量接近于实际的线,这是通过使用一个衡量光栅化得出的直线与实际直线之间的接近程度的误差项来实现的,该算法对误差项不断调整,以使得数字化的光栅线能够尽量直接接近直接直线, 可以做一些改进,将初始点的位置考虑进去,然后把原创 2013-08-27 13:03:32 · 1769 阅读 · 0 评论 -
2013年8月25日星期日(7-18窗口模式)
终于快结束第七章了,一鼓作气,今天完成它,窗口模式其实已经封装了,这里是总结了一下,但是仍然要仔细看看,当时的想法是否正确。人,毕竟是个不断发展前进的过程。先看看代码,首先确定了一个窗口大小400*400#define WINDOW_WIDTH 400#define WINDOW_HEIGHT 400设置了个像素格式int原创 2013-08-25 15:44:32 · 672 阅读 · 0 评论 -
6.1-6.2
用C++封装游戏编程大师技巧序由于阿哲VS自己在以前也是自己做了C++封装这两本书,而我觉得确实夹生,DX不透,使用各种引擎夹生,所以认为他说的有道理,所以,要进行一下。决定一边学习一边总结,希望别半路总结不下去了,--------2012年10月14日原创 2013-02-20 08:03:02 · 589 阅读 · 4 评论 -
6_3调色板和主表面(2013.2.22)
这一个DEMO费了两天时间了,不能再拖延下去了,故决定今天晚上完成它,原来的代码都已经进行过了,就是下图的一图案,没啥好解释的这个DEMO主要说明了8位调色板索引(即256色)的绘制,步骤为1,创建调色板2,创建主表面3,关联调色板和主表面4,锁定内存,绘制,解锁5,释放资源 书上的C语言代码就不复制过来了,意义不大。主要看分类,首先,弄两个成员变量,调色板和主原创 2013-02-22 21:34:55 · 819 阅读 · 7 评论 -
7-1,16色像素绘制(2013年2月25日-26日)
16位就是RGB代替调色板,分为R5G6B5和R5G5B5两种,DEMO运行结果如下首先设置显示模式Lpdd->SetDisplayMode( 640, 480, 16, 0, 0 ); 绘制像素分四个步骤。1,锁定表面2,建立16位RGB字3,写像素 4,解锁主表面 定义16位的两种格式#define _RGB16BIT555( r,g, b ) ( ( b原创 2013-02-27 10:40:54 · 596 阅读 · 0 评论 -
7_2,24位真彩模式(2013-2-27)
同理,24位为3通道,3字节,但是经过测试,有问题,不支持24位 7_3,32位真彩模式32位与16位不同之处,32位分为ARGB和XRGB,各8位,ARGB中前8位为透明色,XRGB前8位为了对齐,一般清为0。 #define _RGB32BIT( a, r, g, b ) ( (b ) + ( ( g) << 8 ) + ( (r) a) in原创 2013-02-27 10:43:45 · 761 阅读 · 0 评论 -
2013年4月9日(7——5表面动态和页面切换)
距离上一次更新有一个月了,这个月进行了SHADOWMAP和HDR,幸运的是,4*4PCF已经搞定,HDR仍然在继续中。后来发现了还需要动态贴图,这个2D的引擎需要继续写下去,尽管不知道会如何。 闲话少说,现在看看离屏表面,第一类是后备缓冲, 后备缓,是指一些动画链中的表面,具有和主表面相同的尺寸和色深,创建主表面时也创建后备缓冲。后备缓冲通常在VRAM中,另外,也可以将后备缓冲原创 2013-04-10 00:22:03 · 1294 阅读 · 0 评论 -
2013年4月10日星期三 (DEMO7——6使用blitter)
本来打算晚上进行封装,不过由于上午进行HDR,只剩下RENDERBLOOM()了,有些疲倦,不妨先进行封装,闲话少说,现在是14:18,开始进行了。这1节还是开头强调了硬件局限性,目前当然没有这个问题了,只考虑封装方法吧 。大概浏览了一下这一节,主要说明了硬件blitter的优点,克服了以前的双缓冲的缺点1, 速度加快,内存矩形填充代替逐行复制。2, 透明色可以挑出,不复制原创 2013-04-10 20:53:31 · 640 阅读 · 0 评论 -
2013年4月26日(7-7,从一个表面向另一个表面复制位图)
从书上看,这个DEMO不复杂,就是把源矩形复制到目标矩形,我得每天首先封装引擎一个,核心代码应该是int x1 = rand() % SCREEN_WIDTH; int y1 = rand() % SCREEN_HEIGHT; int x2原创 2013-04-26 10:32:56 · 725 阅读 · 4 评论 -
2013年5月23日(7-9ddraw裁剪器)
进行裁剪步骤有4个1, 创建ddraw裁减器对象CreateClipper( 0, LPDIRECTDRAWCLIPPER * , NULL );2, 创建裁剪队列(即RECT结构的矩形列表,blitter硬件只绘制裁剪区内的内容,其余的都剪掉)裁剪队列需要填充RGBDATA()的数据结构Typedef struct _RGNDATA{ RGNDATAH原创 2013-05-23 22:43:01 · 900 阅读 · 0 评论 -
2013年6月4日星期二(使用位图)
这一节是个大餐,加上了位图。最主要的一点,是我知道了,不一定要按照字符串读取的方法,而是根据标识去做,定义了位图标识#define BITMAP_ID 0x4D42 位图(.BMP文件),分为几部分,位图文件头 typedef struct BITMAP_FILE_TAG{ BITMAPFILEHEADER bitmapfileh原创 2013-06-17 23:30:14 · 656 阅读 · 0 评论 -
2013年6月21日星期四(载入16位位图和24位位图)
今天封装16位位图,例子上是把24位位图变为16位位图,去掉了调色板,// get video pointer to primary surfceUSHORT *primary_buffer = (USHORT *)ddsd.lpSurface; // process each line and copy it into the primary bufferfor原创 2013-06-21 15:00:28 · 1230 阅读 · 4 评论 -
2013年6月24日星期一(离屏表面blitter)
粗略看了一下,感觉这章也是个大餐,把所有以前的全屏过程综合起来了。1, 总流程:SURFACE,不只是只有主缓冲和后备缓冲,还有离屏表面,离屏表面不只是一个,它装载各种位图,然后被blt到后备缓冲,再primarysurface->flip()页面切换到主表面。2, 离屏表面blt到后备缓冲:离屏表面[(0,0), (宽度-1,高度-原创 2013-06-28 01:18:28 · 1883 阅读 · 7 评论 -
2013年6月28日星期五(7-14,离散采样理论)
大概看了下,缩放无非就是采样,或者复制象素,或者混合。或者用一定采样频率。把上个DEMO的3个机器人放缩了。在alient_obj结构体中,加上 以下三项,int width; int height; float scal原创 2013-06-29 05:29:18 · 624 阅读 · 0 评论 -
2013年8月11日星期日(7。15 色彩动画)
距离上次封装有一个月了,PHYSX知道怎么弄朝向和位置了,我决定业余时间可以弄弄小游戏,这个例子是通过改变调色板ID来达到颜色的亮灭,这个肯定过时了,不过思路还是不错的。各个常量和结构体类型#define BLINKER_ADD 0 // add a light to database #define BLINKER_DELETE 1原创 2013-08-19 13:51:41 · 683 阅读 · 0 评论 -
2013年8月19日星期一(demo7_16,色彩旋转)
这一节也并不难,上周在另外一个机子上调试过了,原理是以相邻的色彩项或者寄存器的集合作为参数,然后以循环的方式移动它们的一种处理,这样使物体看起来像在移动,或者模拟流水。 我觉得原理很重要,从色彩color[c1]旋转到色彩color[c2];Temp = color[c1];For( int index = c1; index Color[c1] = color[c1+1];原创 2013-08-19 17:06:01 · 610 阅读 · 0 评论 -
2013年8月20日星期二(DEMO7-19DX与GDI混合使用)
只需要在ddraw中找到一个兼容DC,就可以使用,使用完之后再释放。函数实现为int Draw_Text_GDI( char * text, int x, int y, COLORREF color, LPDIRECTDRAWSURFACE7 lpdds ){ HDC xdc; lpdds->GetDC( & xdc ); SetTextC原创 2013-08-20 14:53:07 · 956 阅读 · 0 评论 -
2013年11月26日星期二(t3dlib1剩余部分---2)
接下来,继续进行T3DLIB1剩余部分,倒着进行,先进行bob碰撞检测 int DDraw_BOB::Collision_BOBS(BOB_PTR bob1, BOB_PTR bob2){ if( ! bob1 || !bob2 ) return 0; int width1 = ( bob原创 2013-12-27 18:21:21 · 766 阅读 · 0 评论