「プログラミング」タグアーカイブ

Irrlicht、新たな日本語チュートリアル現る

今日はIrrlichtのチュートリアルサイトを紹介します。

Irr Lesson

Irr Lesson チュートリアルプログラム

既にご存知の方もいると思われますが、最近書かれたIrrlicht関連の日本語リソースの中では、質、量的にも特に充実しています。kanzaki氏が執筆されており、初歩的なポリゴンの描画からカラーキー合成まで細かく指導してくれます。また、特別授業、補修と題打ったチュートリアルでは、分割ビューウィンドウの方法やキーの複数入力など、ちょっとした小技も紹介されています。

Irrlichtは日本語情報が少ないライブラリだけに大変参考になるサイトです。今すぐにでもブックマークしておくといいでしょう。

Irrlicht .NET CP、TrueTypeフォントに対応

Irrlicht .NET CP TrueTypeテスト

Irrlicht .NET CPプロジェクトのLester曰く、CPではエクステンションとしてTrueTypeフォントをサポートするとのこと。以下の記事は5月のものです。既に最新版にはExtensionsという名前空間の中にTTFontが含まれています。

Truetype font support (Irrlicht .NET CPフォーラム)

オリジナルソースはzgock氏がかつてポストしたirrTTであり、使い方も同じです。

TrueType font Support by FreeType Library (Irrlichtフォーラム)

これにより手軽にTrueTypeフォントを使えるようになるので、煩わしいライブラリの設定から開放されます。.NETユーザには朗報ではないでしょうか。

どうでもいいけど、lester氏がアバターに蔵間室長を使うくらいエルフェンリートが大好きだということが分かりました。でも、スクリーンショットでエノレフェンリトと表示するのはどうかと思うんです。好きなものの表記は間違えないで下さい!(笑)

Irrlicht .NET CPについて
DeusXLことEmmanuel BossiereとLesterことYevgen Yashchenkoが開発をしているIrrlichtの.NET実装系。マルチプラットフォーム対応である。本家が.NETサポートを廃止したことにより実質的に開発を引き継いだ形になった。

Irrlicht 1.4β、API仕様が大幅変更される

Irrlicht 1.4beta released (Irrlicht.sf.net)

10月01日に、早くもIrrlicht 1.4のβ版がリリースされました。svn rev.1012をベースにしたものです。 今回のバージョンはIrrlichtをより良い3Dエンジンにするため、API仕様が大幅に変更されています。そのため、多くの人に評価してもらい、安定版に向けて機能の向上を図りたいそうです。些細な事でもフォーラム等に報告していくといいでしょう。

β版の新機能は次の通り:

  • マニュアルジョイントアニメーションのような、長い間期待されていた機能を実装した、より洗練された統合スケルトンアニメーションシステム
  • Irrlicht独自ファイルフォーマット:静的メッシュ用の.irrmesh
  • メッシュ書出サポート:collada、.stl、.irrmeshファイル書出対応。また、.stlファイルの読込も可能で、これらのファイルへのコンバートにIrrlichtを活用できます
  • irrSpintz(Irrlichtの独自拡張エンジン)から逆輸入して再構築した拡張パーティクルシステム
  • GUIの向上:キーボードコントロールサポート(tab、shift etc.)、スピンボックス
  • ポイントスプライトサポート
  • collada、.obj、.my3dローダの性能向上
  • その他の機能拡張と数多くのバグフィックス

Irrlicht 1.4βのダウンロードはこちらから。
Irrlicht 1.4ダウンロード (Irrlicht.sf.net)

Irrlicht 1.4の下位互換性一覧

Irrlicht 1.4公開に向けて過去の下位互換性についての情報をお送りします。svnのrev.950で追加されたupgrade-guide.txtを翻訳してみました。このテキストにはバージョン1.2、1.3、1.3.1の変更点が書かれています。このファイル以外に過去の更新履歴にも目を通す事をお奨めします。

