------------------------------------------------------------------------------
HGIMG4 REFERENCE MANUAL                High Performance Graphic Image Plugin  
ＨＳＰ拡張ランタイムリファレンス      copyright 2001-2016 (c) onion software  
------------------------------------------------------------------------------

・はじめに

	HGIMG4は、Hot Soup Processor ver3.5以降とともに使用することで、
	画面の描画に関する様々な機能拡張を提供します。

	HGIMG4の特徴

	・OpenGL/ESまたはDirectX9による描画、シェーダー言語サポート
	・シーン管理と統合化された物理エンジン(Bullet)サポート
	・FBX形式のモデルファイル読み込み、アニメーションサポート
	・マルチテクスチャ、バンプマップ、ハイトマップ、LODをサポート
	・フォントデータ(TTF)のレンダリングサポート
	・オフスクリーンレンダリング及び各種ポストエフェクトサポート
	・WindowsだけでなくiOS,Android上での動作をサポート予定
	・HSP及びHSP3Dishと同様のライセンス規約、オープンソース 


・動作環境

	HGIMG4は、OpenGL版とDirectX9(angle)版を選択することができます。
	OpenGL版は、Windows7以降で、OpenGLバージョン3.1以上がインストールされた環境で動作します。
	DirectX9(angle)版は、Windows7以降で、DirectX9最新版のランタイムがインストールされた環境で動作します。
	DirectX9(angle)版は、実行にあたって以下のDLLを必要とします。
	(このDLLは、HSPインストールフォルダに付属しています。
	ユーザーが製作したアプリケーションを配布する場合は、このDLLも配布する
	必要があります)

		d3dcompiler_47.dll	追加DLL
		libEGL.dll		追加DLL
		libGLESv2.dll		追加DLL

	これらのDLLは、OpenGL版を使用する場合は必要ありません。

	HGIMG4は、以下のようなファイルで構成されています。

		hsp3gp.exe (OpenGL実行用ランタイム)
		hsp3gpdx.exe (DirectX実行用ランタイム)

		docs/hgimg4.txt (このファイル)
		commonフォルダ (HGIMG4ヘッダファイル)
		hsphelpフォルダ (HGIMG4ヘルプファイル)
		runtimeフォルダ (HGIMG4カスタムランタイム)
		sampleフォルダ (HGIMG4サンプルスクリプト & データ)


・使用方法

	HGIMG4を使用したスクリプトを作成する場合には、スクリプトの先頭に

	#include "hgimg4.as"

	という行を追加してください。
	以上で、HSPの機能が拡張され、このリファレンスで説明をしている命令を
	使用することができるようになります。

	HGIMG4 DirectX9版ランタイムを使用する場合には、

	#include "hgimg4dx.as"

	をスクリプトの先頭に記述してください。

	#include "hgimg4.as"

	を記述した場合は、OpenGL版ランタイムが使用されます。
	どちらのランタイムも使用できる機能に違いはありません。

	まず最初に、付属のサンプルスクリプトを実行してみてください。
	拡張された機能の簡単な使用例を見ることができるはずです。
	サンプルスクリプトは、HSPインストールフォルダ以下のsample/hgimg4
	に用意されています。


・リソースフォルダについて

	HGIMG4では、起動時に実行するスクリプトと同じフォルダにある
	「res」フォルダから必要なリソースを読み込みます。
	リソースファイルは、「sample/hgimg4/res」のフォルダに含まれています。
	以下のファイルは、起動のために必要ですので、実行ファイル作成時なども必ず入れておいてください。

	res/font.gpb
	res/shaders/colored.frag
	res/shaders/colored.vert
	res/shaders/colored-unlit.frag
	res/shaders/colored-unlit.vert
	res/shaders/font.frag
	res/shaders/font.vert
	res/shaders/form.frag
	res/shaders/form.vert
	res/shaders/sprite.frag
	res/shaders/sprite.vert
	res/shaders/spritecol.frag
	res/shaders/spritecol.vert
	res/shaders/terrain.frag
	res/shaders/terrain.vert
	res/shaders/textured.frag
	res/shaders/textured.vert
	res/shaders/textured-bumped.frag
	res/shaders/textured-bumped.vert
	res/shaders/textured-unlit.frag
	res/shaders/textured-unlit.vert


・注意点

	HGIMG4は、外部DLLファイルによる拡張プラグインではありません。
	HSP3DISHの機能を内包したランタイムファイルとして提供されています。
	必ず、HGIMG4のランタイムに対応したバージョンのコンパイラ
	(hspcmp.dll)やスクリプトエディタをご使用下さい。
	また、HSP3は実行ランタイムに対応したコードジェネレーター(hspcmp.dll)
	をご使用ください。(HSP3.5以上を推奨)

	DirectX9版ランタイムの実行ファイル作成時には、「d3dcompiler_47.dll」
	「libEGL.dll」「libGLESv2.dll」の3ファイルが実行ファイルと同じフォルダに
	必要となりますので注意してください。


・命令一覧(メイン)

	setcls mode,color,tex				画面消去設定
	gpviewport x,y,sx,sy				ビューポート設定
	setborder sx,sy,sz,option			オブジェクト有効範囲設定

	gpreset	option					シーンを描画
	gppostefx  postid,opt1,opt2			ポストエフェクト生成
	gpuselight objid				ライトオブジェクトの切り替え
	gpusecamera objid				カメラオブジェクトの切り替え
	gpusescene sceneid				シーンの切り替え

	gpobjpool start,num				オブジェクトID生成の設定
	delobj objid					オブジェクトの破棄
	gpsetprm objid,prmid,value			オブジェクトのコアパラメーター設定
	gpgetprm var,objid,prmid			オブジェクトのコアパラメーター取得
	setobjname objid,"name"				オブジェクトのノード名を設定する
	getobjname var,objid				オブジェクトのノード名を取得する
	setobjmode id,mode,sw				オブジェクトのモード設定
	setcoli id,mygroup,enegroup			オブジェクトのコリジョン設定
	getcoli val,id,distance				オブジェクトのコリジョン判定
	findobj exmode,group				オブジェクト検索
	nextobj val					次のオブジェクト検索

	gpcolormat var,color,opt			カラーマテリアルの生成
	gptexmat var,"file",opt				テクスチャマテリアルの生成
	gpusermat var,"vsh","fsh","defs",color,opt	カスタムマテリアルの生成
	gpmatprm objid,"name",x,y,z			マテリアルのパラメーター設定
	gpmatprm objid,"name",value			マテリアルのパラメーター設定(2)
	gpmatprm objid,"name",x,y,z,w			マテリアルのパラメーター設定(3)
	gpmatstate objid,"name","value"			マテリアルのステート設定

	gpbox var,size,color,matobj			箱ノードを生成
	gpfloor var,sizex,sizey,color,matobj		床ノードを生成
	gpplate var,sizex,sizey,color,matobj		板ノードを生成
	gpload var,"file","name"			3Dモデルノードを生成
	gpspr var,bufid,celid,gmode			2Dスプライトノード生成
	gpnull var					ヌルノードを生成

	gplight id,opt,range,inner,outer		ライトノードを設定
	gpcamera id,fov,aspect,near,far			カメラノードを設定

	gpclone var,objid				ノードを複製
	setobjmode objid,value,mode			オブジェクトのモード設定
	setalpha objid,value				オブジェクトの透明度(α値)設定
	gplookat objid,x,y,z				指定座標に向けてノードを回転

	gppbind objid,mass,friction			ノードに標準的な物理特性を設定
	gppset objid,prmid,x,y,z			ノードの物理パラメーターを設定
	gppapply objid,action,x,y,z			ノードに物理的な力を適用する

	celputm vxpos,vypos,vcelid,bufid,count		セルをまとめて描画する
	gpdraw option					シーン内の全オブジェクトを描画する


