【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们《Visual C++游戏开发》专栏的游戏引擎导论,也希望能通过这篇文章,能让大家有所启发,对游戏引擎,对渲染流水线的概念有更深刻的认识。

文章首先分析了学习游戏引擎的必要性,然后介绍了游戏引擎的概念和相关知识,接着介绍了几款最具人气的开源游戏引擎,然后对市面上存在的所有游戏引擎进行了列举,并为所有列出的游戏引擎都给出了官方网站的链接。文章末尾回归了我们Direct3D的主题,为后续内容的讲解进行了铺垫。

 

 

 

一、学完DirectX,我们该干什么?

 

 

浅墨觉得,历代DirectX龙书的作者Frank Luna在龙书中忽视了非常重要的一方面内容的讲解,那就是就是学完了DirectX我们接着该做什么。

这大概是很多怀揣游戏开发梦想的热血青年们曾经思考过的问题。

 

浅墨也曾经在这问题上迷茫过,也因为没人指明前路而走了不少弯路。

不过后来在黑暗中不断地摸索,将荆棘变成坦途之后,终于摸索出了一条正确的道路。

也就是看完龙书《DIRECTX.9.0.3D游戏开发编程基础》之后,我们需要如何学习,来把学到的知识立体化,最终转化为开发游戏的实际能力。首先我们需要再看一本书,《Real-Time Rendering》,也就是(RTR)实时渲染技术,目前出到第三版了。(这本书并没有中文版,大家如果要走游戏开发的道路,读完龙书之后,剩下基本上都要靠读英文书了。)

学完龙书,也可以选择自己喜欢的游戏引擎来接触并掌握了。看完龙书后浅墨首推学习Irrlicht,然后进阶推荐Ogre。两者都是开源游戏引擎,都有着源代码提供下载学习,而且网上对这两种引擎的研究热情很高,资料丰富,引擎代码字里行间都是哲思,掌握其中的代码并纳为己用,自己写出像样的游戏demo来是不成任何问题的。

 

 

下面,就开始看看我们这篇文章的主角——游戏引擎

 

 

 

二、站在巨人的肩膀上:游戏引擎导论

 

 

1.游戏引擎的起源和意义

 

上帝说,要有光,于是,就有了光。

曾经有一段时期,游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推销给玩家。尽管那时的游戏大多简单粗糙,但每款游戏的平均开发周期也要达到8到10个月以上,这一方面是由于技术的原因,另一方面则是因为几乎每款游戏都要从头编写代码,造成了大量的重复劳动。渐渐地,一些有经验的开发者摸索出了一条偷懒的方法,他们借用上一款类似题材的游戏中的部分代码作为新游戏的基本框架,以节省开发时间和开发费用。根据马克思的生产力学说,单位产品的成本因生产力水平的提高而降低,自动化程度较高的手工业者最终将把那些生产力低下的手工业者淘汰出局,引擎的概念就是在这种机器化作业的背景下诞生的。

 

简而言之,因为想用更短的周期开发游戏,省掉重复编写代码的功夫,于是便有了游戏引擎。

 

首款的3D引擎诞生于1992年,3D Realms公司/Apogee公司发布了一款只有2兆多的小游戏——《德军司令部》(Wolfenstein 3D)。之后这款游戏引申为Wolfenstein 3D游戏引擎,这也是史上首款3D引擎,它的作者是大名鼎鼎的约翰·卡马克,这位id Software公司的首席程序师正是凭借这款Wolfenstein 3D引擎在游戏圈里站稳了脚跟。

在此之后,游戏业界都受此启发,各式各样的游戏引擎层出不穷。而各种游戏引擎的出现,使得游戏开发并不需要从零开始,从而使得开发的周期大大缩短,也使开发成本大大降低。

 

游戏引擎崛起,游戏产业的黎明,就此降临。

 

 

 

2.什么是游戏引擎

 

游戏引擎好比赛车的引擎,是用于控制所有游戏功能的主程序,从计算碰撞、物理加速系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。

这里我们丢出一个概念。游戏引擎是指一些已编译好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出一款游戏作品,而不是从零开始写起,这样大大缩短了开发的效率,开发的时间和开发的成本。

 

可以这样说,游戏引擎让我们站在巨人的肩膀上进行游戏的开发,而不是从零开始。

 

 

 

