云海航行Q+伟的幻想乡

热爱探索未知事物的coder 、 writer 、watcher and thinker
posts - 16, comments - 6, trackbacks - 0, articles - 0

orthello和NGUI的介绍就不说了。
利用好这两个插件就可以用unity来做2D游戏。

新建project导入这两个插件后,创建一个新场景,这时场景默认有一个主摄像机(main camera),这个摄像机是给OT用的。这时把OT prefabs拉进场景,这个摄像机就会和main camera绑定上。
orthello和NGUI都必须有自己的一个摄像机, 这个时候再创建一个NGUI,场景中就有了两个平行投影摄像机。再在pannel中添加一个button,这时候移动button,button会出现突然消失的情况。=。=
经过细致研究,发现是NGUI的摄像机空间比例和OT的差了N倍,在Hierarchy双击一下按钮,会自动对焦到button对象,就会发现原来button变小了。
解决方案:
新建NGUI时,GUI空间位于OT空间内部,只要把NGUI的摄像机移出OT空间就可以了。
渲染时 unity会自动将两个摄像机的渲染结果叠加.
这样就实现了orhello和NGUI的结合,可以开始做2D游戏了!

posted @ 2012-07-14 10:42 Q+伟 阅读(2768) | 评论 (0)编辑 收藏

         本文所述内容、观点是博主的个人想法,是错是对亦是不确定的。

这个标题看起来会让人觉得这文章讨论范围很大,其实不尽然。在这里,世界不是指每天我们触目可及的各种对象,如自然形成的或者被人类创造的物体(Object),而是指世界的本质。世界的本质,或者说成分是什么?我简单分为三者:一是物质,二是能量,三是规则。物质,是指具备质量的任何东西,小至原子、中子、什么什么子,大呢大到卫星、行星、恒星。能量呢,看不见的东西,但是也是确确实实存在,热能、电能、核能,我们都知道这些概念。

最后是规则。规则,比能量还要抽象,也可以说它们不是一个层次的东西,因为物质与能量之间的关系就是一种规则,物质和能量可以相互转化也是众所周知的。规则这东西非常常见,代数基本定理,勾股定理,力学三大定律,基本物理常数(光速、牛顿引力常量),元素周期表、甚至语言语法、程序代码都是。但是,在这里列举的多个规则,最后两个是人为定义的规则,前面的却是世界本身的规则。好了,这里出现第一个问题,世界的规则究竟是制定的?

         别联想了,这里不是要来讨论上帝的存在。在对世界的理性思考的道路上,这还远远没到尽头。继续追问,为什么这些世界规则如此稳定?假如不稳定呢?在我阅读《三体》第一卷的时候,有一句很有意思的话:“假如物理规则在时间和空间上不连续,那么物理学就失去了意义。”什么叫时空上不连续?可以这样想象,可能在宇宙某一个地方,光速比地球上的蜗牛跑得还慢。确实,这样子物理学就没有任何意义了,因物理学想搞明白的就是这些世界规则

         回到一切规则都很稳定的我们的世界。因为规则的存在,即是说一个原子撞到另一个原子,只要知道他们的速度方向,速度大小、质量大小、电子数等等本身的参数以及周遭环境的参数,再套上世界规则,下一刻,两个原子要往哪个方向弹开,速度大小都是确定的。概括来说,世界的下一个状态是由当状态决定的,上帝不掷骰子就是这么回事。当然现实情况是人类不可能做出这种预测,但在物理学界有一只妖怪,它可以做到,它叫‘拉普拉斯妖’。

我们可以把宇宙现在的状态视为其过去的果以及未来的因。如果一个智能知道某一刻所有自然运动的力和所有自然构成的物件的位置,假如他也能够对这些数据进行分析,那宇宙里最大的物体到最小的粒子的运动都会包含在一条简单公式中。对于这智者来说没有事物会是含糊的,而未来只会像过去般出现在他面前。” —拉普拉斯

       换句话说,古往今来什么事情都是确定好了的,只是在按时地发生着、演变着而已。甚至我们头脑里的所思所想都是早已注定了的。这是叫决定论。

       当我第一次听到这个说法的时候,有种很沮丧的感觉。因为在这个层面上看,人是没有自由意志的,跟石头、猴子没两样。

       但是,从人的角度看,人确实是这个世界特别的存在,世界是被动地按着人的想法在被改变。这样子来想,似乎主动权又回到自己的手上了。

       这种自由意志的前提正是因为人不是拉普拉斯妖,人的获取信息的能力、计算的能力都非常弱,无法计算出未来。

       但是要我承认,我所有因对美好未来的盼望所做出的努力,都是早已安排好的,非常难受。一切努力都变得不值一提,但是却知道不努力的话,事情不会变得更好。

       但是,打破这种确定论的桎梏的希望是存在的。因为生活在一维世界里的生物永远不会理解勾股定理。世界充满可能!