・命令一覧(オブジェクト操作)

	getpos id,x,y,z					ノード座標を取得
	setpos id,x,y,z					ノード座標を設定
	addpos id,x,y,z					ノード座標を加算
	getposi id,x,y,z				ノード座標を取得(整数値)

	setang id,x,y,z					ノード回転を設定
	setangr id,x,y,z				ノード回転を設定(整数値)
	addang id,x,y,z					ノード回転を加算
	addangr id,x,y,z				ノード回転を加算(整数値)

	getscale id,x,y,z				ノード倍率を取得
	setscale id,x,y,z				ノード倍率を設定
	addscale id,x,y,z				ノード倍率を加算
	getscalei id,x,y,z				ノード倍率を取得(整数値)

	getdir id,x,y,z					ノード移動量を取得
	setdir id,x,y,z					ノード移動量を設定
	adddir id,x,y,z					ノード移動量を加算
	getdiri id,x,y,z				ノード移動量を取得(整数値)

	getwork id,x,y,z				ノードワーク値を取得
	setwork id,x,y,z				ノードワーク値を設定
	addwork id,x,y,z				ノードワーク値を加算
	getworki id,x,y,z				ノードワーク値を取得(整数値)

	getwork2 id,x,y,z				ノードワーク値2を取得
	setwork2 id,x,y,z				ノードワーク値2を設定
	addwork2 id,x,y,z				ノードワーク値2を加算
	getwork2i id,x,y,z				ノードワーク値2を取得(整数値)

	getcolor id,x,y,z				ノードRGBカラーを取得
	setcolor id,x,y,z				ノードRGBカラーを設定
	addcolor id,x,y,z				ノードRGBカラーを加算
	getcolori id,x,y,z				ノードRGBカラーを取得(整数値)


・命令一覧(補助)

	selpos id					移動座標をMOC情報に設定
	selang id					回転角度をMOC情報に設定
	selscale id					スケールをMOC情報に設定
	seldir id					移動量をMOC情報に設定

	objsetf3 x,y,z					選択中のMOC情報を設定
	objaddf3 x,y,z					選択中のMOC情報を加算

	objgetfv fv					選択中のMOC情報を取得
	objsetfv fv					選択中のMOC情報を設定
	objaddfv fv					選択中のMOC情報を加算

	fvset fv,x,y,z					ベクトル設定
	fvseti fv,x,y,z					整数値からベクトル設定
	fvadd fv,x,y,z					ベクトル加算
	fvsub fv,x,y,z					ベクトル減算
	fvmul fv,x,y,z					ベクトル乗算
	fvdiv fv,x,y,z					ベクトル除算
	fvdir fv,x,y,z					ベクトル回転
	fvmin fv,x,y,z					ベクトル最大値
	fvmax fv,x,y,z					ベクトル最小値
	fvouter fv,x,y,z				ベクトル外積
	fvinner fv,x,y,z				ベクトル内積
	fvface fv,x,y,z					座標から角度を得る
	fvunit fv						ベクトル正規化
	fsin fval,rot					サインを求める
	fcos fval,rot					コサインを求める
	fsqr fval,prm					平方根を求める
	froti fval,prm					整数値角度を小数値に変換

	fv2str fv					ベクトルを文字列に変換
	str2fv fv,"x,y,z"				文字列をベクトルに変換


・HGIMG4の制限

	HGIMG4は、Windows上で動作するHSP3のスクリプトエディタなど通常のHSP環境をそのまま 使用して開発を行ないます。
	(必ずHSP3.5以降のHSPで作成を行なってください。)

	HGIMG4は、HSP3Dishランタイムを拡張する形で実装されています。
	HSP3Dishが持つ命令をすべてサポートしているほか、いくつかの拡張が行なわれています。
	ただし、HSP3Dishによる制約(COMオブジェクト、各種配置オブジェクトの使用不可、出力は単一のスクリーンなど)も
	同様に発生します。基本的な文法、プログラム制御はHSP3と同様です。
	HSP3Dishについての詳細は、HSP3Dish プログラミングマニュアル・基本仕様ガイド(hsp3dish_prog.htm)を
	参照してください。


・HGIMG3との違い

	HGIMG4では、基本的にHGIMG3とソースコードの互換性はありません。
	しかし、HGIMG3に触れたことがあるユーザーであれば、命令体系やシステム的に継承されている
	点が多いため比較的容易に移行することができるでしょう。

	HGIMG3との主な違いは以下の通りです。

	・HGIMG3ではモデルを生成して、オブジェクトに割り当てていましたが、HGIMG4では
	　オブジェクト(ノードオブジェクト)を直接生成して配置する形になります。
	・ライトの反映、テクスチャ、色、半透明設定などの情報はマテリアルオブジェクトとして
	　生成され、オブジェクトに割り当てる形になります。
	・HGIMG3でsetefx命令により指定されていた半透明マテリアルの設定は利用できません。
	・HGIMG4はOpenGLによる右手座標系が使用されています。Y軸やZ軸の正方向がHGIMG3と異なります
	・HGIMG4ではオブジェクトの回転情報を内部ではクォータニオン形式で保持しています。
	　HGIMG3と同様にX,Y,Z回転の角度を与えることも可能ですが、HGIMG3と異なる回転姿勢になる
	　可能性があります。
	・同じモデルを複数配置するような場合は、クローン(gpclone命令)を利用することが推奨されます。


・初期化と描画の方法

	初期化を以下の手順に従って行なって下さい。

		gpreset				; hgimgの初期化

	gpreset命令は、システム全初期化を行なう命令です。
	初期化はいつでも、何度でも行なうことが可能です。

	初期化が終わったら、いつでも登録されているオブジェクトを表示可能な
	状態になります。
	HGIMG4では、描画を以下のようなループで行ないます。

	;------------------------------------------------------------------
	*main
		;	描画メイン
		;
		redraw 0			; 描画開始(画面クリア)

		;	
		;	各種描画を行なう
		;	

		redraw 1			; 描画終了
		await 1000/60			; 時間待ち(60フレーム/秒)
		goto *main
	;------------------------------------------------------------------

	画面の書き換えに関するソースは、redraw 0で描画開始を知らせて、
	redraw 1により描画終了タイミングを知らせるようにしてください。
	通常のHSP3とは違い、「redraw 0」を指定することにより、スクリーンが
	一旦クリアされます。

	描画を開始してから、box、mes等の描画命令を自由に記述することができます。
	その後、await命令で時間待ち(ウェイト)をします。「await 10」の場合は、
	最低でも10msだけの待ち時間を入れます。

	これらのルールは、HSP3Dishと同様です。
	2D描画に使用可能な描画命令と仕様についても、基本的にHSP3Dishと同じになっています。
	サポートされている命令の詳細は、support_cmds.txtを参照してください。


