摘要:
在前一篇日志里,我决定使用Silverlight来开发虚拟实验室引擎。接下来,我将从上到下,构建这个引擎。确定实验室中的对象构建一个虚拟的产品,首先映入脑海的就是该产品的具体表现形式。根据这个,我把实验室中的对象分成两个个部分:场景和物品。所谓场景,实际上相当于背景,像地板这些永远不会覆盖在人物之上的东西统统可以归咎于场景。在渲染上,场景也是最好对待的,它往往不会改变位置,永远位于物品下方,不存在空间排序问题及遮挡问题。物品,大概相当于前景。例如桌子、柜子等等。这些东西在渲染的时候,可能需要按照它们所处的空间位置排列,造就遮挡的效果。根据唯物主义理论,人物也是一种物品,不过和桌子比,人物会动, 阅读全文
摘要:
在前一篇日志里,我用两个UML图描述了引擎中所使用的数据对象和界面渲染对象。本文将创建VObject类。VObject是引擎中所有虚拟对象的父类,包括一些公共的属性和方法。VObject内部,主要通过以下顺序来创建数据。 属性让我们看看VObject有哪些属性: 属性名类型说明NameString名称IDGuid唯一的编号值WidthInt32宽HeightInt32高CenterXInt32中点横坐标(相对于VObject)CenterYInt32中点纵坐标(相对于VObject)TopXInt32顶点横坐标(相对于所在的Place)TopYInt32顶点纵坐标(相对于所在的Place)XI 阅读全文
摘要:
什么是引擎引擎是使用素材,响应用户输入,处理简单运算、调用远程数据的程序集。在虚拟实验室里,引擎负责调用图片素材、渲染场景、接收用户鼠标点击事件、相应事件,以及和后台通信: 这就像网络游戏的引擎一样。网游的引擎集成在Client客户端中,利用DirectDraw或Direct3D来渲染素材,利用DirectInput和鼠标键盘交互,利用Socket和游戏服务器进行数据传输。虚拟实验室引擎类似于传统CS架构下网游的引擎,但是又有着不同:虚拟实验室是基于BS架构的,客户端嵌入在网页中,我们通过在浏览器中输入网址来访问它。使用什么语言嵌入在网页中的对象有很多中,我们该用哪种语言来开发虚拟实验室引擎呢 阅读全文
摘要:
WordPress 是一种使用 PHP 语言和 MySQL 数据库开发的开源、免费的 Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 Blog。WordPress 是一个功能非常强大的博客系统,插件众多,易于扩充功能。安装和使用都非常方便。目前 WordPress 已经成为主流的 Blog 搭建平台。本文描述了如何在服务器上搭建一个属于自己的WordPress博客。本文分成以下几个方面:下载并解压WordPress在MySQL中建立用户名和博客数据库添加IIS应用程序执行安装 下载并解压WordPresshttp://code.google.co 阅读全文
摘要:
好了,现在我们能在c#里通过编程扫描图像了。还不满足?对,在前面的例子里,需要扫描的时候总是要按下一个扫描按钮,既傻又费事。现在的扫描仪,上面往往会多几个额外的按钮用来和用户交互,例如我是用的HP G2410上就有两个按钮:扫描及复制。那么,能不能用这两个按钮来代替程序里的那个难看的按钮呢? 注意左上角那个难看的按钮了吗?在WIAAL里,我们可以同过注册设备事件,监听事件等方式和设备上的按钮交互。注册事件还记得我们在上节提到的DeviceManager对象吗?MSDN官方文档描述:The Microsoft Windows Image Acquisition (WIA) Device Mana 阅读全文
摘要:
在前面几节,我通过调用CommonDialog对象的ShowAcquireImage方法来扫描图像,这是一个弹出选择设备对话框,让用户自己扫描的过程。有时候,我们不想把过程弄得那么复杂,只想用户点击按钮后,自动开始扫描。本节我将尝试这个需求。WIAAL模型在开始代码前,再回顾以下WIAAL模型,这里选取其中的一小部分: 和 从上图不难想象,一台扫描仪,实际上就是一个Device对象,因此,我们可以通过DeviceManager来“获取”这台设备的“引用”,然后通过得到的Device对象,执行相应的扫描工作。从而跳过了使用ShowAcquireImage方法带来的一系列“多余的鼠标操作问题”。获 阅读全文
摘要:
WIA Automation Layer不仅能从设备中捕获照片,还能进行简单的处理。当WIA Automation Layer从设备中捕获照片,保存为一个ImageFile对象,我们可以通过访问该ImageFile对象来访问照片的属性。然而,为了保护原来的照片,不能直接通过修改该ImageFile对象的方法修改图片。代替的方法是,使用ImageProcess和一个或多个Filter对象创建一个副本,修改图片。代码以下代码把扫描得到的图片顺时针旋转90度:if (imageFile != null){ ImageProcess ip = new ImageProcessClass(); obje 阅读全文
摘要:
前文说过,在WIA 2.0 里,有一个叫Automation Layer的东西,来负责WIA和应用程序交互。既然被命名为Automation了,那么意味着比直接试用WIA接口,WIAAL更容易、更方便。实际上的确如此。关于WIA Automation Layer文档上说,WIA Automation Layer是一个高级的,全能的图像操作组件,能为应用程序(例如ASP,C#)提供首尾相连的处理能力。利用WIAAL,在程序中可以很容易地从诸如数码相机、扫描仪等图像设备中捕获图像,以及进行简单处理(缩放、旋转)。对象分级结构WIAAL的对象不多,总的来说分成来两块,第一块是可以被创建的类(例如在c 阅读全文
摘要:
WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪、数码相机)中获取静态图像,以及管理这些设备。它既是API,又是DDI(Device Driver Interface)。因此,只要是满足这个规范的设备,都能够利用WIA直接和应用程序交互,而不是通过驱动。WIA甚至提供了统一的对话框来获取图片。WIA是基于Com的,有两种使用方式:c++:使用WIA自定义接口其他:使用WIAAL(WIA Automation Layer)。 注:在Windows XP sp1以前的版本,WIAAL还不存在,因此第 阅读全文