posted @ 2012-04-08 19:17 Q+伟 阅读(272) | 评论 (0)编辑 收藏

 

As We May Think》及现代IT技术给我的启发

范内瓦·布什(Vannevar Bush1890311~1974626日),这位具有6个不同学位的科学家、教育家和政府官员与本世纪许多著名的事件都有着千丝万缕的联系,其中包括“"曼哈顿计划”、硅谷、国际互联网等。倒转信息时代的时钟,无论审视信息技术发展史的哪个领域,布什都是在那里留下过足迹的具有远见的先驱性人物。正如历史学家迈克尔·雪利(Michael Sherry)所言,“要理解比尔·盖茨和比尔·克林顿的世界,你必须首先认识范内瓦·布什。”正是因其在信息技术领域多方面的贡献和超人远见,范内瓦·布什获得了“信息时代的教父”的美誉。

Vannevar Bush于1945年7月发表的《诚如所思》(As We May Think),已被信息界公认为是信息科学经典之作。在这篇文章中布什提出影响后世深远的“Memex”概念。为了协助人类思考及管理信息而设计的Memex,是一种透过电子计算机储存与检索大量信息的数据库系统;这个类似人脑的机器可依使用者的需求检索信息,并着重于使用者和系统之间的互动。系统藉由建立联结路径、搜寻、处理及整合等技术,帮助学术研究者收集、组合、分析各种资料并加以应用。此外,Memex的设计具有缩小储存空间、增快检索速度、扩大存储器等特性。这个构想奠定后世个人计算机、信息检索、超文本、超媒体、在线公用目录、全球网络及数字图书馆等技术发展的方向。

   我承认以上两段是摘抄的,其实不是为了凑够字数交作业,而是觉得这是对这篇文章和这位作者最好的描述。

  畅想未来更壮观的工具很有吸引力,而研究现在已知的或正在快速发展的方法和部件会很枯燥。预测是很困难的,但根据当前的情况进行预测,就更能说出其可能性,而不只是预言,还可以是一个建议,因为基于已经存在的情况进行的预言更有效,不像是基于未知的预言那样只是猜测。

   我从小就是属于对科学,或者科幻的东西很着迷的人。小学毕业前就几乎把倪匡的《卫斯理》一系列小说看完了。倪匡也是几十年前就在写科幻小说,即使当时科学技术不发达,每个人的知识面也很有限,而倪匡却能在基于自己对世界的认识上,幻想或者是描绘出了许多大大超越于时代的小说故事,这些故事之所以吸引人,也许就和《As We May Think》的魅力所在,是同一个道理吧。

   对未来的幻想总是人们的期盼。

   在中学时期,看的书偏向于文学,科幻小说看得比较少了。感觉那时候自己也变得不那么爱想象了。也可能是因为自己把这种骨子里的对科学的着迷转移到了电影里。美国的什么《终结者》《Matrix》或者最近的《源代码》,每一部都深深震撼了我,不只是华丽的特效,而是藏于背后的对未来世界的预言。

   比如《终结者》,说的主要就是有一台电脑有一天变成具有主动思维的电子生命体,然后给世界带了无比的灾难。而我自从来到软件学院之后,也会一直在想,究竟有没可能出现真正的AI。直到现在大三,我还是觉得答案在这个时代,仍然是不可知的。

   而如果真的能制造出这样的“生命体”,那这个AI就相当于这个“生命体”的大脑,或者是CPU。而更进一步的,它不仅需要有聪明的脑袋,还必须有“身体”,有“四肢”。

   目前IT界肯定存在一大群人在研究真正的AI,但是更实用更有价值的研究却是这个AI生命的“躯体”。这个躯体,可以说就是我们现在的PC、智能手机、触摸式交互终端、Kinect等等。PC如果安装的Windows OS,那基本只要认识几个字的人花点功夫都能学会怎么用,而智能手机、触摸式交互终端(我拼的一个词,我的意思是指类似ATM,地铁充值机那种机器)、Kinect(计算机视觉技术带来的新一类交互设备,不知道就搜一搜吧)都是如此。互联网就好像是关系纽带。躯体的定义,我的理解就是,具备与人类交互的能力,而方式并不复杂的各种智能设备。

   虽然这些机器内部系统的实现不过都是一坨坨的代码,但很难说有一天这些代码会变成不需要人类去描写,而是代码自己生成代码(自编程这个东西已经有了,不过生成代码的规则归根结底还是Human)。这些代码也就会是之前说的生命体的二进制大脑了。

   说到为什么要做得如此易于使用,易与交互,很简单,就是为了尽可能地,任何人都能使用,也就能把价值最大化。因为并不是人人都会用PS,但是美图秀秀这种东西,天然呆女生都会用了。

   这种人机交互界面的研究,就是Human-Computer Interaction(HCI)科学了。百度百科的定义是,这是一门主要研究关于设计,评价和实现供人们使用的交互计算系统以及有关这些现象进行研究的科学。

   关于这个学科,目前才上了两节课,我也不甚了解。

   下面回来本文标题写着的,本人的一些对此的想法。

   人机交互技术,目前看来,基本往电影里所想象的场景发展。如,全全息投影、三维交互系统(那种把图像投影到空间,可以在空气中进行交互的东西)或者裸眼3D,智能家电,Wii的体感游戏或者是无需手持的Kinect技术。Kinect,最近有一个很火的视频,就是有人用kincet来玩《水果忍者》。可以想象,人机交互技术深深改变着这个时代。

   而这些可以看到正在开发的技术,不能说是对一个领域的未来的预言。我想象的是,未来50年甚至更遥远的某年,世界会这样的:

   人们不再需要手机、电脑,而只需用一个轻巧的形状类似蓝牙耳机的方便携带的设备,带在耳朵上或者裤带里。启动它,即可投影出一个2维或者3维的操作界面,经过某种DNA技术的身份识别后,再在这个无实体的“显示器”中轻轻点击,即可快速地打电话(可同步视频会话)、上网、听音乐(音频设备可以远程外接)、玩游戏。如果某天丢失了这个设备,也不是什么问题,因为数据是存储在云端的,只需使用新的设备即可继续工作。一切个人事物信息都记录在安全的云端,云端就是建立在世界各个角度的一些超大存储规模的服务器,存储容量那时候应该是足可以应付信息的产生速度。

   而世界上的邮递员、司机、收营员等都将下岗,应该一切都可以使用小型高敏捷的机器人代理了…

   想了想,还是不要再写了,在没有相当广和深的知识面之前,说什么都只是无稽之谈或者说是价值不大。而如果想要看到自己幻想中的世界,就应该默默地为你的幻想做出努力。作家会把自己所想的世界写成小说,音乐家会把自己心里聆听到的声音写成乐章,玩政治的会把自己的“卓见”用到社会上去..