今までの変更で、特にカスタムシーンノードやGUIエレメントを使って拡張をしている人は修正が必要になると思います。ここで説明する変更は機能面ではなく、構文だけに言及して纏めてあります。新しく追加された関数については説明していませんので、そちらはバージョン1.4のAPIドキュメントで調べてください。

このテキストはIrrlicht svn rev.950のupgrade-guide.txtを翻訳したものです。
正式版が公開された後は、そちらを参照してください。 2007.09.20 屋森英樹

Version 1.2の変更点
-----------------------
コンパイルフラグ廃止 (可能なら常に使用)
_IRR_LINUX_OPENGL_USE_EXTENSIONS_

IAnimatedMeshB3d:
廃止 (代用クラス無し)
	virtual void AddMatrixToJoint(s32 jointNumber, core::matrix4* matrix) = 0;

IGUIElement.h
宣言変更 (const付加)
	IGUIElement* getParent() const
	core::rect getRelativePosition() const

IGUITabControl.h
宣言変更 (引数にconst付加)
	virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;

IImage.h
宣言変更 (const付加)
	virtual ECOLOR_FORMAT getColorFormat() const = 0;

IParticleAffector.h
継承変更 (irr:IUnknownから移動)
	class IParticleAffector : public virtual io::IAttributeExchangingObject

IParticleEmitter.h
継承変更 (irr:IUnknownから移動)
	class IParticleEmitter : public virtual io::IAttributeExchangingObject

IParticleSystemSceneNode.h
宣言変更 (引数にconst付加)
 	virtual IParticleEmitter* createPointEmitter(
		const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
 		u32 minParticlesPerSecond = 5,
 		u32 maxParticlesPerSecond = 10,
 		video::SColor minStartColor = video::SColor(255,0,0,0),
 	virtual IParticleEmitter* createBoxEmitter(
 		const core::aabbox3df& box = core::aabbox3df(-10,28,-10,10,30,10),
 		const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
 		u32 minParticlesPerSecond = 5,
 		u32 maxParticlesPerSecond = 10,
 		video::SColor minStartColor = video::SColor(255,0,0,0),

 	virtual IParticleAffector* createGravityAffector(
 		const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f),
 		u32 timeForceLost = 1000) = 0;

ISceneManager.h
宣言変更 (引数追加)
 	virtual ISceneNodeAnimator* createFlyCircleAnimator(const core::vector3df& center,
		f32 radius, f32 speed=0.001f, const core::vector3df& direction= core::vector3df ( 0.f, 1.f, 0.f ) ) = 0;

ITexture.h
宣言変更 (const付加)
	virtual ECOLOR_FORMAT getColorFormat() const = 0;

IVideoDriver.h
宣言変更 (デフォルト引数変更, 下位互換には明示的にECF_A1R5G5B5を使用すること)
	virtual ITexture* addTexture(const core::dimension2d& size,
			const c8* name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
宣言変更 (const付加)
	virtual ITexture* createRenderTargetTexture(const core::dimension2d& size) = 0;

matrix4.h
宣言変更 (前後の引数を入れ替え、以前は(col, row))
	f32& operator()(s32 row, s32 col);
	const f32& operator()(s32 row, s32 col) const;

S3DVertex.h
宣言変更 (引数のconst解除)
	S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv);
 	S3DVertex(const core::vector3df& pos, const core::vector3df& normal,
		SColor color, const core::vector2d& tcoords);
	S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2);
	S3DVertex2TCoords(const core::vector3df& pos, SColor color,
 		const core::vector2d& tcoords, const core::vector2d& tcoords2);
	S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv);
 	S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal,
		SColor color, const core::vector2d& tcoords);
 	S3DVertexTangents(const core::vector3df& pos,
		const core::vector2df& tcoords,	SColor c);