・3D動作の概要

	HGIMG4は、シンプルで柔軟性のある3D描画システムを提供します。
	重要な構成単位が、「ノードオブジェクト」になります。

	「ノードオブジェクト」は、HGIMG4の操作対象となるもので、
	「ノード」または「オブジェクト」とも呼ばれます。
	「ノードオブジェクト」は、3D世界を構成する要素すべてを含んでおり、
	それぞれが独自の番号(ID)を持っています。

	ノードオブジェクトは、以下の情報を持っています。

		識別番号(ID)
		ノード名(Name)
		X,Y,Z座標(Pos)
		X,Y,Z回転(Ang)
		X,Y,Z倍率(Scale)
		X,Y,Z移動量(Dir)
		R,G,Bカラー(Color)
		ワーク値(X,Y,Z,W)(Work,Work2)
		マテリアル特性(MatID)
		物理特性(Physics)
		カメラ(視点)設定(Camera)
		ライト(光源)設定(Light)
		エミッター(パーティクル発生源)設定(Emitter)

	「シーン」は、複数の「ノードオブジェクト」を含めた世界全体を指します。
	HGIMG4では、「シーン」に登録された「ノードオブジェクト」がレンダリング(描画)の
	対象となります。
	一般的なプログラムの流れとしては、以下のようになります。

		gpreset命令でシーン全体をリセット
			↓
		必要なノードオブジェクトをシーンに登録する
			↓
		ノードオブジェクト情報の設定を適切に行なう
			↓
		gpdraw命令でシーンの描画を行なう

	シーンにノードオブジェクトを追加するための命令として以下が用意されています。

		gpbox var,size,color,matobj			箱ノードを生成
		gpfloor var,sizex,sizey,color,matobj		床ノードを生成
		gpplate var,sizex,sizey,color,matobj		板ノードを生成
		gpload var,"file","name"			gpbモデルノードを生成
		gpnull var					ヌルノードを生成
		gpclone var,objid				ノードを複製

	それぞれの命令詳細は、命令のヘルプ(F1キー)を参照してください。
	シーンに追加されたノードオブジェクトIDは、生成時に指定された変数に代入されます。
	以降は、ノードオブジェクトIDを介して各種情報を操作することが可能です。

	生成されたオブジェクトは、通常(0,0,0)の座標に配置されます。
	3D座標は、右手座標系が使用されています。Z座標値が大きいほど手前に、
	Y座標が大きいほど天井方向に配置されます。

	オブジェクトの座標、角度、スケールを設定するための基本的な命令は以下になります。

		setpos id,x,y,z		X,Y,Z座標(Pos)を設定
		setang id,x,y,z		X,Y,Z回転(Ang)を設定
		setangr id,x,y,z	X,Y,Z回転(Ang)を設定(整数値)
		setscale id,x,y,z	X,Y,Z倍率(Scale)を設定

	ノードオブジェクトIDとx,y,zパラメーター(実数値を使用可能)によって指定します。

		例:
		setpos 3, 5, 1.2, 0.5

	上の例では、ノードオブジェクトID3の物体を座標( 5.0, 1.2, 0.5 )の位置に設定します。
	setang命令では、オブジェクトの向いているX,Y,Z角度を指定して回転を行ないます。
	(角度の単位はラジアン(1周でπ*2)になります)
	また、高速化のため角度を整数値で設定することのできるsetangr命令も用意されています。
	この場合は、256で一周(360度)の単位で指定を行ないます。
	(0が0度、64が90度、128が180度…となります。)
	値にも、以下の情報を設定するための命令が用意されています。

		setdir id,x,y,z		X,Y,Z移動量(Dir)を設定
		setcolor id,x,y,z	R,G,Bカラー(Color)を設定
		setwork id,x,y,z	ワーク値(X,Y,Z)を設定
		setwork2 id,x,y,z	ワーク2値(X,Y,Z)を設定

	X,Y,Z移動量(Dir)はオブジェクトの自動移動モード(OBJ_MOVE)が選択された際に参照される
	移動量になります。R,G,Bカラー(Color)は、ライトなど一部のオブジェクトで色情報を設定する
	際に使用されます。
	ワーク値、ワーク値2は、ユーザーが自由に使用できる数値格納用に用意されています。

	直接値を設定するだけでなく加算を行なうadd〜系の命令が用意されています。

		addpos id,x,y,z		X,Y,Z座標(Pos)を加算
		addang id,x,y,z		X,Y,Z回転(Ang)を加算
		addangr id,x,y,z	X,Y,Z回転(Ang)を加算(整数値)
		addscale id,x,y,z	X,Y,Z倍率(Scale)を加算

	これらは、もともと設定されていた値に対して、指定した値を加算します。
	add〜系の命令は、set〜系の命令と同様の種類が用意されています。

	また、設定済みの情報を取得するために、get〜系の命令が用意されています。

		getpos id,x,y,z		X,Y,Z座標(Pos)を取得
		getscale id,x,y,z	X,Y,Z倍率(Scale)を取得
		getdir id,x,y,z		X,Y,Z移動量(Dir)を取得
		getwork id,x,y,z	ワーク値(X,Y,Z)を取得
		getwork2 id,x,y,z	ワーク2値(X,Y,Z)を取得

	これらの命令では、x,y,zに読み出し先の変数名を指定します。

		例:
			; カメラのXYZ座標を変数a,b,cに読み出す
			getpos GPOBJ_CAMERA,a,b,c

	上の例では、変数aにX座標が、変数bにY座標が、変数cにZ座標が
	それぞれ実数型で代入されます。
	整数値でパラメーターを取得する場合は、以下の命令を使用します。

		getposi id,x,y,z	X,Y,Z座標(Pos)を整数値で取得
		getscalei id,x,y,z	X,Y,Z倍率(Scale)を整数値で取得
		getdiri id,x,y,z	X,Y,Z移動量(Dir)を整数値で取得
		getworki id,x,y,z	ワーク値(X,Y,Z)を整数値で取得
		getwork2i id,x,y,z	ワーク2値(X,Y,Z)を整数値で取得

	最後に「i」が付加された命令は、整数値で変数に代入されます。
	座標を整数のみで扱う場合や、高速化を行ないたい場合に使用する
	ことができます。
	回転の情報取得には注意が必要です。3Dノードオブジェクトは、内部的な
	回転情報をクォータニオン形式を保持しており、正確なX,Y,Zの回転角度を
	求めることが困難です。このため、setangやaddang命令など回転の設定では、
	X,Y,Z角度を指定することができましたが、取得に関してはサポートしていません。


