您的位置:首页 > 编程语言

开个头~!~后面写一系列2D图形分析和D3D编程

2008-02-16 21:18 204 查看
先说明,以后不特别说明,程序都是用VB.NET 2005写.....学VB 或C#的看起来应该不费劲...

 很久没写了......一直在学习托管D3D,写一个3D分子模型编辑器写了好几个月还没完工,幸亏是自己做着用的...准备再重新写1遍,估计就成型了....放假放的时间也不少,,,不过没干什么,,,,主要是陪老婆,,有空在联众上玩游戏,,,平台上干CS,,,,,,玩联众的时候发现有一个方向的东西也应该学一点...就是2D图象识别再把基本的平面几何计算用.NET按自己的想法实现出来....于是抓住一个最最最最最简单的:台球游戏.......

下面几篇先写写关于这个台球瞄准的问题,刚想做的时候以为有多简单呢,没想到哇,实际上也很简单...嘎嘎..........写完以后把学D3D时学的东西逐渐复习逐渐写出来,,,希望能给初学者一些帮助,,,少走弯路多体会编程的乐趣.

 

先简单认识一下.NET里面几个和图形处理有关的对象,个人认为比较关键..

画布对象:这个,怎么说呢,就是一个画布,可以是内存画布也可以是显示器上显示的画布....描述可能不确切

BITMAP对象:这个,从显示的角度看是一个"实体"

IMAGE对象:这个对象和BITMAP对象没有什么大的区别

PICTUREBOX控件:这个,可以用来创建画布,有一个IMAGE属性,,,是一个"集合体"

介绍一下他们的特点:

[画布对象]

通常用这个对象的FROM*****(OBJ)方法来创建一个实例,该实例就关联到OBJ对象,例如,通过PICBOX的句柄创建,那么你调用GR.DRAW******方法时,就可以直接在PICBOX上显示相应的东西,但是只是显示,,,,,,,,当被挡上或刷新PICBOX时就消失了,不过效率非常好

[BMP]

通常来说,这个家伙就是内存中的图象了,支持的格式好象不少.......也有多个FROM*****方法,不过这里有一个非常有用的共享方法,用来代替BITBLT实现从屏幕到内存的图象传输:屏幕图象块传输方法,使用方法和那个API一样,但是呢,这个是直接传到内存了,可以用SAVE方法直接保存.如果画布对象创建在BMP上,那么调用DRAW方法时,将改变内存数据.....

[PICBOX]的基本用途

1.可以创建一个GR对象,然后在上面画东西,速度非常快,想重绘制时,只需要调用刷新方法即可.

2.可以将IMAGE属性关联到(按址引用)一个BMP对象,这样就可以得到一个持久图象,

最后明确两个问题:

当需要在PICBOX上绘制持久图象时,有多条途径,一般可以首先创建一个画布对象-GRP,而后在GRP上绘制图,绘图后,调用刷新方法,这时被改变的BMP对象将被显示到"表面"

在台球程序中,我们为了实现实时显示瞄准线,采用这样的方法:

获取台球子窗体句柄,利用这个句柄获取台面信息并创建一个画布GS

1、创建一个BMP对象,调用屏幕块传输方法,获取台布图象,此时图象位于内存(BMP对象)中

2、创建一个新的BMP对象,作为前面图象的副本,这里涉及到效率问题,我们从前面的BMP中创建,而不是再传输

3、在副本上绘制线段,并将副本绘制到GS(使用DRAWIMAGE方法)。

当鼠标移动时重复2、3两个步骤

这就是基本的思路,存在一些不影响最终使用的问题,但实现了我们的想法。为了实现不移动鼠标时线段的持久显示以及提高显示速率减少闪动,我们启动一个新线程,这里涉及到一个线程锁和效率的问题,很简单;为了使操作最简化——达到鼠标点一下就显示全部线段的目的,采用鼠标钩子引发事件的事件驱动模式;关于具体的细节和效率问题逐渐解释。

 

希望这个系列的程序能对初学图形处理的有帮助,能起到抛砖引玉的作用。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息