SColor.h
宣言変更 (引数の型をsignedからunsignedに変更)
	inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a);
	inline u16 RGB16(u32 r, u32 g, u32 b);
	inline u16 X8R8G8B8toA1R5G5B5(u32 color);
	inline u32 A1R5G5B5toA8R8G8B8(u32 color);
	inline u32 R5G6B5toA8R8G8B8(u16 color);
	inline u16 R5G6B5toA1R5G5B5(u16 color);
	inline u16 A1R5G5B5toR5G6B5(u16 color);
	inline u32 getAlpha(u16 color);
	inline u32 getRed(u16 color);
	inline u32 getGreen(u16 color);
	inline u32 getBlue(u16 color);
	inline u32 getLuminance(u16 color);
	inline SColor (u32 a, u32 r, u32 g, u32 b);
	inline SColor(u32 clr);
	inline u32 getAlpha() const
	inline u32 getRed() const
	inline u32 getGreen() const
	inline u32 getBlue() const
	inline void setAlpha(u32 a);
	inline void setRed(u32 r);
	inline void setGreen(u32 g);
	inline void setBlue(u32 b);
	inline u16 toA1R5G5B5() const
	inline void toOpenGLColor(u8* dest) const
	inline void set(u32 a, u32 r, u32 g, u32 b);
	inline void set(u32 col);
宣言変更 (引数にconst付加)
	inline SColor getInterpolated(const SColor &other, f32 d) const
メンバ変数をpublicに変更 (型変更)
	u32 color;

Version 1.3の変更点
-----------------------
全ての宣言とコード部分でFrustrumをFrustumに名称変更

IAnimatedMeshB3d.h
関数名変更 (先頭を小文字に変更)
	virtual void setInterpolationMode(s32 mode) = 0;
	virtual void setAnimateMode(s32 mode) = 0;

IAnimatedMeshSceneNode.h
宣言変更 (型変更)
	virtual void setAnimationSpeed(f32 framesPerSecond) = 0;

ICameraSceneNode.h
関数名と宣言変更 (型変更、frustum改名)
	virtual const SViewFrustum* getViewFrustum() const = 0;

IFileSystem.h
関数名変更 (addUnZipFileArchiveから)
	virtual bool addFolderFileArchive(const c8* filename, bool ignoreCase = true, bool ignorePaths = true) = 0;

IGUIContextMenu.h
宣言変更 (引数追加)
 	virtual s32 addItem(const wchar_t* text, s32 commandId=-1, bool enabled=true,
			bool hasSubMenu=false, bool checked=false) = 0;

IGUIElement.h
継承変更
	class IGUIElement : public virtual io::IAttributeExchangingObject, public IEventReceiver
宣言変更 (const付加)
	core::rect getAbsolutePosition() const

IGUIEnvironment.h
宣言変更 (引数追加)
 	virtual IGUIButton* addButton(const core::rect& rectangle,
		IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;

IGUIListBox.h
関数廃止 (現在はsprite bankを使用)
	virtual void setIconFont(IGUIFont* font) = 0;
宣言変更 (sprite bank用に型変更)
	virtual s32 addItem(const wchar_t* text, s32 icon) = 0;

IGUISkin.h
継承変更
	class IGUISkin : public virtual io::IAttributeExchangingObject

IGUIToolbar.h
宣言変更 (tooltipsのために引数追加)
	virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext=0,
		video::ITexture* img=0, video::ITexture* pressedimg=0,
		bool isPushButton=false, bool useAlphaChannel=false) = 0;

IImage.h
宣言変更 (const付加)
	virtual u32 getPitch() const = 0;

IImageWriter.h
宣言変更 (引数追加)
	virtual bool writeImage(io::IWriteFile *file, IImage *image, u32 param = 0) = 0;

IMeshBuffer.h
宣言変更 (返り値変更)
	virtual u32 getVertexCount() const = 0;
	virtual u32 getIndexCount() const = 0;
関数廃止 (setBoundingBoxで代替)
	virtual core::aabbox3df& getBoundingBox() = 0;

IMesh.h
宣言変更 (型変更、const付加)
	virtual u32 getMeshBufferCount() const = 0;
	virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
関数廃止 (setBoundingBoxで代替)
	virtual core::aabbox3d& getBoundingBox() = 0;

IReadFile.h
宣言変更 (型変更)
	virtual s32 read(void* buffer, u32 sizeToRead) = 0;

irrArray.h
宣言変更 (const付加)
	s32 binary_search(const T& element, s32 left, s32 right) const