・2D描画の概要

	HGIMG4は、2D描画に関する様々な機能が用意されています。
	2D描画の方法は、大きく2つのカテゴリに分かれます。

	・直接描画

		mes命令、boxf命令などHSP3Dishがサポートしている標準的な
		描画命令を利用可能です。
		redraw 0〜redraw 1までの描画ループ(1フレームの描画単位)内に
		記述することで描画が実行されます。

	・スプライトオブジェクトによる描画

		オブジェクトの1つとしてシーン内にスプライトオブジェクトを
		登録して管理することができます。
		スプライトオブジェクトは、3Dのノードオブジェクトと同様に
		オブジェクトIDが割り振られ、座標や角度、倍率などを設定することが可能です。

	必要に応じて、使いやすい方法を選択してください。
	たとえば、背景に大きな2D画像を表示する場合はgcopy命令などの直接描画を、
	敵キャラクターなど大量に登場するものはスプライトオブジェクトといった具合に
	用途を振り分けることができます。

	スプライトオブジェクトを生成する場合は、gpspr命令を使用します。

		gpspr var,bufid,celid,gmode			2Dスプライトを生成

	bufidで読み込まれた画像のバッファID、celidでセルのID、gmodeで合成モードを指定して
	スプライトオブジェクトを生成します。
	生成されたオブジェクトIDがvarで指定された変数に代入されます。

	生成されたスプライトオブジェクトは、通常(0,0)の座標に配置されます。
	2D座標は、スクリーン座標(画面のドットと１対１に対応した値)で管理され、
	画面の左上が(0,0)の座標となります。

	登録されたスプライトオブジェクトは、gpdraw命令でシーンの描画が行なわれるタイミングで
	自動的に描画されます。その際には、設定されたX,Y倍率、Z回転角度が適用されます。
	スプライトオブジェクトは、オブジェクトが持つ当たり判定(コリジョン)や、モードによる制御など
	様々な機能を活用することができます。


・オブジェクトのモード設定

	表示オブジェクト(ノードオブジェクト、スプライトオブジェクト)には、ON/OFF可能な
	モード設定が用意されています。

		setobjmode id,mode,sw			オブジェクトのモード設定

		ObjID    : オブジェクトID
		mode     : モード値
		sw       : 設定スイッチ

	swは、以下のように動作します。

		sw = 0 : 指定したモード値を追加
		sw = 1 : 指定したモード値を削除
		sw = 2 : 指定したモード値だけを設定

	モード値は以下の中から選択します。

		ラベル             |        内容
		--------------------------------------------------------------
		OBJ_HIDE             非表示(画面から消す)
		OBJ_CLIP             3Dクリッピングを有効にする
		OBJ_XFRONT           正面属性(常に画面に正面を向く)
		OBJ_WIRE             ワイヤーフレームで描画する
		OBJ_MOVE             自動移動を行なう(XYZ移動量を参照する)
		OBJ_FLIP             ボーダー領域で反転する
		OBJ_BORDER           ボーダー領域を有効にする
		OBJ_2D               2Dスプライト
		OBJ_TIMER            タイマーを有効にする
		OBJ_LATE             後から描画される(半透明オブジェクト用)

	複数の項目を同時に選択する場合は、「OBJ_LATE|OBJ_MOVE」のように
	「|」で区切って指定することができます。何も指定しない場合は、0にするか
	省略して構いません。

		例:
		setobjmode id, OBJ_MOVE, 0

	上の例では、変数idで指定されるオブジェクトに、OBJ_MOVE(自動移動を行なう)設定を
	追加します。これにより、このオブジェクトはXYZ移動量(setdir命令で設定される)を
	もとに自動的に移動するようになります。


・カメラの設定

	カメラ(視点)は、3Dシーンを描画する基点の座標を持つものです。
	カメラは、ノードオブジェクトの1つとして扱われ、固有のオブジェクトIDを持っています。

	シーンがリセットされると、デフォルトのカメラが配置されます。
	デフォルトのカメラには、GPOBJ_CAMERAマクロを使用してアクセスすることができます。

		例:
		setpos GPOBJ_CAMERA, 0,1,5		; カメラ位置を設定

	上の例では、デフォルトのカメラを(0,1,5)の座標に設定します。
	カメラは3Dシーンを見るための視点座標となり、ノードオブジェクトの回転により視点方向が
	決定されます。指定された座標をカメラから見るための角度を設定することのできる
	gplookat命令も利用できます。

		例:
		gplookat GPOBJ_CAMERA, 0,1,0		; カメラ注視点を設定

	上の例では、(0,1,0)の座標を見るための角度がカメラに適用されます。

	デフォルトのカメラだけでなく、シーン内にカメラを複数設定して切り替えることも可能です。

		例:
		gpnull id_camera			; ヌルノードを生成する
		gpcamera id_camera, 45, 1.5, 0.5, 768	; カメラとして設定する
		gpusecamera id_camera			; 使用するカメラを選択する
		setpos id_camera, 0,20,20		; カメラ位置を設定する

	シーン内に配置されたカメラは、gpusecamera命令により切り替えることができます。
	独自のカメラを生成することにより、FOV(画角)やZ軸の範囲(Zクリッピング範囲)を独自に
	設定することができます。


・ライトの設定

	ライト(光源)は、3Dシーンに配置可能な照明の情報です。
	ライトは、ノードオブジェクトの1つとして扱われ、固有のオブジェクトIDを持っています。

	シーンがリセットされると、デフォルトのライトが配置されます。
	デフォルトのライトには、GPOBJ_LIGHTマクロを使用してアクセスすることができます。

		例:
		setcolor GPOBJ_LIGHT, 1,1,1		; ライトカラーを設定
		setdir GPOBJ_LIGHT, 0.5,0.5,0.5		; アンビエントカラーを設定

	上の例では、デフォルトのライト色を(1,1,1)に設定します。
	色の設定は、0〜1の値でRGBごとに指定することができます。1は最大の輝度となるため、
	RGBの段階で表現すると、(R=255,G=255,B=255)になります。
	ライトの場合は、setdirによりアンビエント(環境)カラーを設定します。
	上の例では、(R=128,G=128,B=128)がアンビエント(環境)カラーになります。
	ライトの回転角度を変更することで、照明を当てる方向が変わります。
	スポットライト、ポイントライトが設定されている場合は、ライトの座標もパラメーター要素の
	１つとなります。(現在のバージョンでは、スポットライト、ポイントライトはサポートしていません)

	デフォルトのライトだけでなく、シーン内にライトを複数設定して切り替えることも可能です。

		例:
		gpnull id_alight			; ヌルノードを生成する
		gplight id_alight, GPOBJ_LGTOPT_NORMAL	; ライトとして登録する
		gpuselight id_alight			; デフォルトのライトに設定

	シーン内に配置されたライトは、gpuselight命令により切り替えることができます。


・コリジョングループ設定と衝突検知

	オブジェクトごとに、コリジョングループを設定することにより、
	種別を識別しやすくし、衝突検知などの機能が利用できるようになります。

	setcoli id,mygroup,enegroup		オブジェクトのコリジョン設定

		id       : オブジェクトID
		mygroup  : 自分が属するグループ値
		enegroup : 衝突を検出する対象となるグループ値

		オブジェクトに対してコリジョン情報を設定します。
		グループ値は、
		1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768…
		の中から1つだけを選択可能です。(32ビット値まで指定可能)

	コリジョングループが設定されているオブジェクト同士は、getcoli命令により
	指定範囲内の衝突を検出できるようになります。

	getcoli var,id,distance			オブジェクトのコリジョン判定

		var      : 結果が代入される変数名
		id       : オブジェクトID
		distance : 衝突を検出する範囲(実数値)

		指定したオブジェクトが持つコリジョン情報をもとに、その
		オブジェクトが衝突している別なオブジェクトのIDを調べます。
		distanceは、衝突する範囲(半径)をfloat値で指定します。
		衝突が検出された場合は、変数にオブジェクトIDが代入されます。
		何も衝突が検出されなかった場合は、-1が代入されます。

	コリジョングループ設定と衝突検知は、3Dノードオブジェクト、2Dのスプライトオブジェクト
	どちらでも利用できます。ただし、3Dノードオブジェクトとスプライトオブジェクト同士は
	座標系が異なるため衝突は検知されません。


