2012年9月6日

directdraw的图形填充

摘要: 多边形可以分解为多个三角形,所以只用实现三角形的填充即可实现多边形的填充,三角形主要分为3类:A左边长B右边长C平底或平顶。平底或平顶三角形比较简单,填充他们只要分别根据两边的斜率求出Y坐标每增加一个单位相应的X坐标,这样就能求出相应的一对一对左右坐标,然后连接这连个坐标,最后就能实现三角形的填充。具体的分析过程请查阅:Windows游戏编程大师技巧 第八章效果图: 代码并未经过优化,可能存在很多BUG,只用于演示用代码://画平底或平顶填充三角形bool CEnginApp::DrawSolidPloygon(ScPoint spoint[],int lenth,UNINT *vb_star 阅读全文

posted @ 2012-09-06 11:23 -冷夜- 阅读(593) 评论(0) 推荐(0)

2012年9月3日

Bresenham画圆算法 与中点画圆法

摘要: Bresenham画圆算法不失一般性,假设圆的圆心位于坐标原点(如果圆心不在原点,可以通过坐标平移使其与原点重合),半径为R。以原点为圆心的圆C有四条对称轴:x = 0, y = 0, x = y和x = -y。若已知圆弧上一点P1=C(x, y),利用其对称性便可以得到关于四条对称轴的其它7个点,即: P2=C(x,-y), P3=C(-x, y), P4=C(-x,-y), P5=C(y,x), P6=C(-y,x), P7=C(y,-x), P8=C(-y,-x)。这种性质称为八对称性。因此,只要扫描转换八分之一圆弧,就可以通过圆弧的八对称性得到整个圆。【Bresenham... 阅读全文

posted @ 2012-09-03 15:52 -冷夜- 阅读(28355) 评论(2) 推荐(0)

2012年8月31日

自己写的一个矩形裁剪功能

摘要: 对线段进行裁剪,返回裁剪后的线段,完全自己想的没什么优化,应该还有些BUG暂时不做深究,效果图如下未裁剪:裁剪后:代码://点typedef struct sc_point{ int x,y; sc_point(){x=0;y=0;};}ScPoint;//线typedef struct sc_line{ ScPoint point1,point2;}ScLine;bool CEnginApp::ClearLine(const ScLine *line,ScLine &line2){ if (!line) return false; int x1=0,x2=0,y1=0,y2=0,te 阅读全文

posted @ 2012-08-31 13:39 -冷夜- 阅读(477) 评论(0) 推荐(0)

2012年8月22日

C++数组作为函数参数的几个问题

摘要: 转之:http://blog.csdn.net/tanghw/article/details/6554538本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定?先看下面的代码。#include <iostream>using namespace std;void testArrayArg(int a[]){ cout << endl; cout << "in func..." << endl; cout << "array address: 阅读全文

posted @ 2012-08-22 14:41 -冷夜- 阅读(13690) 评论(1) 推荐(2)

2012年8月21日

typedef用法小结

摘要: 第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。用途二:用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象 阅读全文

posted @ 2012-08-21 14:05 -冷夜- 阅读(480) 评论(0) 推荐(1)

Bresenham快速画直线算法

摘要: 现在的计算机的图像的都是用像素表示的,无论是点、直线、圆或其他图形最终都会以点的形式显示。人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已。那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法。直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线。给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点。假设直线的斜率0<k>0,直线在第一象限,Bresenham算法的过程如下:1.画起点(x1, y1).2.准备画下一个点,X坐标加1,判断如 阅读全文

posted @ 2012-08-21 10:25 -冷夜- 阅读(25737) 评论(0) 推荐(1)

C++中用rand()和srand()产生为随机数方法介绍

摘要: 标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。2)如果用户在此之 阅读全文

posted @ 2012-08-21 10:09 -冷夜- 阅读(45298) 评论(0) 推荐(2)

2012年8月15日

GetWindowRect和GetClientRect

摘要: 屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的 GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。 ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标. ScreenToClient把屏幕坐标系下的REC... 阅读全文

posted @ 2012-08-15 10:02 -冷夜- 阅读(389) 评论(0) 推荐(0)

2012年8月14日

DirectDraw:lpitch的理解

摘要: lpitch是结构体DDSURFACEDESC2的一项,这个结构体描述了页面/表面的一些信息。 lpitch一般译做步幅(stride)或内存宽度(memory width)。注意,它与DDSURFACEDESC2结构体中的另一项dwWidth的意义是不一样的。 lpitch的单位是字节,dwWidth的单位是像素。所以,一个640×480×8(640×480个像素,每像素用8位,即一个字节表示)页面,dwWidth=640 像素(字节)。但是,此时Lpitch不一定就等于640(字节)!同样一个640×480×16的页面,它的Lpitch值也 阅读全文

posted @ 2012-08-14 17:24 -冷夜- 阅读(669) 评论(0) 推荐(0)

GDI 输出文字、画点、线、三角形、矩形、圆、椭圆、多边形

摘要: 效果图:代码: hdc=BeginPaint(hwnd,&scPaint); if (hdc) { //输出文本 SetTextColor(hdc,RGB(255,0,0)); SetBkColor(hdc,RGB(0,255,0)); SetBkMode(hdc,TRANSPARENT); TextOut(hdc,10,100,"Welcome!",8); ... 阅读全文

posted @ 2012-08-14 14:58 -冷夜- 阅读(17793) 评论(0) 推荐(0)

导航