irrMath.h
定数変更
	const f32 PI			= 3.14159265359f;
定数廃止 (RADTODEG64かDEGTORAD64で代替)
	const f64 GRAD_PI		= 180.0 / PI64;
	const f64 GRAD_PI2		= PI64 / 180.0;
宣言変更 (引数toleranceを追加)
	inline bool equals(const f32 a, const f32 b, const f32 tolerance = ROUNDING_ERROR_32)

irrString.h
宣言変更 (引数にconst付加)
 	template  string(const B* const c, u32 length);
 	template  string(const B* const c);
 	template  string& operator=(const B* const c);
 	template  string operator+(const B* const c) const
	bool operator ==(const T* const str) const
	bool operator !=(const T* const str) const
	bool equalsn(const T* const str, int len) const
	void append(const T* const other);
	s32 findFirstChar(const T* const c, u32 count) const
 	template  s32 findFirstCharNotInList(const B* const c, u32 count) const
 	template  s32 findLastCharNotInList(const B* const c, u32 count) const
 	template  s32 find(const B* const str) const
	void operator += (const T* const c);
宣言変更 (signedからu32に型変更)
	T& operator [](const u32 index) const
	u32 size() const
	void append(const string& other, u32 length);
	void reserve(u32 count);
	s32 findNext(T c, u32 startPos) const
	string subString(u32 begin, s32 length) const
	void erase(u32 index);
	void reallocate(u32 new_size);
宣言変更 (引数追加)
	s32 findLast(T c, s32 start = -1) const

ISceneManager.h
宣言変更 (引数minimalPolysPerNodeのデフォルト値を128から256に変更)
 	virtual ISceneNode* addOctTreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0,
		s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false) = 0;
 	virtual ISceneNode* addOctTreeSceneNode(IMesh* mesh, ISceneNode* parent=0,
		s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false) = 0;
宣言変更 (引数追加)
	virtual ICameraSceneNode* addCameraSceneNodeFPS(ISceneNode* parent = 0,
		f32 rotateSpeed = 100.0f, f32 moveSpeed = 500.0f, s32 id=-1,
		SKeyMap* keyMapArray=0, s32 keyMapSize=0, bool noVerticalMovement=false,
		f32 jumpSpeed = 0.f) = 0;

	virtual IBillboardSceneNode* addBillboardSceneNode(ISceneNode* parent = 0,
		const core::dimension2d& size = core::dimension2d(10.0f, 10.0f),
		const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1,
		video::SColor shade_top = 0xFFFFFFFF, video::SColor shade_down = 0xFFFFFFFF) = 0;

	virtual ITerrainSceneNode* addTerrainSceneNode(
		const c8* heightMapFileName,
		ISceneNode* parent=0, s32 id=-1,
		const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
		video::SColor vertexColor = video::SColor(255,255,255,255),
		s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0) = 0;

	virtual ITerrainSceneNode* addTerrainSceneNode(
		io::IReadFile* heightMapFile,
		ISceneNode* parent=0, s32 id=-1,
		const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
		video::SColor vertexColor = video::SColor(255,255,255,255),
		s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0) = 0;
宣言変更 (戻り値変更)
	virtual u32 registerNodeForRendering(ISceneNode* node,
		E_SCENE_NODE_RENDER_PASS pass = ESNRP_AUTOMATIC) = 0;

ISceneNodeAnimatorCollisionResponse.h
宣言変更 (const付加)
	virtual void setEllipsoidTranslation(const core::vector3df &translation) = 0;

ISceneNode.h
関数名変更 (OnPreRenderから)
	virtual void OnRegisterSceneNode();
関数名変更 (OnPostRenderから)
	virtual void OnAnimate(u32 timeMs);
宣言変更 (const付加)
	virtual const core::aabbox3d getTransformedBoundingBox() const
	const core::matrix4& getAbsoluteTransformation() const
	virtual bool isVisible() const
	virtual s32 getID() const
	scene::ISceneNode* getParent() const
	virtual ESCENE_NODE_TYPE getType() const