・物理挙動の設定

	HGIMG4では、Bullet Physics Libraryによる物理挙動を3Dノードオブジェクトに統合しています。
	シーン内に配置された物体に物理特性を設定することで、物理法則に従った動作を行ないます。
	物理挙動の対象となるのは、箱ノード(gpboxで生成)、床ノード(gpfloorで生成)、板ノード(gpplateで生成)
	及びgpbモデルノード(gploadで生成)となります。
	ノードオブジェクトを生成した段階では、物理設定は行なわれていません。
	物理設定を行なう場合は、gppbind命令を使用してください。

		gppbind objid,mass,friction		ノードに標準的な物理特性を設定

	最初に、gppbind命令により基本的な物理設定を行なってください。
	パラメーターmassは、物体の重さ。frictionは摩擦係数です。値を省略した場合は、デフォルト値が使用されます。
	重さ(mass)を0にすることで静的剛体(衝突はするが、動かない)として設定されます。
	それ以外の場合は、物理法則に従って床のある場所まで落下します。

	※物理挙動を設定する場合は、必ず床(地面)となる部分を作成しておいてください。
	　gpfloor命令によって生成された床に標準的な物理特性を設定することで、固定された床面を
	　生成することができます。床が存在しなかった場合、物体は永遠に落下を続けることになります。

	物理挙動で使用される形状は、基本的にもとの形状と同じになりますが、gpbモデルノードの場合はモデル全体を
	包み込むバウンディング球が使用されます。

	物理設定を行なったノードオブジェクトは、それ以降自立して動作するようになり、
	setposなどの座標変更は無効となります。
	物体に力を加えたい場合は、gppapply命令を使用してください。

		gppapply objid,action,x,y,z		ノードに物理的な力を適用する

	gppapply命令は、ノードに対して(x,y,z)で指定したベクトルの物理的な力を適用します。
	パラメーターactionで設定できるタイプは、以下の通りです。

	        マクロ名                     内容
	    ----------------------------------------------------------------------------
		GPPAPPLY_FORCE               移動しようとする力を加算する
		GPPAPPLY_IMPULSE             瞬間的な衝撃を与える
		GPPAPPLY_TORQUE              トルク(ねじる)力を与える
		GPPAPPLY_TORQUE_IMPULSE      トルク+衝撃を与える

	より詳細な物理設定を行なう場合は、gppset命令を使用してください。

		gppset objid,prmid,x,y,z		ノードの物理パラメーターを設定

	パラメーターprmidで、設定する項目を指定することができます。
	X,Y,Zに指定された値が、それぞれの項目に適用されます。

	        マクロ名                          内容
	    ----------------------------------------------------------------------------
		GPPSET_ENABLE                     X=物理挙動のON/OFF(0=無効)
		GPPSET_FRICTION                   X=摩擦係数, Y=弾力設定
		GPPSET_DAMPING                    X=linear反発(0〜1.0), Y=angular反発(0〜1.0)
		GPPSET_KINEMATIC                  X=Kinematic設定のON/OFF(0=無効)
		GPPSET_ANISOTROPIC_FRICTION       X,Y,Z=異方性の摩擦
		GPPSET_GRAVITY                    X,Y,Z=重力
		GPPSET_LINEAR_FACTOR              X,Y,Z=ベクトルに沿った移動の設定
		GPPSET_ANGULAR_FACTOR             X,Y,Z=ベクトルに沿った回転の設定
		GPPSET_ANGULAR_VELOCITY           X,Y,Z=回転ベロシティー
		GPPSET_LINEAR_VELOCITY            X,Y,Z=リニアベロシティー