3.一款完善的游戏引擎的构成

 

我们很大程度上将游戏引擎都理解为渲染引擎,分为2D图形引擎和3D图形引擎,其实游戏引擎并不单单指渲染引擎。渲染引擎只是一款完善的游戏引擎最重要的组成部分,而一款完善的引擎,还包含物理引擎,碰撞检测引擎,音效引擎,脚本引擎,电脑动画引擎,人工智能引擎,网络引擎,场景管理引擎以及IO管理引擎等等。

其中,3D引擎的渲染系统通常建立在一套或者多套高级的图形API之上,比如我们熟知的Direct3D与OpenGL。

 

 

4.DirectX与游戏引擎的区别

 

很多朋友在评论中提到不清楚DirectX与游戏引擎到底有何区别,在这里我们就来展开讲一下,其实说起来非常简单。

首先,DirectX是微软旗下的一种应用程序接口(API),它为各种品牌的硬件提供了一个共同的硬件驱动标准,无论你是什么牌子的硬件,只要你遵循DirectX约定的准则,用DirectX这套API开发出来的游戏就可以在你的硬件上很好的运行。DirectX,我们可以理解为他为硬件驱动。而Direct3D,只是DirectX之中负责3D图形渲染的一个组件而已。

 

游戏引擎是为了实现一款游戏雏形而编写的一系列可重用的代码,很多游戏引擎的渲染部分实现了对Direct3D的封装。我们可以理解游戏引擎为一系列的软件代码,而我们利用游戏引擎中已经现存的代码,开发起游戏来就能事半功倍。

 

所以,综合一下。

DirectX可以理解为硬件的驱动,它为各种品牌的硬件提供了一个共同的硬件驱动标准。

游戏引擎,是一系列构成一款游戏的可重用的代码,是用于控制所有游戏功能的主程序,游戏引擎的前身可为一款完整的游戏作品。

 

 

 

5.人气开源游戏引擎介绍

 

想事半功倍地开发出属于自己的游戏,在选择游戏引擎上是必须要下足功夫的。

多半的游戏引擎都开源且免费授权的,也就是说,如果我们采用某款开源游戏引擎开发出了自己的游戏,无需任何费用,只要在我们的游戏作品中表示,使用了什么引擎来进行游戏开发的就可以了。也就是我们经常在很多游戏片头会看到的logo。Power by XXX,比如Power by Ogre。下面我们就来介绍几款目前比较火热的开源游戏引擎,我们用他们进行游戏开发是完全免费的:

 

Ⅰ.Irrlicht Engine

Irrlicht Engine(鬼火引擎)始于2003年,次年即被评为最佳开源游戏引擎。它具有高性能的实时3D引擎,用C++编写,也可用于.Net语言。拓展语言绑定包含java,perl,ruby,python.跨平台支持,使用D3D,OpenGL以及自带API. Irrlicht Engine可以在移动平台Android以及iOS上使用。值得一提的是,鬼火引擎有专门的Andorid版。

其功能特点可以与商业3D引擎相比。优点是容易掌握,好学。新手入门建议学习Irrlicht

 

Ⅱ.Ogre

OGRE(面向对象的图形渲染引擎):OGRE是用C++编写的,以现场为导向,灵活的三维引擎,它主要用于那些利用硬件加速的3D图形应用程序。它的类库提取了所有基础系统库的细节,如Direct3DOpenGL ,并提供了一个基于世界对象和其他直观类的界面。Ogre支持跨平台,也就是说,Ogre理论上可以在Android以及iOS等移动平台上使用,不过需要进行相关的移植。

Ogre人如其名,完全采用面向对象的思想来进行设计,整体结构显得非常优雅,宛如一件艺术品。在开源游戏引擎中,Ogre有着最华丽的渲染质量,可以和大多数3D商业引擎的渲染效果一较高下。浅墨非常喜欢这款开源引擎,只可惜它仅仅是图形引擎,而不是功能全面完整的游戏引擎。值得一提的是, 目前非常具人气的ARPG游戏《火炬之光》系列就是采用的Ogre引擎。

这里我们贴一些2012年9月20日刚上市的《火炬之光2》的游戏美图:

 