宣言変更 (型変更)
	virtual video::SMaterial& getMaterial(u32 num);
	void setMaterialTexture(u32 textureLayer, video::ITexture* texture);
	void setAutomaticCulling( E_CULLING_TYPE state);
	virtual void setDebugDataVisible(E_DEBUG_SCENE_TYPE visible);
宣言変更 (返り値変更)
	virtual u32 getMaterialCount();
	virtual const core::vector3df& getRotation() const
	E_CULLING_TYPE getAutomaticCulling() const
宣言変更 (返り値変更、const付加)
	E_DEBUG_SCENE_TYPE isDebugDataVisible() const

ITerrainSceneNode.h
宣言変更 (返り値変更)
	virtual u32 getIndexCount() = 0;

ITexture.h
宣言変更 (返り値変更、const付加)
	virtual u32 getPitch() const = 0;
関数廃止 (Available in SMaterial now)
	core::matrix4& getTransformation();

IVideoDriver.h
宣言変更 (型変更)
	virtual ITexture* getTextureByIndex(u32 index) = 0;
	virtual void drawVertexPrimitiveList(const void* vertices, u32 vertexCount, const u16* indexList, u32 triangleCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType) = 0;
 	virtual void drawIndexedTriangleList(const S3DVertex* vertices,
		u32 vertexCount, const u16* indexList, u32 triangleCount) = 0;
	virtual void drawIndexedTriangleList(const S3DVertex2TCoords* vertices,
		u32 vertexCount, const u16* indexList, u32 triangleCount) = 0;
	virtual void drawIndexedTriangleList(const S3DVertexTangents* vertices,
		u32 vertexCount, const u16* indexList, u32 triangleCount) = 0;
	virtual void drawIndexedTriangleFan(const S3DVertex* vertices,
		u32 vertexCount, const u16* indexList, u32 triangleCount) = 0;
	virtual void drawIndexedTriangleFan(const S3DVertex2TCoords* vertices,
		u32 vertexCount, const u16* indexList, u32 triangleCount) = 0;
	virtual const SLight& getDynamicLight(u32 idx) = 0;
	virtual IMaterialRenderer* getMaterialRenderer(u32 idx) = 0;
	virtual const c8* getMaterialRendererName(u32 idx) = 0;
宣言変更 (引数にconst付加)
	virtual void drawMeshBuffer( const scene::IMeshBuffer* mb) = 0;
	virtual io::IAttributes* createAttributesFromMaterial(const video::SMaterial& material) = 0;
宣言変更 (引数追加)
	virtual u32 getPrimitiveCountDrawn( u32 param = 0 ) = 0;
	virtual bool writeImageToFile(IImage* image, const c8* filename, u32 param = 0) = 0;
	virtual IImage* createImageFromData(ECOLOR_FORMAT format,
		const core::dimension2d& size, void *data,
		bool ownForeignMemory=false,
		bool deleteMemory = true) = 0;
宣言変更 (返り値変更)
	virtual u32 getMaximalDynamicLightAmount() = 0;
	virtual u32 getDynamicLightCount() = 0;
	virtual u32 getMaximalPrimitiveCount() = 0;
	virtual u32 getMaterialRendererCount() = 0;

matrix4.h
宣言変更 (引数追加)
	matrix4( eConstructor constructor = EM4CONST_IDENTITY );
宣言変更 (引数にconst付加)
	f32& operator()(const s32 row, const s32 col);
	const f32& operator()(const s32 row, const s32 col) const
宣言変更 (引数の順序変更)
	void transformVect( vector3df& out, const vector3df& in ) const;

quaternion.h
宣言変更 (返り値変更)
	void slerp( quaternion q1, const quaternion q2, f32 interpolate );

SColor.h
関数名変更 (getLuminanceから)、型変更
	inline s32 getAverage(s16 color);
宣言変更 (返り値変更)
	inline f32 getLuminance() const
宣言変更 (引数にconst付加)
	inline SColorf getInterpolated(const SColorf &other, f32 d) const

