赞助广告

 

年份

最新评论

评论 RSS

解决SupeSite聚合Discuz提示论坛路径设置错误

clock 十月 26, 2010 10:10 by author alex
解决SupeSite聚合Discuz提示论坛路径设置错误   在SupeSite的文件路径下找到admin文件夹,打开admin_bbs.php文件 查找到下面一行代码: $txt = sreadfile($_SC['bbsurl'].'/viewthread.php', 'r', 1); 修改为如下: $txt = sreadfile($_POST['bbsurl'].'/index.php', 'r', 1); 即可

C#获取本周,本月,本年,本季度等时间

clock 十月 25, 2010 10:17 by author alex
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本周周一 DateTime endWeek = startWeek.AddDays(6); //本周周日 DateTime startMonth = dt.AddDays(1 - dt.Day); //本月月初 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1... [更多...]

在3D世界中创建不同的相机模式——编写自定义内容导入器

clock 十月 23, 2010 10:19 by author alex
2.14 编写自定义内容导入器 问题 你想通过内容管道将一个自定义格式的文件导入到XNA项目中。因为你的文件的扩展名和/或结构与XNA支持的文件格式不同,默认XNA内容管道无法知道如何导入并处理你的文件。 解决方案 你需要编写一个自定义内容导入器,它可以从磁盘中读取文件,将有用的数据格式化为一个对象,做好被内容处理器处理的准备。因此,这个教程假设你知道如何创建自己的内容处理器,可以参见教程3-9了解内容管道的知识。 这个教程只关心自定义导入器。ContentIonmporter需要从磁盘读取数据并将它格式化为一个对象。本教程中,你需要读取存储在一个由逗号分隔值的文件(common-... [更多...]

在3D世界中创建不同的相机模式——创建一个模糊(Blur),(发光)Glow Post-Processing Effect

clock 十月 23, 2010 10:14 by author alex
2.13 创建一个模糊(Blur),(发光)Glow Post-Processing Effect 问题 你想在最终图像上添加模糊效果,或给场景中的物体添加光泽。 解决方案 这两个effect都是post-processing effect。可参见前面的教程学习如何建立一个post-processing框架。 你可以通过计算每个像素和一些周围像素的颜色值平均值并用这些值替换像素的原始颜色实现模糊效果。例如,如果图2-25中的格子是一张需要模糊的图像,你该如何计算像素9的最终颜色呢? 图2-25 计算2D纹理中的像素颜色的平均值 你可以通过将9个数字相加并除以9得到这9个数... [更多...]

在3D世界中创建不同的相机模式——创建一个Post-Processing Framework

clock 十月 23, 2010 10:04 by author alex
2.12 创建一个Post-Processing Framework 问题 你想在最终的图像上添加一个2D post-processing effect,诸如模糊,扭曲,摇晃,变焦,边缘检测等。 解决方案 首先将2D或3D场景绘制到屏幕,在Draw过程的最后,在后备缓冲的内容还没有发送到屏幕前,你需要将这个后备缓冲的内容存储在一张2D图像中,解释请见教程3-8。 然后,将这张2D图像绘制到屏幕上,但通过一个自定义的pixel shader实现,这也是本教程中有趣的部分。在pixel shader中, 你可以单独处理图像中的每个像素。你可以通过使用一个简单的SpriteBatch实现... [更多...]

在3D世界中创建不同的相机模式——创建一个ROAM地形

clock 十月 23, 2010 09:56 by author alex
2.11 创建一个ROAM地形 问题 虽然你可以使用前一个教程的四叉树技术让XNA只绘制在相机视野中的地形小块,这个方法还不是最好的。那些远离相机的方块仍会以离相机很近的方块的同样细节进行绘制,而有些三角形在屏幕上的绘制大小不超过一个像素。 因此,你想使用Lecvel-Of-Detail(LOD)方法让远离相机的方块以低细节绘制,当使用不同的细节层次绘制地形时,你会发现在边界上会出现破裂。 译者注:ROAM是Real-Time Camera-Dependant Optimally Adapting Mesh的缩写,可翻译为依赖相机的实时优化网格。 解决方案 本教程介绍一个强大的技... [更多...]

在3D世界中创建不同的相机模式——使用四叉树隐藏不在视野中的部分网格

clock 十月 23, 2010 09:42 by author alex
2.10 使用四叉树隐藏不在视野中的部分网格 问题 地形绘制是游戏中的一个重要组成部分。但是,使用教程5-8中的方法,当绘制一个很大的地形时会导致帧数下降。 解决方案 你可以使用一个四叉树简化绘制大地形的工作流程,四叉树类似于八叉树,因为你要将地形分割成更小的方块直到这些方块不大于指定的大小。 这个处理过程如图2-13左图所示。一个16 × 16大小的方块被分割成四个方块,每个小方块再被分割成四个方块。 使用四叉树的主要优点是当绘制地形时,你只需绘制在相机视野中的那些方块,这可以通过检测哪些方块与相机视景体相交做到,显示在图2-13的右图中,看得见的方块用灰色表示。 图2-... [更多...]

在3D世界中创建不同的相机模式——只绘制在相机视野中的物体:八叉树

clock 十月 23, 2010 09:35 by author alex
2.9 只绘制在相机视野中的物体:八叉树 问题 如果你使用教程2-5的方法检查相机视野中的每个模型,那么由于网格太多会极大地拖慢程序。你需要一个可扩展的方法决定场景的哪些部分需要被绘制。 解决方案 定义一个很大的立方体包含整个3D世界和所有模型。如果这个立方体包含太多模型,那么把这个立方体分割成小的子立方体。如果这些小的子立方体包含太多模型,那么再把这些立方体分割成更小的子立方体,直到立方体内包含的模型数量不超过某个特定值或立方体的大小足够小。 在绘制过程中,大立方体要求小立方体检查它们是否在相机视野中,如果子立方体不在视野中,则无需绘制之内的模型,如果在视野内并且子立方体还有自己的... [更多...]

在3D世界中创建不同的相机模式——天空盒

clock 十月 23, 2010 09:28 by author alex
2.8 天空盒 问题 你想在游戏中中添加一个场景,而不是单一颜色的背景。 解决方案 你用不着将物体充满场景的每个部分,只需简单地绘制一个很大的立方体,在立方体内部的六个面上贴上风景或房子内部的纹理,然后把相机放在立方体内部。 工作原理 有几种方法可以将一个天空盒放置在场景中,最简单的方法是导入一个模型文件,这个文件拥有自己的纹理和effect。如果你想获得完全控制权,你也可以自己定义一个立方体。我还展示了一个HLSL示例,介绍如何使用单张TextureCube纹理实现天空盒的方法,而这个纹理使用了HLSL的texCUBE内置函数。 以上两个技术相同点是: 立方体必须总是绘... [更多...]

在3D世界中创建不同的相机模式——创建一个相机飞入效果

clock 十月 23, 2010 09:26 by author alex
2.7 创建一个相机飞入效果 问题 你想平滑地将相机从一个位置移动到另一个位置,当然你也让相机的观察目标也能平滑地移动。 具体的的说,你想要一个功能让相机能沿着一条平滑的曲线从开始位置到结束位置。这个移动过程应该是平滑的,在过程结束后,你想让相机回到常规状态,将它作为一个第一人称相机。 解决方案 这个过程需要一个时间变量,当相机在开始位置时这个变量为0,到达结束位置时为1。 通过指定第三个位置作为相机移动的中点,你可以定义一个贝塞尔曲线(Bezier curve)。贝塞尔曲线是一条通过起点和终点的光滑曲线,非常靠近起点和终点之间指定的额外点(例如第三个点)。通过给一个贝塞尔曲线指定... [更多...]

在3D世界中创建不同的相机模式——检测相机与模型,墙或地形的碰撞

clock 十月 23, 2010 09:17 by author alex
2.6 检测相机与模型,墙或地形的碰撞 问题 你想检测相机是否已近靠近物体防止它穿过这个物体。 解决方案 要进行相机和模型的碰撞检测,你应将相机表示为一个包围球,使用这个包围球检查与模型的包围球或包围盒的碰撞。对应用户自定义的网格,诸如墙或地形,你必须首先找到墙或地形上的三角形任意位置的精确3D坐标。 工作原理 相机碰撞可分为与模型的碰撞和与已知顶点高度的三角形网格的碰撞。 相机与模型间的碰撞 这种情况中,你将相机作为一个球,只需调整球的半径就可以设置模型和相机间的最小距离。要检测相机球和模型的碰撞,你还需要模型的包围球或包围盒,这个球可以使用LoadModelWith... [更多...]

在3D世界中创建不同的相机模式——检查对象是否可见

clock 十月 18, 2010 21:32 by author alex
2.5 检查对象是否可见 问题 你想检查对象是否可见来决定是否要绘制这个物体。 解决方案 XNA拥有BoundingFrustum类支持这个功能,你可以通过传递View和Projection矩阵创建一个BoundingFrustum类,然后就可以很容易地在这个类中检查对象是否包含在视锥体中。 工作原理 视锥体定义了相机可以看到的范围,类似于削去顶部的金字塔,如图2-4所示,它的边是由视域角,近裁平面和远裁平面决定的,更多的信息可见教程2-1。 你应该让XNA只绘制包含在视锥体中的物体,否则,你会浪费显卡的处理能力。所以你需要一个方法用来检测对象是否在视锥体中。 XNA Fra... [更多...]

在3D世界中创建不同的相机模式——创建一个第一人称射击游戏(FPS)的相机:Quake风格的相机

clock 十月 18, 2010 21:17 by author alex

[更多...]

在3D世界中创建不同的相机模式——创建一个Freelancer风格的相机:使用四元数的3D旋转

clock 十月 18, 2010 21:15 by author alex
2.4 创建一个Freelancer风格的相机:使用四元数的3D旋转 问题 译者注:《Freelancer》应该是指Digital Anvil制作,微软发行的游戏,中文译名《自由枪骑兵》,好像曾获2003年E3大展最佳PC游戏奖,是一个太空冒险游戏。 你想创建一个可以朝任意方向旋转的相机,例如,一个空战游戏。你需要能绕着三根轴旋转才能实现这点,但是因为万向节锁(Gimbal lock)(一个旋转会对影响另一个旋转)的缘故,这非常难,但并不是不可能。 解决方案 绕着多个轴组合一些旋转会导致万向节锁的发生,这会导致不正确的结果。使用四元数(quaternion)存储相机的旋转可以避免这... [更多...]

在3D世界中创建不同的相机模式——指定相机的目标

clock 十月 18, 2010 21:05 by author alex
2.2 指定相机的目标 问题 当定义View矩阵时,你需要指定Target向量作为参数,这个向量设置了相机的旋转。 解决方案 当选转相机时,相机的位置会保持不变。这意味着旋转取决于相机的Target点和Up向量的变化。你可以通过使用 (0,0,-1)Forward向量并将旋转施加到这个向量上获取Target向量,这会产生一个新的Target点。你可以使用相同的方法获取Up向量。 工作原理 如教程2-1所示,一个相机需要Position, Target和Up向量才能唯一确定。如果你想让相机绕着某一点旋转,Position向量保持不变,但Target和Up向量都要发生改变。 给定绕着... [更多...]

在3D世界中创建不同的相机模式——创建一个相机:Position,Target和View Frustum

clock 十月 17, 2010 20:35 by author alex
2.1 创建一个相机:Position,Target和View Frustum 问题 在将3D世界绘制到屏幕之前,你需要相机的View和Projection矩阵。 解决方案 你可以在一个矩阵中保存相机位置和方向,这个矩阵叫做View矩阵(视矩阵,观察矩阵)。要创建View矩阵,XNA需要知道相机的Position,Target和Up矢量。 你也可以保存视锥体(view frustum),它是3D世界中实际可见的部分,在另一个叫做Projection的矩阵中。 工作原理 View矩阵保存相机位置和观察方向的定义。你可以通过调用Matrix. CreateLookAt方法创建这个矩阵... [更多...]

XNA 3.0——将数据保存到文件,从文件读取数据

clock 十月 17, 2010 20:24 by author alex
1.9 将数据保存到文件,从文件读取数据 问题 你需要在游戏中实现保存功能。解决方案虽然保存功能通常是创建游戏的最后一步,但你肯定需要在游戏中实现这个功能。首先,XNA使用默认的.NET文件I/O 功能,这意味着创建/打开/删除文件是很容易的。接着,使用XmlSerializer类能非常容易地将数据保存到文件并在以后加载数据。 唯一的问题是找到在PC平台和Xbox360平台都能保存的位置,要解决这个问题,你可以使用StorageDevice,它必须首先被建立。 注意创建一个StorageDevice的原理可能很复杂,但别被吓倒,因为本教程的其余部分(从“将数据保存到磁盘”) 非常简单和... [更多...]

XNA 3.0初步——突现GameServices

clock 十月 17, 2010 20:20 by author alex
1.8实现GameServices 问题 如在教程1-6中解释的那样,你可以将代码放在可复用的GameComponent类中,这些组件可以是相机、粒子系统,用户输入,billboard等。 使用GameComponent类的一个最主要的好处是你可以很容易在它们之间切换,例如相机模式。要把第一人称相机模式变到四元数相机模式只需在Game类的Initialize方法中包含一条代码即可。 但你必须保证在切换组件时不会改变其余代码(这些代码都要使用相机)。 解决方案 你可以让相机组件拥有同一个接口,例如(自定义)ICameraInterface接口。当初始化相机组件时,你需要让Game类知... [更多...]

XNA 3.0初步——使用GameComponents

clock 十月 17, 2010 20:10 by author alex
1.7 使用GameComponents 问题 你想将应用程序分离为GameComponent 类,实现组件的复用。 解决方案 程序的特定部分可以从程序中分离出来。在一个XNA程序中,大多数此种类型的部分都需要被更新和绘制,例如粒子系统和billboard(通常翻译为公告板或广告牌)系统(见教程3-11和3-12)。 正确的做法是为这些特定部分创建一个单独的类。在XNA Game 类中,创建这个类的实例,对它进行初始化,更新和绘制。所以你想让你的新类拥有自己的Initialize, (Un) LoadContent,Update和Draw方法,这让你就可以很容易地在Game类中调用它... [更多...]

黄金法则和技巧

clock 十月 17, 2010 17:11 by author alex
黄金法则和技巧 以下是这本书提到的一些“黄金法则”和诀窍。 诀窍 你需要在Xbox 360上有一个Xbox 360 Live帐户,当年开发和测试您的XNA游戏是它必须一直在线。 请确保您的PC和Xbox 360都在同一网络中并可以可以“看到”对方。您可以从电脑上pingXbox 360的IP或将Xbox 360游戏机作为媒体中心连接到您的PC机上。 当您在XNA Game Lanucher的设置中创建一个加密密钥但PC不接受时,可能是因为你输入错误,或它包含0(数字零)和O字母,看起来几乎相同,只是再次尝试即可。您可以随时创建一... [更多...]

友情链接赞助