・マテリアルの設定

	マテリアルは、描画(レンダリング)に関する詳細な設定情報です。
	色に関する情報からテクスチャ画像、シェーダーの設定など幅広い情報を扱います。
	通常のノードオブジェクト生成では、標準的なマテリアルが自動的に適用されます。

		例:
		gpbox id_model, 1, 0xffffff	; 白い色の箱ノードを追加

	上の例では、白い色の立方体が生成されます。
	ユーザーがマテリアルを独自に生成することにより、別な質感の設定が可能になります。
	マテリアルを生成するための命令は以下の通りです。

		gpcolormat var,color,opt			カラーマテリアルの生成
		gptexmat var,"file",opt				テクスチャマテリアルの生成
		gpusermat var,"vsh","fsh","defs",color,opt	カスタムマテリアルの生成

	いずれの場合も、マテリアルが生成されると、マテリアルIDと呼ばれる整数値が
	変数に代入されます。以降は、マテリアルIDを介して各種設定を変更することが
	可能となります。

	gpcolormat命令は、単色のカラーマテリアルを生成します。

		例:
		gpcolormat mat_id,0xff00ff,GPOBJ_MATOPT_NOLIGHT
		gpbox id_model, 1, , mat_id

	上の例では、RGBカラーが0xff00ff(紫)の、ライティングを行なわないマテリアルを持った、
	立方体のノードオブジェクトが生成されます。
	ユーザーが生成したマテリアルIDを、オブジェクトが生成時に指定することにより
	独自のマテリアルを持たせることが可能になります。
	マテリアル生成時のオプションで、以下を指定することにより設定を変更することができます。
	これらの設定は、gpmatstate命令で別途設定することも可能です。

	        マクロ名                内容
	    ----------------------------------------------------------------------------
		GPOBJ_MATOPT_NOLIGHT    ライティングを行なわない
		GPOBJ_MATOPT_NOMIPMAP   MIPMAPを生成しない
		GPOBJ_MATOPT_NOCULL     カリングを無効にする
		GPOBJ_MATOPT_NOZTEST    Zテストを無効にする
		GPOBJ_MATOPT_NOZWRITE   Zバッファ書き込みを無効にする
		GPOBJ_MATOPT_BLENDADD   プレンドモードを加算に設定する

	gptexmat命令は、テクスチャ(画像)を持ったマテリアルを生成します。

		例:
		gptexmat id_texmat, "res/qbox.png"	; テクスチャマテリアル作成
		gpbox id_model, 1, , id_texmat		; 箱ノードを追加

	上の例では、resフォルダ内のqbox.pngをテクスチャとして持ったマテリアルを生成します。

	gpusermat命令は、カスタムマテリアルを生成するもので、任意のシェーダーを使って
	描画のすべてをコントロールすることができるようになります。
	これは、シェーダーについての知識がある上級者向けの拡張機能ですので、通常は
	使用する必要はありません。

		gpusermat var,"vsh","fsh","defs",color,opt	カスタムマテリアルの生成

		var      : 結果が代入される変数名
		"vsh"    : バーテックスシェーダーファイル名
		"fsh"    : フラグメントシェーダーファイル名
		"defs"   : 追加のラベル定義
		color    : RGBカラーコード
		opt      : マテリアルオプション指定

	カスタムマテリアルを生成した場合は、gpmatprm命令によってシェーダーパラメーターに
	渡すための値を設定することができます。

		例:
		gpmatprm objid,"u_diffuseColor",1,0,0.5 ; マテリアルのパラメーター設定

	上の例では、u_diffuseColorという名称のパラメーターに( 1.0, 0.0, 0.5 )のベクトル値を
	設定します。これにより、マテリアルごとに異なるパラメーターをシェーダーに渡すことが
	可能になります。

	gpmatstate命令は、マテリアルIDを介して表示のためのステート設定を変更します。

		gpmatstate objid,"name","value"		マテリアルのステート設定

	文字列としてnameで指定された項目に対して、valueで指定された内容を設定します。
	項目と設定内容はすべて文字列で行なうので注意してください。
	設定項目と、内容についての詳細は以下の通りです。

		name             value
	    --------------------------------------------------------------------
		"blend"          プレンドの有効/無効切り替え
	                         (true または false を指定)
		"blendSrc"       ブレンド元を選択(下記参照)
		"blendDst"       ブレンド先を選択(下記参照)
		"cullFace"       隠面除去(カリング)の有効/無効切り替え
	                         (true または false を指定)
		"cullFaceSide"   隠面除去(カリング)の面指定
		"depthTest"      true または false
	                         (true または false を指定)
		"depthWrite"     Zバッファ書き込みの有効/無効切り替え
	                         (true または false を指定)
		"depthFunc"      Z値比較方法を選択(下記参照)

		(*)blendSrc,blendDstで設定できる文字列

		"ZERO"                     即値(0)
		"ONE"                      即値(1)
		"SRC_COLOR"                書き込み元カラー
		"ONE_MINUS_SRC_COLOR"      書き込み元カラー(反転値)
		"DST_COLOR"                書き込み先カラー
		"ONE_MINUS_DST_COLOR"      書き込み先カラー(反転値)
		"SRC_ALPHA"                書き込み元α
		"ONE_MINUS_SRC_ALPHA"      書き込み元α(反転値)
		"DST_ALPHA"                書き込み先α
		"ONE_MINUS_DST_ALPHA"      書き込み先α(反転値)
		"CONSTANT_ALPHA"           α固定値
		"ONE_MINUS_CONSTANT_ALPHA" α固定値(反転値)
		"SRC_ALPHA_SATURATE"       書き込み元α反転値

		(*)cullFaceSideで設定できる文字列

		BACK             裏面をカリング
		FRONT            表面をカリング
		FRONT_AND_BACK   両面をカリング

		(*)depthFuncで設定できる文字列

		NEVER            常に拒否
		LESS             小さい値の時のみ許可
		EQUAL            同一値のみ許可
		LEQUAL           同一か小さい値の時のみ許可
		GREATER          大きい値の時のみ許可
		NOTEQUAL         同一でない値のみ許可
		GEQUAL           同一か大きい値の時のみ許可
		ALWAYS           常に許可


・3Dモデルデータの表示

	gpload命令により、ファイル化された3Dモデルデータ(.gpbファイル)を
	読み込み表示させることができます。

		例:
		gpload id_model,"res/duck"		; モデル読み込み

	上の例では、resフォルダ内にあるduck.gpbファイルを読み込みます。
	その際に、マテリアル情報が書かれているduck.materialファイルが参照されます。
	さらに、テクスチャが必要な場合は、同じフォルダ内の画像ファイルも読み込まれます。

	gpload命令で読み込むためのファイル(.gpb形式)は、gameplay3Dで標準的に使用されている
	データ形式です。HGIMG4では、.gpb形式を生成するためのGPBコンバーターを用意しています。

		gpbconv.exe

	を起動することで、GUIによるファイル変換ツールが起動します。
	(内部でコマンドラインツールのgameplay-encoder.exeを呼び出します)

	.gpb形式とともに読み込まれるマテリアル情報(.material)も、GPBコンバーターから
	出力が可能です。.materialは、テキスト形式のファイルなので、通常のテキストエディタで
	閲覧したり、必要に応じて内容を編集することが可能です。

	※現在のバージョンでは、FBXが参照するテクスチャによっては、マテリアル情報(.material)に
	　出力されるテクスチャファイル名にパス名(フォルダ)が付加されることがあり、正しく読み込みが
	　できないことがあります。その場合は、生成された.materialファイルをテキストエディタ等で
	　開いてテクスチャファイル名部分を直接修正するようにしてください。

	.gpb形式はfbx形式から変換することが可能です。
	fbx形式は、Autodesk社の3Dツールで使用されている標準的な3D形式です。
	http://www.autodesk.co.jp/adsk/servlet/pc/index?siteID=1169823&id=14945696

	他の形式からfbxに変換するためのFBX Converterが公開されています。
	これにより、OBJ, DXF, DAE(Collada), 3DSの形式から変換することができます。
	http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=10775855

	現在、fbxの出力とgpbの変換を確認しているツールは、Blender及びMayaになります。


・シーンの描画について

	gpdraw命令は、シーン内のオブジェクトをすべて描画する命令です。
	以下のオプションを指定することで、限られた項目の描画だけを行なうことができます。

	        マクロ名                      内容
	    --------------------------------------------------------------------
		GPDRAW_OPT_OBJUPDATE          オブジェクトの自動移動処理
		GPDRAW_OPT_DRAWSCENE          3Dシーン描画処理
		GPDRAW_OPT_DRAWSCENE_LATE     3Dシーン描画処理(OBJ_LATE)
		GPDRAW_OPT_DRAW2D             2Dスプライト描画処理
		GPDRAW_OPT_DRAW2D_LATE        2Dスプライト描画処理(OBJ_LATE)

	OBJ_LATEのモードが付加されたもの(半透明α値が設定されているものを含む)は、
	不透明のオブジェクトよりも後に描画するため、項目が分けられています。
	複数の項目を「|」で区切って指定することもできます。

		例:
		gpdraw GPDRAW_OPT_DRAW2D|GPDRAW_OPT_DRAW2D_LATE

	上の例では、2Dスプライト描画処理、2Dスプライト描画処理(OBJ_LATE)だけを実行します。
	これを利用すると、3Dシーン描画と2Dスプライト描画の間にgcopy命令など別な描画命令による
	表示を行なうことが可能になります。

	gpdraw命令のパラメーターを省略した場合は、すべての項目が選択されている状態になります。
	通常は、パラメーターを指定しなくても問題ありません。
	また、2Dの直接描画命令だけを使用して、オブジェクトによる描画が不要な場合は、
	gpdraw命令を記述する必要もありません。


・半透明オブジェクトの描画について

	αチャンネル値の設定により、2Dスプライトオブジェクト及び3Dノードオブジェクトの
	透明度を変更することができます。

		setalpha オブジェクトID, α値

	α値は、0〜255までの整数値で、0が完全な透明、255が完全な不透明となります。
	α値が255以外(半透明)の状態となったオブジェクトは、描画順序が前面に変更されます。
	(OBJ_LATEのモードが指定されたのと同じ状態)