SMaterial.h
定数の型変更
	const u32 MATERIAL_MAX_TEXTURES = 4;
型変更
	class SMaterial
Publicメンバー変数廃止 (Textures[]で代替)
	ITexture* Texture1;
	ITexture* Texture2;
	ITexture* Texture3;
	ITexture* Texture4;
Publicメンバー変数廃止 (関数setFlag()/getFlag()で代替)
	Flags[]
Publicメンバー変数変更 (型変更)
	u32 ZBuffer;
宣言変更 (const付加)
	inline bool operator!=(const SMaterial& b) const

SMeshBuffer.h
宣言変更 (引数変更)
	virtual u32 getVertexCount() const
	virtual u32 getIndexCount() const
関数廃止 (setBoundingBoxで代替)
	virtual core::aabbox3d& getBoundingBox();

SMeshBufferLightMap.h
宣言変更 (引数変更)
	virtual u32 getVertexCount() const
	virtual u32 getIndexCount() const
関数廃止 (setBoundingBoxで代替)
	virtual core::aabbox3d& getBoundingBox();

SMeshBufferTangents.h
宣言変更 (引数変更)
	virtual u32 getVertexCount() const
	virtual u32 getIndexCount() const
関数廃止 (setBoundingBoxで代替)
	virtual core::aabbox3d& getBoundingBox();

SMesh.h
宣言変更 (引数変更、const付加)
	virtual u32 getMeshBufferCount() const
	virtual IMeshBuffer* getMeshBuffer(u32 nr) const
関数廃止 (setBoundingBoxで代替);
	virtual core::aabbox3d& getBoundingBox();

vector3d.h
宣言変更 (返り値変更)
	T getLength() const
宣言変更 (型変更)
	vector3d getInterpolated(const vector3d& other, const T d) const

Version 1.3.1の変更点
-------------------------
型変更:
	SMeshBuffer*は現在CMeshBufferからのテンプレート型に変更になりました

dimension2d.h
宣言変更 (引数にconst付加)
	dimension2d(const T& width, const T& height);
	dimension2d operator/(const T& scale);
	dimension2d operator*(const T& scale);

IAnimatedMeshSceneNode.h
宣言変更 (const付加)
	virtual s32 getFrameNr() const = 0;
	virtual s32 getStartFrame() const = 0;
	virtual s32 getEndFrame() const = 0;
関数名変更 (getAbsoluteTransformationから)
	virtual const SMD3QuaterionTag& getMD3TagTransformation( const core::stringc & tagname) = 0;

IGUIButton.h
関数名変更 (getUseAlphaChannelから)
	virtual bool isAlphaChannelUsed() = 0;

IGUIElementFactory.h
宣言変更 (const付加)
	EGUI_ELEMENT_TYPE getType() const
	virtual const c8* getTypeName() const

IGUIEnvironment.h
宣言変更 (引数追加)
	virtual bool saveGUI(const c8* filename, IGUIElement* start=0) = 0;
	virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) = 0;
	virtual bool loadGUI(const c8* filename, IGUIElement* parent=0) = 0;
	virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0;

IGUIFontBitmap.h
宣言変更 (const付加)
	virtual EGUI_FONT_TYPE getType() const { return EGFT_BITMAP; }

IGUIFont.h
宣言変更 (const付加)
	virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }

IGUISkin.h
宣言変更 (引数追加)
	virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0;
	virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0;
宣言変更 (const付加)
	virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; };

IImage.h
宣言変更 (const付加)
	virtual const core::dimension2d& getDimension() const = 0;
	virtual u32 getRedMask() const = 0;
	virtual u32 getGreenMask() const = 0;
	virtual u32 getBlueMask() const = 0;
	virtual u32 getAlphaMask() const = 0;
宣言変更 (返り値変更、const付加)
	virtual u32 getBitsPerPixel() const = 0;
	virtual u32 getBytesPerPixel() const = 0;
	virtual u32 getImageDataSizeInBytes() const = 0;
	virtual u32 getImageDataSizeInPixels() const = 0;
