上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 61 下一页
  2011年5月6日
摘要: 在WPF中,我们使用Mode3D等API来绘制三维场景,当期间的“三角形”超过一定数量时,整个场景的渲染速率直线下降,无论显卡的运行速度有多快,帧率都维持在3、5帧每秒。XNA是微软推出的一套游戏开发API,作为Managed DirectX的进化版,XNA同样封装了DirectX的底层API,此外还提供了一系列和游戏生命周期相关的类,大大减轻了传统Win32下DirectX开发的烦琐。本文试图让XNA“嵌入”在WPF的Browser Application中,使用XNA来渲染场景,并以XBAP的方式在互联网上发布,集XNA的高效和WPF的部署方便为一生,免除了开发人员在部署、安装、升级应用程 阅读全文
posted @ 2011-05-06 17:03 carekee 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 使用 WriteableBitmap 类基于每个框架来更新和呈现位图。这对于生成算法内容(如分形图像)和数据可视化(如音乐可视化工具)很有用。 WriteableBitmap 类使用两个缓冲区。“后台缓冲区”在系统内存中分配,它可以累计当前未显示的内容。“前台缓冲区”在系统内存中分配,它包含当前显示的内容。呈现系统将前台缓冲区复制到视频内存中以便显示。 两个线程使用这两个缓冲区。“用户界面 (UI) 线程”生成 UI 但不将其呈现在屏幕上。UI 线程响应用户输入、计时器以及其他事件。一个应用程序可以具有多个 UI 线程。“呈现线程”撰写和呈现 UI 线程的变化。每个应用程序只有一个呈现线程。 阅读全文
posted @ 2011-05-06 17:00 carekee 阅读(18430) 评论(4) 推荐(6) 编辑
摘要: 客户端运行ClickOnce应用程序时,有可能会出现如下错误: 这是由于在客户端的GAC(全局程序集缓存)中,缺少相应的dll文件。这些Dll文件一般是第三方类库,或是一些系统库,本来需要客户端自己安装的,但客户端没有安装这些dll文件,最终导致我们的应用程序无法运行。因此我们要帮客户装上这些东西。ClickOnce应用程序和Windows Installer应用程序不同,客户不需要安装就能运行。但带来的不便之处是,我们在运行ClickOnce应用程序时,不能像运行Windows Installer那样在ClickOnce中把这些缺少的dll文件安装到GAC目录下。所幸可以通过发布选项中的Pr 阅读全文
posted @ 2011-05-06 16:58 carekee 阅读(2740) 评论(1) 推荐(0) 编辑
摘要: 下载SDK实验室的指纹工具是U.are.U 4000,在http://www.digitalpersona.com,经过一系列登陆后,可以下得SDK。这是一个压缩包,解压后如下: 安装SDK进入SDK目录,双击安装文件: 一系列Next后,可以看到,该SDK支持.Net、Java等托管语言,这是我想要的:)进入.Net目录,打开一个Sample工程,运行后:点击Enroll登记指纹: 点击Verify验证刚才登记的指纹:这是正确的情况: 这是错误的情况:完了! 阅读全文
posted @ 2011-05-06 16:56 carekee 阅读(528) 评论(2) 推荐(0) 编辑
摘要: 前文我简要的介绍了在WPF中,如何控制摄像头移动,已达到动画的效果。也带来了一个新的问题:摄像头移动的时候,毫无阻拦,这就是所谓的“穿墙模式”。有没有什么办法解决这个问题呢?有,就是在移动摄像头前先进行“碰撞检测”,确定摄像头的新位置区间中没有其他的三维模型。本文将介绍如何在WPF中进行三维碰撞检测。利用Rect3D.IntersectsWith 方法在进入下一节前,先看看最简单的碰撞检测方式:利用Rect3D.IntersectsWith 方法。Model3D有一个Bounds属性,用来表示该Model3D的边界: 该属性是Rect3D类型的,我们可以使用IntersectsWith 来确定 阅读全文
posted @ 2011-05-06 16:55 carekee 阅读(1350) 评论(0) 推荐(0) 编辑
摘要: 概述在三维场景里,Camera是不可或缺的元素。和人的眼睛一样,场景中现实的内容,实际上是Camera“看到”的。下图是在Google Sketchup里,Left视角的Camera所“看到”的内容: 和常见三维建模软件类似,在WPF的3D里,也涉及到Camera对象,在WPF里,有三种Camera:MatrixCameraPerspectiveCameraOrthographicCamera投影摄像机上述三种Camera中,PerspectiveCamera和OrthographicCamera属于投影摄像机,它将三维空间里的物体,投影到一个平面上,而这的不同之处在于,Orthographi 阅读全文
posted @ 2011-05-06 16:54 carekee 阅读(5097) 评论(0) 推荐(0) 编辑
摘要: 前文介绍了Viewport3D中的两种摄像机:OrthographicCamera和PerspectiveCamera。在3D场景里漫游,最主要的工作就是针对用户输入(例如鼠标左右移动、键盘按下A、W、S、D等键)来改变摄像机的位置、方向。本文接下来介绍如何通过改变PerspectiveCamera的属性,来达到场景的漫游效果。摄像机动作我摄像机的动作可以分成三类、移动、旋转、拉升镜头。用一个枚举来描述这些动作:public enum SceneCameraAction{ MoveForward, //向前移动 MoveBack, //向后移动 MoveLeft, //向左移动 MoveRig 阅读全文
posted @ 2011-05-06 16:54 carekee 阅读(771) 评论(0) 推荐(0) 编辑
摘要: WPF 的 Browser Application,运行于IE、Firefox(需要插件)等浏览器中,方便了部署,但也受至于浏览器的安全性限制。例如,有时候,需要访问磁盘上某个文件时,普通的Browser Application会出现“为授予信任(Trust not granted)”的错误: 以下是解决方案修改安全属性打开项目属性,选择Security选项卡,选择“This is a full trust application”单选框: 也可以根据项目具体内容,选择“This is a partial trust application”,然后设置相应权限。添加代码签名申请一个证书在开发阶 阅读全文
posted @ 2011-05-06 16:52 carekee 阅读(732) 评论(0) 推荐(0) 编辑
摘要: 对我来说,WPF比MFC好了不止一百倍:同样的工作,用C#比用C++,开发效率至少提高了200%;在UI制作方面,WPF比MFC更容易做出绚丽的效果;WPF应用程序能嵌入在IE浏览器中,方便部署、维护。随着Windows 7发布脚步的渐进,未来桌面程序的开发,必定属于WPF的。现在,我们还有理由拒绝WPF吗?接下是一个WPF中文件选择控件的例子,先上效果图: 点击后,出现选择文件对话框: 选择文件后,自动将文件显示在图片框中:代码上很简单,除去VS自动生成的代码,总代码不超过10行,且都是在设计器里用鼠标完成的,整个过程除了输入一些名称,不需要敲一下键盘,历时2分钟:<Window x: 阅读全文
posted @ 2011-05-06 16:50 carekee 阅读(9212) 评论(3) 推荐(0) 编辑
摘要: 近年来,Google的扩展意图真的好猛啊,尤其是在传统的互联网方面。Google自身的GWT,加上ExtJs的支持,轻而易举地进入企业RIA市场。那些熟悉Java的开发人员,几乎不需要具备任何Javascript、AJAX的知识,只要调用GWT包,就能编写出华丽的RIA应用程序。反观Adobe的Flex,虽然起步早,但由于缺乏后台服务语言的支持,现今依旧停留在无限美好的YY中。微软在经历了Silverlight 1.0、2.0时代和Flex的缠斗后,终于意识到,它在RIA领域最大的敌人其实是Google,为此,及时地在3.0里增加了.Net RIA Service的功能。自此,Silverli 阅读全文
posted @ 2011-05-06 15:03 carekee 阅读(401) 评论(0) 推荐(0) 编辑
摘要: Silverlight 3 Beta发布了!其中,ChildWindow是一个令人激动的控件。使用ChildWindow,终于在应用程序里轻松地弹出对话框,而不用Popup。接下来我就在项目里添加一个登录的对话框:在解决方案中添加一个ChildWindow:在Experssion Blend 3里打开LoginWindow,可以看到Silverlight已经为我们添加了一些项目:按照美工图,把界面修改如下:接下来修改代码,我把弹出登录窗口放在Socket连接上服务器后:protected void OnClientConnected(object sender, AsyncConnection 阅读全文
posted @ 2011-05-06 15:02 carekee 阅读(765) 评论(0) 推荐(0) 编辑
摘要: 作为.Net Framework中的“古董级”类,Socket类无论在1.0,还是最新的3.5 sp1的网络编程里,都占据着极其重要的作用。优化网络架构,一直是开发人员追求的问题。在2.0时代,我们使用异步Socket(Begin、End等方法)来增强性能,不过,这类方法往往要初始化一个IAsyncResult的对象,这给.Net的GC带来了额外的负担。因此,从2.0 sp1起,.Net Framework的Socket类里又多了一种新的异步方式(Async),Silverlight从2.0起,支持通过Async Socket的方式和服务器通信。Async Socket首先让我们来看看使用As 阅读全文
posted @ 2011-05-06 15:01 carekee 阅读(1707) 评论(1) 推荐(0) 编辑
摘要: 事务事务,要做的或所做的事情。我们通常使用事务管理器来计划某天要做的事。Windows Vista包含了一个叫做Windows日历的东西,就是一个简单的事务管理系统: RIA Services虚拟实验室里的事务管理系统,用到的核心技术为Microsoft .NET RIA Services,目前最新版本为March 09’Preview。在RIA Services前,我们往往使用前台Silverlight,后台WCF的组合来构建RIA应用程序,虽然该组合能解决开发过程中的所有问题,不过也存在一些不便之处:为了减少系统的耦合度,我们通常把一个系统分成表现层(Silverlight)、业务逻辑层( 阅读全文
posted @ 2011-05-06 14:59 carekee 阅读(200) 评论(0) 推荐(0) 编辑
摘要: IIS中的FTP服务器可能是最不为人知的组件了,它太弱小,以至于很多黑客都不懈攻击它。看着大家宁肯用诸如ServerU等收费FTP服务程序也不愿用免费的自家的FTP,什么都喜欢插一腿的微软终于坐不住了。于是伴随着Server 2008和IIS7.0,一个名为FTP 7的东西出现了。这个据说重写了全部代码的东西看上去功能强大了不少。安装FTP 7.0首先需要下载,由于我的Server 2008是64为版本,所以我选择x64的:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=584cacf6-7 阅读全文
posted @ 2011-05-06 14:57 carekee 阅读(8588) 评论(0) 推荐(0) 编辑
摘要: 虚拟实验室引擎的需求之一就是人物漫游功能:即用户操纵人物在场景中移动。这就意味着在开发引擎的时候,要考虑到场景的某些地方,人物是无法移动到上面去的(例如河流,花坛)。我们还需要在场景上做一些“手脚”,来标记哪些区域允许移动,哪些区域不允许移动。例如,下图中,蓝色部分(用1表示)的区域是允许用户移动的区域,而红色(用0表示)则是不允许。 VGridPlace扩展VPlace我扩展了VPlace类,增添了一些变量和方法:下表给出了这些属性或方法的定义及说明: 属性名类型说明ValueInt32[]地图每一个网格的值,1表示可行,0表示不可通行PlaceWidthInt32地图横向有几个格,Plac 阅读全文
posted @ 2011-05-06 14:55 carekee 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 和UIPlace类似,UIItem继承自UIObject,为虚拟实验室中物品(VItem)提供一个可渲染的对象。其继承关系如下:配置文件前文说过,在虚拟实验室的引擎中,我使用两类XML文件来传递数据,这两个XML文件分别对应“灵魂”(V开头)和“外表”(UI开头)。关于VItem的属性文件,为以下形式:<person name='周慊' centerX='73' centerY='144' x='1100' y='780' file='engine1/michael.xml' id=' 阅读全文
posted @ 2011-05-06 14:54 carekee 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 在前面的章节里,我们完成了UIPlace的开发,来载入一个场景。有时候,会遇见这样的问题:当一个场景很大的时候(大大超出了显示器的大小),或者仅需要在屏幕的某一个区域中显示这个场景。这意味着我们在执行屏幕输出的时候,只需要在输出场景的一部分,至于其他的部分,需要通过和用户交互的手段(例如将鼠标移到显示区域的边缘,然后按下鼠标)来切换。为此,在虚拟实验室的引擎中,我引入了一个Stage对象,专门负责显示部分场景,以及和用户交互(接受鼠标点击滚动舞台)。舞台和场景舞台和场景的关系如下图所示:上图中,舞台的大小远远小于场景(UIPlace),因此,我可以通过鼠标点击地图滚动区域(浅黄色部分)来移动舞 阅读全文
posted @ 2011-05-06 14:54 carekee 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 本文将继承UIObject,实现背景的渲染,包括读取图片。和VPlace相应,我用一个继承关系来实现虚拟实验室引擎的渲染类,其中,UIPlace对应的是背景,而UIItem对应的是前景,本章将讨论如何实现UIPlace:Xml文件如前文所述,在引擎的设计过程中,我使用两个Xml文件来装载引擎对象的数据:一个Xml文件(属性文件)包括该对象的特殊属性(例如大小、引擎中的每一个对象都有不同的大小),供VObject使用,VObject对象通过Parse方法从该Xml中获取数据;另一个Xml文件(配置文件)则表示该对象的显示属性(例如该对象所用的素材,举例说明,一个场景中可能有两棵树,这两棵树所用的 阅读全文
posted @ 2011-05-06 14:53 carekee 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 在前面的章节里,我定义了一个抽象类VObject,作为虚拟实验室项目的“祖先”,接下来,我将实现两个具体类:VPlace和VItem,分别表示“场景类”和“物品类”。VPlace场景所谓场景,实际上相当于背景,像地板这些永远不会覆盖在人物之上的东西统统可以归咎于场景。引擎中的场景应该具有以下几个特点:不会轻易改变位置;永远位于物品下方,不存在空间排序问题及遮挡问题;在同一时刻,场景只能有一个;场景一般是静止不动的,因此可以用一副图片来表示场景;场景里有很多物品,这些物品按照一定的空间顺序排列。 根据场景的分类,还可以进一步抽象成VStreet(街道)、VRoom(房间)等具体信息,因此,在设计 阅读全文
posted @ 2011-05-06 14:52 carekee 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 灵魂和外表在Virtual Lab的引擎中,V(irtual)开头的类抽象了Virtual Lab中的对象(例如VObject,VItem),这些对象不能直接在Silverlight的UI线程中绘制到画布上,所以,还需要定义相应的“UI”类,告诉Silverlight如何渲染这些对象。在Virtual Lab引擎中,UI(User Interface)开头的类就是这些对象(UIObject、UIItem),例如UIObject类告诉了Silverlight如何把一个VObject对象“画”到程序中。我使用以下UML图来描述二者的关系,这就是桥接模式:使用桥接模式,能够明确地划分抽象与实现,类的 阅读全文
posted @ 2011-05-06 14:50 carekee 阅读(187) 评论(0) 推荐(0) 编辑
上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 61 下一页