好了,看完绚丽的游戏截图,下面我们继续来学习。相信总有一天,我们也可以亲手写出这样优秀的游戏作品出来。

 

 Ⅲ.Delta3D

Delta3DDelta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用。其模块化设计集成了其他的开源项目,如开放场景图开放动力学引擎人物动画库‘OpenAL’ Delta3D把这些开源项目集成到一个易于使用的应用程序编程接口中。

 

 

Ⅳ.NeoEngine
NeoEngineNeoEngine是一个全功能的用C++编写的开源3D三维游戏引擎。该引擎是多平台的,包括OpenGLDirectX渲染功能,支持Windows LinuxMac OS X系统,它提供了场景管理,顶点和像素着色,骨骼动画和物理,脚本以及一个完全集成的工具链。
 


Ⅴ.Bullet
BulletBullet是三维游戏多重物理库,提供最先进的碰撞检测,柔软身体和刚体动力学。这个游戏引擎被许多AAA级的游戏公司用在PS3 Xbox 360 ,任天堂的Wii、以及PC 。这个库可以免费用于商业用途。


 

Ⅵ.Power Render
Power RenderPower Render是一个为游戏和3D图形准备的软件开发工具包。它为开发者提供了一个API,为美工准备了一些工具,这些工具可以实时预览3ds MaxMayaLightwave的模型。新版本还可以预览高动态范围成像并支持OpenEXR文件格式。下载 Power Render 6 35.1MB exe)。 

 

 

6.一些思考

 

很多朋友也会想到,既然都有了现成的游戏引擎为我们封装好各类DirectX和OpenGL的库函数,甚至做出了各类可视化的设计工具,让我们无需了解调用的细节就可以用这些工具来制作出自己的游戏,那我们是不是就不用去学习图形API,也就是不用去学习Direct3D(或者OpenGL)了?

一千个人人眼中有一千个哈姆雷特。

如果你是本着快速开发一款游戏就完事交差的心态,知其然不知其所以然,DirectX其实并不用去学习,直接去学习一款好的游戏引擎的SDK就可以了。

如果你是本着学习求知的心态,想要把游戏开发的各方面知识和细节做到心中有数,甚至以后想自己写一款游戏引擎,DirectX(或者OpenGL)是必须要学的。学完DirectX(或者OpenGL)之后,再来接触一款游戏引擎,接触它的源码,我们就有资本看懂这些源码的实现细节,就可以很容易地把这款游戏引擎使用DirectX(或者OpenGL)进行渲染的细节脉络看得清清楚楚。经常我们还涉及到了各种不同版本硬件渲染的支持问题,比如DirectX 8与DirectX9,这时候就会考验我们对图像API的掌握情况。 同样,掌握了DirectX(或者OpenGL)更利于我们对渲染的优化。

 

 

 

 

 

7.市面上各类游戏引擎的列举

 

最后,下面我们列举出市面上存在的游戏引擎,点击各个引擎的名字就可以跳到相应的引擎官网地址了。

需要指出的是,这里的引擎有的只是图形引擎,有的只是物理引擎,也就是说并不都像那些完善的商业引擎,比如虚幻3引擎(Unreal Engine3)一样,具有完善而功能全面的物理引擎,碰撞检测引擎,音效引擎,脚本引擎,电脑动画引擎,人工智能引擎,网络引擎,场景管理引擎以及IO管理引擎等等。

 

 