・オブジェクトIDプールについて

	オブジェクトIDは、あらかじめ決められた最大数の中で、使用されていないID番号が
	割り当てられます。オブジェクト最大数は、デフォルトで1024個となっており、
	sysreq命令によって拡張することが可能です。

		例:
		setreq SYSREQ_MAXOBJ,4096	; オブジェクト最大数を4096に拡張する

	ID番号の割り当て範囲を任意に変更するためにgpobjpool命令が用意されています。

		例:
		gpobjpool 100,50	; オブジェクトID生成の設定変更

	上の例では、ID番号100〜150のみを割り当て対象に変更します。
	これ以降のオブジェクト生成命令(gpboxやgpnullなど)では、指定された
	範囲内のオブジェクトIDのみが割り当てられます。
	オブジェクト全体の中で特定の個数までしか生成されないように制限したい場合や、
	表示順序をある程度コントロールしたい場合に利用できます。
	gpobjpool命令によって、あらかじめ設定されたオブジェクト最大数を拡張することは
	できません。必ず最大数の範囲内で設定を行なうよう注意してください。


・オブジェクトのコアパラメーター

	オブジェクトごとに保持されている重要な設定値をコアパラメーターと呼びます。
	コアパラメーターは、32bit整数値で、以下の命令を介して読み書きが可能です。

	gpsetprm objid,prmid,value			オブジェクトのコアパラメーター設定
	gpgetprm var,objid,prmid			オブジェクトのコアパラメーター取得

	コアパラメーターのIDとして指定可能な項目は以下の通りです。

		マクロ名             | 内容
		--------------------------------------------------------------
		PRMSET_FLAG            オブジェクト登録フラグ(*)
		PRMSET_MODE            モード値
		PRMSET_ID              オブジェクトID(*)
		PRMSET_ALPHA           透明度(α値)
		PRMSET_TIMER           タイマー値
		PRMSET_MYGROUP         自身のコリジョングループ
		PRMSET_COLGROUP        衝突検出するコリジョングループ
		PRMSET_SHAPE           形状ID(*)
		PRMSET_USEGPMAT        マテリアルID
		PRMSET_USEGPPHY        物理設定ID
		PRMSET_COLILOG         コリジョンログID(*)
		PRMSET_SPRID           ソースバッファID(スプライトのみ)
		PRMSET_SPRCELID        ソースのセルID(スプライトのみ)
		PRMSET_SPRGMODE        コピーモード(スプライトのみ)

	(*)が付いたコアパラメーターは、書き込みを行なった場合、正常な動作が保証されません。


・オブジェクトのクローン

	クローン機能は、既に存在するオブジェクトと同じ設定で、新しいオブジェクトを
	生成するものです。同一の形状、パラメーター設定(物理設定を除く)を持ちますが座標や角度
	などを新しく設定することができます。
	同一の物体を複数生成する場合に、設定や読み込みを何度も行なう手間を軽減し高速化にも
	つながります。

		例:
		gpload id_model,"res/duck"	; モデル読み込み
		gpclone i, id_model		; 同じものをクローン

	※現在のバージョンでは、シーン内に存在する表示可能なオブジェクト以外は
	　クローンすることができませんので注意してください。


・実数ベクトルサポート命令

	実数ベクトルサポート命令は、小数値、ベクトル値などの情報を扱うための
	命令群です。ベクトルを変数に格納する方法としてFV値という表現が出て
	きますが、これは「変数名=1.0」のように1つの値を代入するのではなく
	「変数名(0)=X:変数名(1)=Y:変数名(2)=Z」のように実数型の配列変数として
	3つの要素(X,Y,Z)を格納しておく形式です。

	FV値を使用することで、３次元座標やベクトルなどの情報を比較的
	整理して扱うことができます。FV値を演算する命令では、同時に3つの要素に
	対して計算されるため、１つの要素ごとに計算するよりもシンプルで高速に
	処理を行なうことができます。

	fvseti fv,x,y,z					整数値からベクトル設定

		fv      = FV値が代入される変数名
		(x,y,z) = 整数値

		(x,y,z)で指定された整数値をベクトルとしてFV値に代入する。

	fvset fv,x,y,z					ベクトル設定

		fv      = FV値が代入される変数名
		(x,y,z) = 実数値

		(x,y,z)で指定された整数値をベクトルとしてFV値に代入する。

	fvadd fv,x,y,z					ベクトル加算
	fvsub fv,x,y,z					ベクトル減算
	fvmul fv,x,y,z					ベクトル乗算
	fvdiv fv,x,y,z					ベクトル除算

		fv      = FV値が代入される変数名
		(x,y,z) = 計算値(実数値)

		fvで指定された変数に格納されているFV値と、指定された
		小数値(X,Y,Z)の演算を並列で行ないます。

	fvdir fv,x,y,z					ベクトル回転

		fv      = FV値が代入される変数名
		(x,y,z) = 回転角度(実数値)

		fvで指定された変数に格納されているベクトル(FV値)を、
		小数値(X,Y,Z)で指定されたX,Y,Z角度に回転させます。

	fvmin fv,x,y,z					ベクトル最大値

		fv      = FV値が代入される変数名
		(x,y,z) = 比較値(実数値)

		fvで指定された変数に格納されているFV値と、
		小数値(X,Y,Z)を比較して、値の大きいものを代入します。
		FV値の各要素を最小値までに切り詰める場合に使用します。

	fvmax fv,x,y,z					ベクトル最小値

		fv      = FV値が代入される変数名
		(x,y,z) = 比較値(実数値)

		fvで指定された変数に格納されているFV値と、
		小数値(X,Y,Z)を比較して、値の小さいものを代入します。
		FV値の各要素を最大値までに切り詰める場合に使用します。

	fvouter fv,x,y,z				ベクトル外積

		fv      = FV値が代入される変数名
		(x,y,z) = 演算するベクトル値(実数値)

		fvで指定された変数に格納されているFV値と、
		小数値(X,Y,Z)で指定するベクトルの外積を求めて代入します。

	fvinner fv,x,y,z				ベクトル内積

		fv      = FV値が代入される変数名
		(x,y,z) = 演算するベクトル値(実数値)

		fvで指定された変数に格納されているFV値と、
		小数値(X,Y,Z)で指定するベクトルの内積を求めてfv.0に代入します。

	fvface fv,x,y,z					座標から角度を得る

		fv      = FV値が代入される変数名
		(x,y,z) = X,Y,Z座標値(実数値)

		fvで指定された変数に格納されているベクトル(FV値)を基点とする
		X,Y,Z座標から、指定されたX,Y,Z座標を直線で見るための回転角度を求めて
		代入します。

	fvunit fv						ベクトル正規化

		fv      = FV値が代入される変数名

		fvで指定された変数に格納されているベクトル(FV値)を正規化します。

	fv2str fv						ベクトルを文字列に変換

		fvで指定された変数に格納されているベクトル(FV値)を文字列に
		変換してシステム変数refstrに結果を返します。

	str2fv fv,"x,y,z"				文字列をベクトルに変換

		"x,y,z"で指定された文字列情報を「,」で区切られたX,Y,Z小数値として
		読み出し、fvで指定された変数に格納します。

	str2f fval,"val"				文字列を小数値に変換

		"val"で指定された文字列情報を小数値として読み出し、
		fvalで指定された変数に格納します。

	f2str val,fval					小数値を文字列に変換

		fvalで指定された小数値を文字列に変換して、valで指定された文字列型の
		変数に結果を返します。

	FV値が代入された変数名で、オブジェクトのパラメーターを設定したり、取得することができます。

		例:
		fvset fv, 1,5,2				; FV値を代入
		selpos GPOBJ_CAMERA			; カメラの座標設定を選択
		objsetfv fv				; カメラにFV値を設定

	上の例では、カメラの座標を(1,5,2)に設定しています。
	sel〜系の命令で設定先を選択した後、objsetfv等の命令で選択されたオブジェクトに
	アクセスすることができます。

		selpos id				X,Y,Z座標(Pos)を選択
		selang id				X,Y,Z回転(Ang)を選択
		selscale id				X,Y,Z倍率(Scale)を選択
		seldir id				X,Y,Z移動量(Dir)を選択
		selcolor id				R,G,Bカラー(Color)を選択
		selwork id				ワーク値(X,Y,Z)を選択
		selwork2 id				ワーク2値(X,Y,Z)を選択

	これらsel〜系の命令で設定先を選択した後、以下の命令で取得・設定・加算などを
	行なうことが可能です。

		objgetfv fv				選択中のMOC情報を取得
		objsetfv fv				選択中のMOC情報を設定
		objaddfv fv				選択中のMOC情報を加算

	実数ベクトルサポート命令は、必ずしもすべての人が使う必要はありません。
	中上級者の方が場面に合わせて使用の選択するといいでしょう。


