background image

3d 游戏与 GDI 

汇编

   

Windows  

是一个基于图形的

操作系统

,它的图形功能是通过一个称为

GDI 图形子系统

来实现的。通过使用

GDI,你可以向系统中的任何设备上画图比如:

显示器

系统

内存

打印

机等等,因为

GDI 为我们作了很多幕后工作。

   不幸的是,GDI 在有些时候不能满足你性能上的要求,特别是

游戏

,对于图形功能要求

是很高的,同时对于速度的要求也是很苛刻的,这就是

DrectX 出现的原因。我们首先来学

习一下

GDI,因为即使你要用 DirectX,一些 GDI 知识也是必备的。

   矩形和点:
   在我们介绍 GDI 对象之前,我们先来看看两个非常有用的结构---点和矩形---以及作用于
他们上的功能函数。矩形在

DirectX 中也是经常用的,在以后的学习过程中你将会发现这

一点。
   我们首先来看这两种结构的定义:
   typedef struct tagPOINT { 
                  LONG x; 
                  LONG y; 
                 } POINT, *PPOINT; 
   typedef struct _RECT { 
                LONG left; 
                LONG top; 
                LONG right; 
                LONG bottom; 
               } RECT, *PRECT; 
   矩形是由四个点来描述的:(左,上),(右,上),(左,下),(右,下)。在这里
需要注意的是矩形的右和下两条边时不属于矩形的。
    用于操作矩形和点的函数:
    我把这些函数分为三类:第一类是用于创建或者赋值的,第二类是用于操作的,第三类
是用于测试的。
    
    函数名称                 类型            作用
    SetRect                 创建赋值       用于设置 RECT 的成员变量
    SetRectEmpty      同上              用于将 RECT 的所有成员置 0 的
    CopyRect             同上               用于将一个矩形的成员值赋给另外一个矩形的
    IntersectRect       操作              用于找到两个矩形的交集
    UnionRect           同上              用于创建同时包含两个矩形的最小矩形   
    OffsetRect           同上              用于移动一个矩形
    EqualRect           测试              测试两个矩形的成员是否相等
    IsRectEmpty      同上               测试一个矩形的成员是否都为 0
    PtInRect              同上               测试一个点是否位于一个矩形之内
    关于这些函数的具体定义请大家参阅 MSDN. 
窗口点滴

:

    我们都很清楚,一个窗口所包含的不只是我们能够绘画的区域.根据用处的不同,一个窗口
包含最大化

,最小化按钮,标题栏,一个关闭按钮,一个系统菜单.滚动条等等.所包含的元素取

决于你所创建的窗口样式

.不过这些都不用我们担心,系统会为我们很好的绘制他们,我们所