宣言変更 (引数の型変更、const付加)
	virtual SColor getPixel(u32 x, u32 y) const = 0;

IMeshCache.h
宣言変更 (引数にconst付加)
	virtual void removeMesh(const IAnimatedMesh* const mesh) = 0;
宣言変更 (引数にconst付加、宣言にconst付加)
	virtual s32 getMeshIndex(const IAnimatedMesh* const mesh) const = 0;
	virtual const c8* getMeshFilename(const IAnimatedMesh* const mesh) const = 0;
	virtual const c8* getMeshFilename(const IMesh* const mesh) const = 0;
宣言変更 (返り値変更、const付加)
	virtual u32 getMeshCount() const = 0;
宣言変更 (引数の型変更)
	virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
宣言変更 (const付加)
	virtual const c8* getMeshFilename(u32 index) const = 0;

IParticleAffector.h
宣言変更 (const付加)
	virtual E_PARTICLE_AFFECTOR_TYPE getType() const = 0;

IParticleEmitter.h
宣言変更 (const付加)
	virtual E_PARTICLE_EMITTER_TYPE getType() const = 0;

irrString.h
宣言変更 (引数にconst付加)
	string(const double number);
宣言変更 (返り値変更)
	string& operator += (T c);
	string& operator += (const string& other);
宣言変更 (返り値変更、引数にconst追加)
	string& operator += (const T* const c);
	string& operator += (const int i);
	string& operator += (const double i);

ISceneManager.h
宣言変更 (引数追加)
	virtual ITerrainSceneNode* addTerrainSceneNode(
		const c8* heightMapFileName,
		ISceneNode* parent=0, s32 id=-1,
		const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
		video::SColor vertexColor = video::SColor(255,255,255,255),
		s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0,
		bool addAlsoIfHeightmapEmpty = false) = 0;
	virtual ITerrainSceneNode* addTerrainSceneNode(
		io::IReadFile* heightMapFile,
		ISceneNode* parent=0, s32 id=-1,
		const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
		const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
		video::SColor vertexColor = video::SColor(255,255,255,255),
		s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0,
		bool addAlsoIfHeightmapEmpty = false) = 0;
	virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0;

ISceneNodeAnimator.h
宣言変更 (const付加)
	virtual ESCENE_NODE_ANIMATOR_TYPE getType() const

ITexture.h
宣言変更 (const付加)
	virtual bool hasMipMaps() const

IVideoDriver.h
宣言変更 (参照引数)
	virtual void draw3DBox(const core::aabbox3d& box,
		SColor color = SColor(255,255,255,255)) = 0;
宣言変更 (引数にデフォルト値追加)
	virtual void draw2DImage(video::ITexture* texture,
			const core::position2d& pos,
			const core::array >& sourceRects,
			const core::array& indices,
			s32 kerningWidth=0,
			const core::rect* clipRect=0,
			SColor color=SColor(255,255,255,255),
			bool useAlphaChannelOfTexture=false) = 0;
宣言変更 (返り値変更)
	virtual const SExposedVideoData& getExposedVideoData() = 0;

line3d.h
宣言変更 (返り値変更)
	T getLength() const

matrix4.h
型をテンプレート型に変更
	template  class CMatrix4
	typedef CMatrix4 matrix4;
宣言変更 (返り値変更)
	T& operator()(const s32 row, const s32 col);
	const T& operator()(const s32 row, const s32 col) const
	T& operator[](u32 index);
	const T& operator[](u32 index) const
宣言変更 (引数の型変更)
	inline CMatrix4& operator=(const T& scalar);
	const T* pointer() const
	T* pointer();
	CMatrix4 operator*(const T& scalar) const;
	CMatrix4& operator*=(const T& scalar);
	void transformVect(T *out,const core::vector3df &in) const;
	void rotateVect(T *out,const core::vector3df &in) const;
	void multiplyWith1x4Matrix(T* matrix) const;
	CMatrix4 interpolate(const core::CMatrix4& b, f32 time) const;

plane3d.h
関数名変更 (existsInterSectionから)
	bool existsIntersection(const plane3d& other) const