开源2D引擎:

 

  • cocos2d
  • d2d
  • ika
  • AGen
  • gosu
  • Mokoi Gaming
  • LOVE
  • Gosu
  • PTK
  • Thousand Parsec
  • PPTactical Engine
  • elf2d
  • Daimonin MMORPG
  • Blackthorn
  • lastexpressengine
  • tamy
  • stardust
  • ruge
  • MAGE
  • Edge Game Engine
  • Orx
  • chingu(Ruby)
  • HGE
  • FlatRedBall
  • DxIce
  • exgine(dephi)
  • Entropia
  • OSARE
  • ProtoEngine(Javascript)
  • mofe
  • tonk(Python)
  • Bismuth Engine
  • retroremakes-framework
  • scage(Scala)
  • ArcLib
  • tIDE
  • flamingoengine(Python)
  • Ethanon
  • angel engine
  • FIFE project
  • Novashell
  • Weaver(Linux)
  • verge 3
  • GTGE
  • ArcEngine

     

     

     

    开源3D游戏引擎

     

  • Ogre
  • Crystal Space
  • Delta3D
  • Irrlicht Engine
  • CHAI 3D
  • Cafu Engine
  • ZFXCEngine
  • Q3Viewer
  • Drag[en]gine
  • DUMB(Linux)
  • DXQuake3
  • Brume
  • Open Toolkit
  • RaydiumEn
  • PySoy (Python)
  • pygame(Python)
  • BlendELF
  • Ambrose3D
  • AgateLib(.NET)
  • D’Enfent Engine
  • Asphyre Sphinx(Delphi)
  • pyggel(Python)
  • NeoEngine
  • Horde3D
  • ika
  • Lightfeather
  • syBR Engine
  • SoftPixel Engine
  • SED
  • RomantiqueX(XNA)
  • GLOBE_3D
  • NeL Engine
  • NewWorld3D
  • M0TE
  • MUD Designer(C#)
  • Muli3D
  • Linderdaum
  • Lilith3D(Geo-Morphing)
  • Entropia Engine
  • SxDL
  • APOCALYX 3D Engine
  • Genesis3D
  • QuakeForge
  • NetGore (C#)
  • Stratagus
  • SDL
  • PLIB
  • ClanLib SDK
  • GLFW
  • Allegro
  • 3DzzD
  • Jad Engine (C#)
  • Agar
  • 6DX 3D Engine
  • OSG
  • Cube 2: Sauerbraten
  • SCEngine
  • vbGORE
  • TNT Basic
  • nebula3
  • Sphere RPG engine.
  • GhostEngine
  • Hazy Mind(XNA)
  • nagine3d
  • mako engine
  • aeon3d
  • mcore3d
  • tubras
  • mgep
  • Sylphis3D
  • Yage
  • XreaL
  • Q 2.0
  • Quesa
  • Reactor3D(XNA)
  • Metrolog Xg
  • plush
  • Lystra Engine
  • LightFire(C#)
  • LEAF2
  • Lightning Engine
  • jMeteor
  • QBasic
  • Lightspeed 3D(MacOS)
  • Protea
  • Original3D
  • Purple#
  • Cat Mother
  • ExoEngine
  • Poly Engine
  • XEngine
  • Xvizn
  • Yake
  • OpenSpace3D
  • rgdengine
  • ezrpg(PHP)
  • glueengine(C#)
  • G3DRuby
  • netgore(C#)
  • fosengine
  • u-nebula
  • renderengine(JavaScript)
  • ltegameengine
  • axonengine
  • jgge
  • Espresso3D
  • RetinaX
  • Reality Factory
  • gmogre3d
  • prequengine
  • Epee Engine
  • Axiom 3D Engine
  • G3D
  • OHRRPGCE
  • Open Game Engine
  • Baja Engine
  • Blender
  • Irmo
  • Xith3D
  • Soya 3D(Python)
  • Panda3D
  • Quake Engine3
  • Quake Engine2
  • Amaltheia
  • Quake Engine

     

     

     

    商业通用游戏引擎:

     

  • Unreal ENGINE3
  • CryENGINE3
  • Gamebryo
  • Vision Engine
  • unity3d
  • Source Engine
  • Shiva 3D
  • Unigine
  • Torque 3D
  • C4 Engine
  • Truevision3D
  • Demoniak3D
  • CSP engine license
  • Codecreatures
  • Buzz 3D
  • 3DSTATE
  • Antiryad Gx
  • Glacier
  • Esperient Creator
  • Lucid
  • ludiloom
  • Luxinia
  • LawMaker
  • GameStart
  • Glint 3D ScriptENGINE
  • Esenthel Engine
  • GameCore
  • Nowhere Engine
  • S2Engine
  • Quest3D
  • Exocortex
  • Frame Simulator
  • Codecreatures
  • worldaxis3d
  • Xors3d
  • VRcontext
  • CPAL3D
  • Ready At Dawn Engine
  • Nytro Game Engine
  • game start3d
  • Visual3D Game Engine
  • Vicious Cycle Software
  • MetaVR
  • Grualia Game Engine
  • Gamestudio
  • BlitzMax
  • Cipher Game Engine
  • Visual3D Game Engine
  • Wild Pockets
  • 3DVIA Virtools
  • Vicious Engine
  • VATAN ENGINE
  • Cobra 3D engine(Cobra )
  • Qube Software
  • FreshEngine(PSP)
  • Shark 3D
  • eye-sys
  • NeoAxis Game Engine
  • DX Studio
  • 3DVIA Virtools
  • Agency9
  • Abyssal Engine

     

     

    商业MMO游戏引擎:

     

  • Hero ENGINE
  • Realm Crafter
  • Zythum-Project
  • Bigworld
  • Chaos Game Engine
  • Prime Engine
  • Multiverse

     

     

     

    Android 2D开源游戏引擎:

     

  • AGE
  • Angle
  • cloak
  • Cocos2D
  • juicygames
  • libgdx
  • Rokon
  • mages
  • candroid engine
  • andengine

     

    Android商业游戏引擎:

  • Roar Engine

     

    Android 3D开源游戏引擎:

  • catcake
  • jPCT-AE
  • kwaak3
  • Gamine
  • Alien3D
  • forget3d
  • Papaya

     

     

    iPhone商业游戏引擎:

  • airplaysdk
  • PlaytoTv
  • Kanji
  • Shiva Ston3d
  • iTGE
  • Bork 3D
  • Unity For iPhone
  • GameSalad
  • iXors3d

     

     iPhone开源引擎:

     

  • galaxyengine
  • gamekit
  • Oolong
  • SIO2
  • chipmunk-physics
  • card-surface
  • Tec engine

     

    关于游戏引擎的部分就讲解完了,如果上面的列表有疏漏或者不准确的地方,欢迎大家纠错。

     

     

     

     

     

     

     

    下面我们来回归到目前的讲解进度中来,关于Direct3D的渲染流水线。

     

     

     

    三, Direct3D渲染流水线的两套体系

     

     

    在Direct3D中,有两套实现图形渲染的方案,第一套为固定功能渲染流水线(fixed function render pipeline),另一套为可编程渲染流水线(programmable render pipeline)。

    顾名思义,从字面上就可以看出这两套方案的一些端倪出来。下面我们先来分别简单介绍一下Direct3D中两套渲染体系的特点和整体思路,给大家一个大体的概念。在介绍之前,有一个必须事先跟大家说清楚的实事,就是在DirectX 10以及DirectX11中,固定功能渲染流水线已经被移除了,而可编程渲染流水线则得到了重用,这反映了一个明显的趋势。

    目前,我们主要涉及到DirectX的有三个版本,有DirectX 9,DirectX 10以及DirectX 11。下面我们先分别介绍一下。

    DirectX 9,一路走来,追捧者无数,一手遮天,是目前PC游戏界的中流砥柱,占据着DirectX家族的绝大多数市场份额。

    DirectX 10,这个悲剧的孩子由于搭载了坑爹的操作系统Windows Vista,生不逢时,注定了它此生的坎坷和怀才不遇。

    DirectX 11,这位才华横溢的孩子,在合适的时间出现在了合适的操作系统——Windows 7上,会在未来几年内取得不错的成绩。而在国内的话,DirectX 11的普及,估计还得更久。

     

     

    虽说在DirectX 10以及DirectX11中,固定功能渲染流水线已经被移除了,但是在目前的主流DirectX 9里面,固定功能渲染流水线依然占有着举足轻重的地位,我们只是会在后面的介绍中淡化它,但我们仍然需要掌握它,以备不时之需。

    最后我们来分别介绍一下这两套Direct3D的渲染体系吧:

     

     

     

    Ⅰ.固定功能流水线

     

    第一套方案,固定功能渲染流水线(fixed function render pipeline)。

    顾名思义,固定功能渲染流水线(fixed function render pipeline)从某种意义上来讲是固定的(fixed)。它有着自己的一套准则,关于光照,关于矩阵变换。要进行一个完整而全面的渲染操作,基本上都是按以下步骤进行的:填充顶点数据,指定纹理坐标,设置材质,设置光照,设置变换矩阵,设置渲染状态,最终绘制图形。这里先给大家一个步骤上的概念,后续文章中会详细给大家介绍的。很多时候,我们只需要遵守着这套固定的准则一步一步地进行相关代码的书写,就完全可以驾驭这种渲染方法了。我们使用固定功能渲染流水线进行画面的渲染,说穿了就是根据我们的需要,不断地通过Direct3D设备指针调用一些Direct3D中预设的函数,比如用SetRenderState()设置各式各样的渲染状态,SetSamplerState()设置各式各样的采样状态等等。至于场景的处理和绘制的内部过程我们无需插手,Direct3D的引擎会根据我们设置的各种渲染状态,自己来完成,非常的人性化。

    由于这种渲染方案在新版的Direct3D中被移除,所以很多时候我们只需稍微了解,在后面,我们会淡化固定功能流水线的使用,而更多地对 “写shader”进行讲解,也就是目前使用广泛的可编程渲染流水线。

     

    Ⅱ.可编程渲染流水线

     

    最后,下面我们就来大概了解一下目前的渲染技术的趋势——可编程渲染流水线。

     

    而可编程渲染流水线(programmable render pipeline)就有着很大的不同了。通常我们说的自己写shader就是指的这套渲染体系,这是目前3D编程的大趋势。从字面意义上来说,它是可编程的,很灵活,而不是固定的。这样我们就可以通过代码的书写,着手去实现那些在固定功能流水线中不太好实现的技术和效果,从而升华了我们的渲染技术。可编程渲染流水线中的核心,是着色器(shader)。而在Direct3D 9中,我们主要关注的是顶点着色器(vertex shader)和像素着色器(pixel shader)。也就是说,我们为着色器编写一些规模较小的代码,然后在GPU上进行编译和运行,这就是所谓的可编程渲染流水线的精髓。关于我们在可编程渲染流水线中使用的编程语言,是一种编译和运行在GPU(Graphic Processing Unit)图形处理器之上的Direct3D中独有的着色器编程语言——HLSL(High Level Shader Language)高级着色器语言。关于这种着色器编程语言,后面我们会详细介绍。

     

     

    关于后续的讲解思路,我们会先大致了解固定渲染流水线,然后重点学习可编程渲染流水线,再者,就是选择一个3D游戏引擎进行系统学习了。

     

    以上就是本节笔记的全部内容,更多精彩内容,且听下回分解。

     

    浅墨在这里,希望喜欢游戏开发系列文章的朋友们能留下你们的评论,每次浅墨登陆博客看到大家的留言的时候都会非常开心,感觉自己正在传递一种信仰,一种精神。

     

    另外,浅墨有幸成为了2012年CSDN年度博客之星候选人之一
    在这里,恳请支持浅墨,喜欢游戏开发系列文章的朋友们去
    投浅墨一票,有了大家的支持,浅墨会更用心地写出更优秀的博客文章来与大家分享,把技术分享这种信仰传递下去。

    大家的支持就是浅墨继续写下去的动力~~~  

     

     

    如果文章中有什么疏漏的地方,也请大家指正。

     

     

    文章最后,依然是【每文一语】栏目,以此共勉: 

    当你打算放弃梦想的时候,告诉自己再多撑一天,一个星期,一个月,再多撑一年吧。等到繁华落尽的时候,你会发现,拒绝退场的结果,是一种怎样的美好。

     

     

    下周一,让我们离游戏开发的梦想更进一步。

    下周一,游戏开发笔记,我们,不见不散。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

String ... String 三个点 jdk1.5的特性.才知道

String ... String 三个点 jdk1.5的特性.才知道 String... excludeProperty表示不定参数,也就是调用这个方法的时候这里可以传入多个String对象。public static void main(String[] args) {//测试,传入多个参数test("hello", "world"…

c语言大数相加oj,郑州轻工业大学oj题解(c语言)论如何正确的提高正确率:水题合集(四)...

好像离上一篇水题篇过去已经快半个月了~也是好久没有发过这些简单又有趣的题目了呢,今天想起来就总结几道吧。今天是看龙族的一天~ 花了一下午时间把《龙族2》看了2/3,看书的时间真的过的飞快,听着歌翻着书,一会4.5个小时就过去了…

【转】DICOM:DICOM Print服务中PresentationContext协商之 MetaSOPClass与SOPClass对比分析!!!!!!!!

转自:https://zssure.blog.csdn.net/article/details/45119841 背景: 最近项目中遇到的实际问题较多,且大多是较隐蔽的、不易被发现的错误。究其根源来看,还是对DICOM3.0协议中的细节掌握不够仔细,因而导致在实际编码…

2008秋季-计算机软件基础-未交实验报告名单

实验四 序号:108 实验五 序号:108,225,226 351 实验二 353 实验一 356 实验二 360 实验三 365 实验三 367 实验三 368 实验二 372 实验五 转载于:https://www.cnblogs.com/emanlee/archive/2008/11/02/1324910.html

操作系统真实的虚拟内存是什么样的

1. 内存及虚存基本布局 提起虚存,大都能说出几条来。 对于32位系统,大多数操作系统都会将4GB的内存空间的一部分挪给内核使用,应用程序无法直接访问这一段内存,这部分内存空间称为内核空间。Windows默认情况下会将高地址的2GB分配…

约瑟夫问题c语言链表解法,约瑟夫环问题 --链表 C语言

总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出#include #include typedef struct Head * PHead;typedef struct Node * PNode;struct Head{PNode Next…

【转】用fo-dicom实现print scu的注意事项!!!!!!!!!

转自:https://blog.csdn.net/tvsofa2008/article/details/50245357 用fo-dicom实现print scu的注意事项 fo-dicom是一个开源的协议库,开发语言是c#。网上针对fo-dicom的分析也有不少,但是专门针对dicom print的文章还是太少了。 近几天需要…

DELPHI串口通讯编程

spcomm更加简单 转贴 Delphi中串口通信的实现 河南省计算中心 张海航 -------------------------------------------------------------------------------- Delphi是一种具有功能强大、简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在…

设计模式C++实现 ——观察者模式

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子&…

【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

转自:https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍: DCMTK是目前最全面实现DICOM3.0标准的开源库,通过结合DCMTK开源库和CxImage图像开源库,能够很方便的开发属于自己的DCM文件编辑浏览软件。 DCMT…

如何将C语言翻译成汇编语言,如何把汇编语言转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序:ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 1000HHOUR1 EQU 10hHOUR2 EQU 12hMIN1 EQU 14hMIN2 EQU 16hSEC1 EQU 18HCOUNT EQU 20HNUM1 EQU 22HNUM2 EQU 24HLL4 EQU 26Hs1 bit P1.0s2 bit P1.1s3 bit P1.2s4 bit P1.3A1 EQU 36…

数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

一、 Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间。导致系统表空间迅速被…

设计模式——Iterator模式实现研究

导读:软件设计模式是一种表达、记录和重用软件设计结构和设计经验的新方法,它对反复出现的设计结构的关键特征进行识别、抽象和命名,使重用成功设计和结构更加容易。本文介绍了软件设计模式的特点、描述方式以及在设计中使用模式带来的好处&a…

【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试

转自:https://blog.csdn.net/zssureqh/article/details/8785132 DCMTK官网给出了JPEG格式压缩的DCM文件解压缩的方法(http://support.dcmtk.org/docs/mod_dcmjpeg.html),代码摘录如下: DJDecoderRegistration::regist…

R语言处理非线性回归模型C-D方程,使用R语言进行多项式回归、非线性回归模型曲线拟合...

对于线性关系,我们可以进行简单的线性回归。对于其他关系,我们可以尝试拟合一条曲线。曲线拟合是构建一条曲线或数学函数的过程,它对一系列数据点具有最佳的拟合效果。使用示例数据集#我们将使Y成为因变量,X成为预测变量#因变量通…

认识IL

1.要编译的代码如下: using System; using System.Collections.Generic; using System.Text; namespace HellowWorld { class Program { static void Main() { Console.Write("Hello World!"); } } } 2…

c语言之多线程函数,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统,C语言实现多线程:#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦,参数是:%s\n" , (char *)threadArg );return …

Iterator模式

Iterator模式的几种用法 在网络上看帖子时发现不少模式的初学者对Iterator模式的理解仅仅停留在从类库的容器类取得Iterator来遍历容器中的内容的程度。 因此在这里写几个例子,来加深大家对Iterator模式的理解。 对容器中元素的访问涉及到3个方面。 1.容…

【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改

转自:https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式。前两篇学习笔记中,学习了读取dcm文件的相关信息,如信息头MetaInformation元素、像素数据元素,只停留在了读…

设计模式C++实现 —— 外观模式、组合模式

外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构。DP一书的定义&…