而我自己,喜欢的是游戏,能带给人快乐、感动的游戏。以前是玩别人的游戏,而在现在,我想我已经可以开始慢慢打造我心里幻想的世界了。

 

 

posted @ 2011-09-21 20:31 Q+伟 阅读(901) | 评论 (0)编辑 收藏



鉴于本人所在云海航行游戏工作室策划游戏速度远远大于游戏开发速度(我看世界上不存在与我们相反的情况吧哟呵呵呵),而工作室目前只有两名菜鸟级程序开发者。所以本人准备开发一个开源的轻量级游戏引擎,暂命名为"01引擎"。
目前处于技术准备阶段末期,下一阶段是系统设计。
整个开发过程会记录在本博客。
因本人在学习游戏开发的过程中,花了很多时间在摸索上,走了不少弯路(但也得到很多),原因是网络上好的有系统性的游戏开发教程太少,所以本人准备为游戏开发爱好者们提供一个参考案例。

愿伟大的小小程序员们能从我们的(可能是失败案例)引擎开发过程中吸取经验和教训,也希望同行们能给点意见。

下面是svn链接:
短期内没有东西看哟呵呵呵。更新了会相应地发布日志。








posted @ 2011-09-19 23:20 Q+伟 阅读(2018) | 评论 (4)编辑 收藏

     摘要: 原文链接:http://www.blogjava.net/wxb_nudt/archive/2007/09/11/144371.htmlDLL编写教程半年不能上网,最近网络终于通了,终于可以更新博客了,写点什么呢?决定最近写一个编程技术系列,其内容是一些通用的编程技术。例如DLL,COM,Socket,多线程等等。这些技术的特点就是使用广泛,但是误解很多;网上教程很多,但是几乎没有什么优质良品。我...  阅读全文

