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から追加されるアップグレードガイドは、今後、大いに参考になるでしょう。

架空の監督アラン・スミシー

アメリカでは映画の監督が降板したり、クレジットを載せたくないときに「アラン・スミシー」という偽名が使われていたそうです。

アラン・スミシー (Wikipedia)

これを読んだときに思い出した名前がありました。それは、ガンダムで有名なサンライズのアニメに原案として出てくる名前「矢立肇」です。10年以上前に、サンライズ関係の監督さんが暴露していましたが、実在の人物ではなく企画室の名前なんだそうです。

矢立肇 (Wikipedia)

私が話を聞いた監督さんは、こうも語っていました。矢立名義で得た版権料は室内での呑み代にも使われる、と。現在だと大問題な発言です。まぁ、半分冗談でしょうけどね。

架空の人物をクレジットした経緯はなんなんでしょう。一部には、法人名での版権登録が認められなかったから、という記述もありますが実際のところは定かではありません。

あなたの好きな作家も実は団体名かもしれませんよ?

大爆笑ゲーム、SUMOTORI DREAMS

SUMOTORI DREAMS

Archee氏作の僅かファイルサイズ96KBのコンパクトなゲーム。頼りないラグドールが奮闘する紙相撲です。このゲームの醍醐味は勝負がついてから。酔払いのような千鳥足で双方のキャラがのた打ち回ります。壊れる衝立、よろけて転ぶ相撲取り。UPXで圧縮しているとは言え、この小さなサイズの中によくこれだけのギミックを取り入れたもんです。転んだ相手をあざ笑うという仕草もあり芸が細かい!全てAIで動作、キーフレームアニメーションは一切組み込んでないとか。

この作品は29KB版も存在し、ゲームコンテストBreakpoint 2007のgamedev compoにエントリーしてあるようです。

操作方法一覧

メニュー選択:マウス左クリックで箱を飛ばし、ボタンを破壊する
Player1: 方向キー, backspace, enter
Player2: wsad, shift, control
ゲーム終了、戻る: esc

まなびストレート!天宮学美&稲森光香フィギュアが可愛過ぎる件

アマゾンでトイズワークス製のフィギュア「がくえんゆーとぴあ まなびストレート! 天宮学美&稲森光香 紺スク Ver.」が、只今ほぼ半額になっています。そんなわけで買ってしまいましたっ。

そして、届いた頃に半額以下になりました。なんてこったい。ギリギリまで粘って安くなるのを待つか在庫切れになって泣くか、これを機に買おうと思っている人には究極の選択となっております。

さて、このフィギュアの造型についてですが、アニメに忠実で申し分ない完成度だと思います。似てるかどうかの決め手になる顔も、二人の表情や雰囲気を上手く捉えていて、かわいく仕上がっています。体型やポーズもまなび「らしさ」が出ていました。ただ、残念な事にアニメでの特徴である髪のグラデーションが少々物足りない感じ。申し訳程度に毛先にブラシがかかっている程度でした。ここはもっと思い切って吹いてもよかったと思います。

大きさは全高13.5cm。通常の1/8モデルに相当します。20cm近い1/6モデルが主流ですが、日本の狭い住宅事情では、このくらいが丁度いいです。邪魔にならず小さすぎず、と言ったところ。

また、パッケージは前後左右の四方が透明になっており、ブリスターパックを開けなくても楽しめるようになっています。小さな事でもありがたい気遣いです。もちろん、箱から出さなければスカートは脱がせられませんけどね。

フィギュアに増産はありません。これが最安値で新品が手に入る最後のチャンス。今回は二種類揃えるかどうかが一番の悩みになるかも?

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は潜在的なバグが大量に混入しそうで不安です…。 これだけ派手に弄繰り回してますしね。