・フレームレートの取得

	getreq命令により、描画時のフレームレートを取得することができます。

		getreq fps,SYSREQ_FPS

	上の例では、変数fpsにフレームレート(1秒間に画面が描画された回数)を代入します。
	フレームレートは、基本的に描画ループ(redraw 0〜redraw 1の繰り返し)で指定される
	await命令の待ち時間で決定されます。
	フレームレートを一定に保ち、画面のちらつき(ティアリング)を防止するために、
	VSYNC待ち(垂直同期待ち)を指定することができます。

		setreq SYSREQ_VSYNC,1
		gpreset

	上のように、gpresetの前でsetreq命令によりVSYNC待ちを有効にしてください。
	これにより、通常は秒間60フレームごとの動作となります。
	(その場合でも、await命令は入れるようにしてください)


・登録の限界数について

	登録するオブジェクト数や、マテリアル数が足りない場合は、別途
	setreq命令により最大数を設定する必要があります。
	以下の例は、オブジェクト最大数を4096に設定します。

		setreq SYSREQ_MAXOBJ,4096	; オブジェクト最大数を拡張する

	setreqで設定できる主な項目は以下の通りです。(カッコ内はデフォルト値)

		マクロ名              内容
		---------------------------------------------------------
		SYSREQ_MAXOBJ         オブジェクト最大数(1024)
		SYSREQ_MAXMATERIAL    マテリアル最大数(128)
		SYSREQ_VSYNC          VSync待ちを有効にする(0)
		SYSREQ_THROUGHFLAG    座標のボーダー処理フラグ(0)
		SYSREQ_FPS            フレームレート(取得のみ)

	この他に、HSP3Dishがサポートする設定項目も使用可能です。


・現バージョンでの注意点

	以下の機能は未実装です。将来のバージョンでサポートされる予定です。

	・モデルアニメーションの各種コントロール
	・コリジョンオブジェクトの詳細な接触判定
	・HGIMG3相当のイベント機能
	・ポストエフェクト(マルチパスレンダリング)に関する設定
	・日本語フォントのサポート
	・パーティクルとエミッターの詳細設定
	・マルチテクスチャ、バップマップ、ハイトマップ、LODサポート
	・マルチプラットフォーム化(iOS)


・OpenGLについて

	HGIMG4は、描画のベースシステムとしてOpenGLを使用しています。
	Windows用の3D描画ベースライブラリとしては、HGIMG3でDirectXを使用
	していましたが、今回は大きく方向を転換しています。
	OpenGLは、DirectXと同様にランタイムライブラリが必要となりますが、
	その多くはビデオドライバと同時にインストールされます。
	また、古くからサポートされていたDirectXと異なりOpenGL(3.1)は
	新しいハードウェアしかサポートされていません。
	主に2006年以降のnVidiaやAMD製のグラフィックカード及びintel製の
	グラフィックチップ搭載マザーボード等でサポートされています。
	Windows7以降の多くのシステムで、サポートされていると思われますが、
	古いパソコンでの互換性が持てない場合もあります。
	その一方で、OpenGLはiOS及びAndroidなどのスマートフォン、タブレット
	端末において標準的な描画ライブラリとして採用されています。
	HSP3Dishをベースに作成されているHGIMG4は、これらの端末上での動作も
	視野に入れて開発されており、今後Windowsでも普及が進むと考えられる
	OpenGLを全面的に採用しています。


・謝辞

DirectX9(angle)版のランタイムは、zakkiさんが製作されたものを同梱させていただきました。
zakkiさん及び、ご意見をお寄せいただいた多くの方々に感謝致します。


・著作権とライセンス

ユーザーがHGIMG4を使って作成したオリジナルのソフトウェア(実行ファイル)の権利は、それを作成したユーザーに属します。
ユーザーがHGIMG4を使って作成したオリジナルのソフトウェア(実行ファイル)を、
自由に通信、即売会、店頭などで展示、配布、販売することができます。
ライセンス料は必要ありません。
HGIMG4とそのソースコードは、HSP開発セットと同様の修正BSDライセンスが適用されます。

HGIMG4は以下のライブラリを使用して開発されています。

GamePlay3D v1.7.0
http://www.gameplay3d.org

Bullet Collision Detection and Physics Library
Advanced Micro Devices, Inc.
http://bulletphysics.org

OpenHSP
Copyright (C) 1997-2015, ONION Software/onitama.
http://hsp.tv

Disclaimer

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 
Neither the name of the Onion Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 

ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 

・ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 
・バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 
・書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、Onion Softwareの名前またはコントリビューターの名前を使用してはならない。 

本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか（過失その他の）不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した（代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない）直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 


・DirectX9版のライセンスについて

HGIMG4 DirectX9版ランタイム及び付属のDLLは、ANGLE Projectの
ソースをもとに作成されています。再配布を行なう場合は、
以下のコピーライト表示か、または「ANGLE Project_LICENSE.txt」を
同梱するようにしてください。

Copyright (C) 2002-2013 The ANGLE Project Authors. 
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

    Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

    Redistributions in binary form must reproduce the above 
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials provided
    with the distribution.

    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
    Ltd., nor the names of their contributors may be used to endorse
    or promote products derived from this software without specific
    prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.


-------------------------------------------------------------------------------
                                                HSP users manual / end of file 
-------------------------------------------------------------------------------