posted @ 2011-09-19 22:59 Q+伟 阅读(153) | 评论 (0)编辑 收藏

视频游戏(VideoGame),是绝对离不开图形的。计算机图形学(Computer Graphic Science),涉及图形硬件(GPU)、图像标准(bmp,png,jpeg..)、渲染算法(render method)、动画(Animation)、虚拟现实(VR)等。而跟游戏相关的主要是图像和图形(Kinect类的游戏涉及计算机视觉,也就是图像分析、模式匹配)。注意,图像跟图形要区分开,不严格地说,图像是标量,指通过拍照、扫描等方式得到的位图(Bitmap);图形是矢量,指根据数据、公式、算法用计算机生成的图形。而3D模型基本就是图形和图像在三维空间上的组合,内部是一系列的顶点坐标和贴图坐标的组合及贴图文件等。

        

大二我在做一个2D游戏《东方千⑨谭》的时候,一开始绘图使用的是QT的图形库,读取图片、显示图片都可以用这个库做到。后来做Demo,测试同时绘制300个人物(64x64的贴图)的时候,帧率已经无限低了。后来知道了是因为这个库的绘图API内部是软件渲染的。软件渲染,顾名思义,即是用CPU来处理图像显示的工作,换言之就是自不量力地抢了GPU的活来干。最后我明白了,拿QT来做游戏是个很蠢的行为。而要加快渲染的速度,就需要使用硬件渲染的方法。也就是使用3D图形APIOpenGL / Direct3D

 

我是在大一的暑假开始接触3D图形学,至今算是学了一年有余。我个人认为,对于3D和图形学,必须搞清楚两者之间的关系。计算机世界里的3D其实就是数学,举例来说就是,线性代数中平移、旋转、缩放的应用,曲线曲面技术中的Bezier、和NURBS,还有计算机动画的插值算法(样条插值、平滑插值、线性插值)等。而3D图形学要做的就是,怎样根据物体的三维数据来模拟显示物体,即如何渲染到二维平面,再输出到显示器。

这个工作是有多个步骤的,称作图形处理流水线,或者渲染管道。这条流水线大部分工作都是GPU来执行,而实际上3D数学部分(矩阵变换或四元数计算)也是GPU的工作,目前通过CudaOpenCL还可以利用GPU做图形学以外的事,这一个领域叫做通用并行计算技术。

关于渲染管道(pipeline),OpenGLDirectX的教程肯定都会说到。要搞懂什么是管线,估计刚学图形学的人都需要一定时间。学一套3D API 不是什么难事,有一本好的入门图书和一份API查询手册就够了。学习3D图形学重要的是理解它的工作原理。如矩阵变换的旋转矩阵,就是比较复杂的一个core矩阵,要搞懂它就要去看一遍这个矩阵的推导,再看下旋转矩阵是如何应用到实际中去的。

 

关于OpenGLDirect3D的抉择问题,初学3D图形学肯定会有,我个人觉得OpenGL是初学者必学的,不仅跨平台性强(D3D只能用在WindowsWP7Xbox,而OGL几乎所有平台都支持,另外,假如WebGL,势必会带来一场网站开发的革命),而且接口设计得简单易懂。D3D应该是在实际项目开发的时候,再根据环境条件等来考虑是否使用。如果OpenGL学得差不多了,学D3D不过就是学习另一套API的事。下面是OpenGL Vs Direct3D的一篇文章,值得一看:

OpenGL 3 & DirectX 11: The War Is Over》:繪圖 API 終戰之日?

http://blog.monkeypotion.net/reading/gameprogreading/opengl-versus-directx-the-war-is-over

OpenGL的教程,个人推荐《OpenGL的超级宝典4th(Super Bible),这里就不做介绍了。

 

3D图形学的高速发展是从3D游戏之父卡马克开发的《DOOM》出现在人们面前算起的。(推荐一本书《DOOM启示录》,讲述了卡马克和罗梅洛两位游戏界传奇人物的传奇故事,绝对霸气,震撼人心)至今3D图形学发展十几二十年,固定渲染管道也是很多年的产物了。现在这个管道不再是完全让计算机管理,而是其中的几个环节可以由程序员来控制。这个技术就叫shader,着色器(顶点着色器、片段着色器、 几何着色器)。