quaternion.h
宣言変更 (引数のconst解除)
	void slerp( quaternion q1, quaternion q2, f32 interpolate );

SExposedVideoData.h
publicメンバ変数を削除 (X11DisplayとX11Windowにより代替)
 	OpenGLLinux.Window;

SIrrCreationParameters.h
メンバ変数をpublicに変更 (64bitシステムサポートのため型変更)
	void* WindowId;

triangle3d.h
メンバ関数をprivateに変更
	bool isOnSameSide(const vector3d& p1, const vector3d& p2,
		const vector3d& a, const vector3d& b) const

vector2d.h
宣言変更 (返り値変更)
	T getLength() const
	T getDistanceFrom(const vector2d& other) const

vector3d.h
宣言変更 (返り値変更)
	T getDistanceFrom(const vector3d& other) const

変更点を眺めているとマイナーバージョンであっても下位互換性に乏しいです。Version1.4から追加されるアップグレードガイドは、今後、大いに参考になるでしょう。

Irrlicht、独自3Dメッシュ形式irrmeshを実装

Introducing the .irrmesh 3D file format (Irrlicht3d.org)

週末に私はIrrlicht svnの新機能をチェックしました。新ファイルフォーマット.irrmesh拡張ローダとmesh writerについてです。これでIrrlichtはお望みなら読み込んだ全てのメッシュを再び書き出せるようになります。私は.irrmeshファイルフォーマットと一緒にCOLLADA用writerも実装してチェックしました。

ここで.irrmeshとは何か?つまるところ、Irrlichtの静的メッシュ用内蔵ファイルフォーマットです。そう、Irrlichtはついに独自ファイルフォーマットを持ったのです。.irrmeshはxmlベースでほとんどIrrlichtの実装に依存しています。単体の頂点とインデックスは自身のタグを持たないところは、COLLADAフォーマットに似ています。.irrmeshファイルはIMeshインターフェースの内容をダンプしただけのものです。メッシュバッファのリスト、バッファ毎の1マテリアル、頂点とインデックスのリストが書き込まれます。このように.irrmeshは最良の対応ファイルフォーマットとなります。もし、巷で.irrmesh用エクスポーターが書かれ始めれば、これらはIrrlichtで100%正しく表示されるフォーマットだと確約されるでしょう。まだ、エクスポーターが存在しないですが、.irrmeshファイルを入手するのは簡単です。例えば、Irrlichtをコンバーターとして使用可能です。対応フォーマットのファイルを読み込み、新しいIMeshWriterインターフェースで再び書き出すのです。または、さらに簡単な方法として、次のirrEditリリースまで数日間待ち、これをコンバーターとして使いましょう。現時点のmesh writerは、.irrmeshとCOLLADAファイルをUTF-16エンコードのxmlファイルとして出力します。全てのテキストベースのファイルフォーマット同様、巨大なシーンではファイルサイズが肥大化します。しかし、私は近いうちにIrrlichtでUTF-8形式のxml出力をサポートして、このサイズを小さくする事を計画しています。勿論、アニメーションmeshのほうも、これに続いて対応します。

irrmeshファイルのデモを用意しました。example.irrmesh (94KB)

これはブログの右上にあるイメージのシーン(Irrlicht3d.orgのトップにある画像です)で、私がloaderとwriterでテストした初の巨大シーンファイルです。このシーンは約1万ポリゴンあり、loaderは今のままでも高速に読み込みをします。 ですが、まだ改善の余地がありです。

原文 - Nikolaus Gebhardt / 翻訳 - 屋森英樹

とうとう来ました!Irrlicht用の独自ファイルフォーマット。今回は固定メッシュにのみ言及されていますが、前回の記事にもあるようにアニメーションも独自形式を出力可能になるようです。各3Dアニメーションソフト用のエクスポーターが充実してくれることを祈りましょう。xファイルの方言不具合から開放される日も近い!?

それはそうと、多大な期待とは裏腹に、1.4は潜在的なバグが大量に混入しそうで不安です…。 これだけ派手に弄繰り回してますしね。