Shader编程是完全不同于其他语言的,因为它考虑的是并行的问题,并不是线性的问题。Shader语言有三种,OpenGLGLSL, D3DHLSL,还有NvidiaCg(此Cg不是通常意义的CG,而是C for graphic,即用于图像的类C语言)。Cg是由Nvidia提出的,目的是为了调和OpenGLDirectX的矛盾。Cg的优点在于,它是处在GLSLHLSL两者之上的,用Cg写的着色器代码编译后就变成GLSL或者HLSL的代码,shader程序员只需写一份Cg语言的代码就可以了(Cg语言的语法几乎和HLSL一样)。

另外可以看一下这篇文章:《着色语言(Shader Language),以及HLSL VS GLSL VS CG

链接:http://bbs.gameres.com/showthread.asp?threadid=138918&page=1

Cg的各种信息和SDKSample下载可以到英伟达官网查找:

http://developer.nvidia.com/cg-toolkit-archive

 

学习Shader编程,有很多不错的书,虽然我都没看过,比如Nvidia的《GPU gem123,这3本有中文版。另外《Shader X1-7,看介绍也是很不错的,不过基本没中文版。

Shader 可以实现目前大部分的实时、非实时渲染算法(阴影、光照等)。注意,Shader着色器语言是用来实现渲染算法的,当然存在有人利用shader语言来做AI等事情(这些以后估计都会是cudaOpenCL的工作)。

 

说回游戏。游戏实际上并不会用到太多最新最前沿的技术,因为要考虑到老百姓的PC配置都是参差不齐的。顶点着色器和片段着色器,现在大部分的显卡都至少支持最基本的功能,而Geometry shader,就仍未普及,即只有近几年内的显卡才有这个能力。

 

对于二维平面游戏,图形图像技术通常是用来做特效,完全用贴图的游戏已经过时了。例如可以用shader做模糊(Blur)、扭曲、灰度图化、强光等等PS中的滤镜效果,还有利用3D API来增强画面效果,如3D旋转菜单、游戏场景三维化(实际上只是起美化的作用,如东方Project的一系列弹幕作)。并且存在有二维游戏中的贴图是通过把由三维模型压到二维平面而得到的。

 

三维游戏,就复杂太多了,甚至比做计算机动画还复杂,因为不仅要考虑效果、还要考虑效率(达到60/秒左右的图像输出能力就是实时渲染)。在效果上有非真实渲染和真实性渲染。真实性渲染就是尽可能地仿真,如如何实现现实中的镜面反射、次表面散射、雾、镜头光晕、阴影等。非真实渲染就是将人物、场景渲染成卡通效果。利用shader就可以实现这些效果。

 

         如果是小团队开发游戏,而且打算自己做一个商业级的3D游戏引擎,那这个小团队处境堪忧。首先技术硬实力要过关,这不是一件个人英雄可以办到的事(3D算法、渲染算法,没有潜心学习个几年,做出来的引擎不会强到哪里去)。全3D游戏涉及的技术太多,与其冒风险自己开发一个引擎,不如花钱买一个商业级的或者使用开源引擎(LGPL license的应该有)。而如果是做2D游戏,应用一些shader特效来强化视觉冲击力倒是可以。

 

图形只是游戏的一个方面,还有很多方面需要重视,像游戏引擎架构(可扩展性)、

脚本引擎、声音引擎、GUI系统、游戏编辑器、资源管理、版本更新方法等,网游的话就是另一个话题了。本人对网游暂无研究,最难的部分可能是网络安全和数据传输,同步等。

 

————————————————————————-

一不小心扯了2000+字了,也不知我的这篇经验总结对读者有没有启发作用。现在说说我自己。我是在大学时开始接触编程,兴趣不算太浓,只是因为我自己喜欢玩游戏,所以才报了软件工程专业..一开始总是在想学编程是否有前途,是不是真的很难学。而其实现在还是在想。毕竟谁也不想随随便便就过了一生。对于游戏开发,我也仅仅是个初学者,我不奢望能掌握游戏开发的全部知识,只是梦想着有一天,能拿着自己的游戏,在某个游戏展上介绍自己的游戏~

工科专业,任何一个学起来都不会轻松,如果是要成为领域高手。大学本科,确实是打基础(不只是专业课程学习)的时期,而也是寻找人生方向的时期。这个时候很容易浮躁,可能因为不喜欢自己的专业还是没有信心。个人认为,无论你的打算是怎样,只要生活态度是好的,学习态度是向上的,对自己所作的每一个决定都负责,每一天都过得充实、健康,那就够了。不要为明天忧虑。

posted @ 2011-09-19 19:39 Q+伟 阅读(826) | 评论 (1)编辑 收藏

仅列出标题
共2页: 1 2