// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection.java
// public interface PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far);
// }
// 
// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection_Psg2x.java
// final public class PatchCollection_Psg2x implements PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far)
// 	{
// 		i_applet.ortho(0,i_width,0,i_height,i_near,i_far+1);
// 	}
// }
// 
// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection_Psg302.java
// final public class PatchCollection_Psg302 implements PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far)
// 	{	
// 		i_applet.ortho(-i_width/2,i_width/2,-i_height/2,i_height/2,i_near,i_far+1);//3/x
// 	}
// }


import processing.core.PApplet;
import processing.core.PImage;
import processing.core.PMatrix3D;
import processing.opengl.PGraphicsOpenGL;
import jp.nyatla.nyar4psg.utils.PatchCollection;
import jp.nyatla.nyar4psg.utils.PatchCollection_Psg2x;
import jp.nyatla.nyar4psg.utils.PatchCollection_Psg302;
import jp.nyatla.nyartoolkit.core.param.NyARParam;
import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;
import jp.nyatla.nyartoolkit.markersystem.NyARSingleCameraView;
	/**
	 * この関数は、視錐台のクリップ面を設定します。この値のデフォルト値は、{@link #FRUSTUM_DEFAULT_NEAR_CLIP}と{@link #FRUSTUM_DEFAULT_FAR_CLIP}です。
	 * 設定値は、次回の{@link #setARPerspective()}から影響を及ぼします。現在の設定値にただちに影響を及ぼすものではありません。
	 * @param i_width
	 * @param i_height
	 * @param i_near
	 * NearPlaneの値を設定します。単位は[mm]です。
	 * @param i_far
	 * FarPlaneの値を設定します。単位は[mm]です。
	 */
	public void setARClipping(int i_width,int i_height,float i_near,float i_far)
	{
		this._clip_far=i_far;
		this._clip_near=i_near;
		this._ps_background_mv.reset();
		this._ps_background_mv.translate(0,0,-i_far);
		NyARDoubleMatrix44 tmp=new NyARDoubleMatrix44();
		this._view.getARParam().getPerspectiveProjectionMatrix().makeCameraFrustumRH(i_width,i_height,i_near,i_far,tmp);
		NyPsUtils.nyarMat2PsMat(tmp,this._ps_projection);
	}
	/**
	 * バージョンIDからパッチコレクションオブジェクトを返します。からコンストラクタから使います。
	 * @param i_version_id
	 * ProcessingのバージョンIDです。
	 * @return
	 */
	private static PatchCollection createPatchCollection(int i_version_id)
	{
		switch(i_version_id){
		case NyAR4PsgConfig.PV_221:
// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection.java
// public interface PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far);
// }
// 
// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection_Psg2x.java
// final public class PatchCollection_Psg2x implements PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far)
// 	{
// 		i_applet.ortho(0,i_width,0,i_height,i_near,i_far+1);
// 	}
// }
// 
// Path: src/jp/nyatla/nyar4psg/utils/PatchCollection_Psg302.java
// final public class PatchCollection_Psg302 implements PatchCollection
// {
// 	public void setBackgroundOrtho(PApplet i_applet,float i_width,float i_height,float i_near,float i_far)
// 	{	
// 		i_applet.ortho(-i_width/2,i_width/2,-i_height/2,i_height/2,i_near,i_far+1);//3/x
// 	}
// }


// Path: src/jp/nyatla/nyar4psg/SingleCameraView.java
import processing.core.PApplet;
import processing.core.PImage;
import processing.core.PMatrix3D;
import processing.opengl.PGraphicsOpenGL;
import jp.nyatla.nyar4psg.utils.PatchCollection;
import jp.nyatla.nyar4psg.utils.PatchCollection_Psg2x;
import jp.nyatla.nyar4psg.utils.PatchCollection_Psg302;
import jp.nyatla.nyartoolkit.core.param.NyARParam;
import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;
import jp.nyatla.nyartoolkit.markersystem.NyARSingleCameraView;

	/**
	 * この関数は、視錐台のクリップ面を設定します。この値のデフォルト値は、{@link #FRUSTUM_DEFAULT_NEAR_CLIP}と{@link #FRUSTUM_DEFAULT_FAR_CLIP}です。
	 * 設定値は、次回の{@link #setARPerspective()}から影響を及ぼします。現在の設定値にただちに影響を及ぼすものではありません。
	 * @param i_width
	 * @param i_height
	 * @param i_near
	 * NearPlaneの値を設定します。単位は[mm]です。
	 * @param i_far
	 * FarPlaneの値を設定します。単位は[mm]です。
	 */
	public void setARClipping(int i_width,int i_height,float i_near,float i_far)
	{
		this._clip_far=i_far;
		this._clip_near=i_near;
		this._ps_background_mv.reset();
		this._ps_background_mv.translate(0,0,-i_far);
		NyARDoubleMatrix44 tmp=new NyARDoubleMatrix44();
		this._view.getARParam().getPerspectiveProjectionMatrix().makeCameraFrustumRH(i_width,i_height,i_near,i_far,tmp);
		NyPsUtils.nyarMat2PsMat(tmp,this._ps_projection);
	}
	/**
	 * バージョンIDからパッチコレクションオブジェクトを返します。からコンストラクタから使います。
	 * @param i_version_id
	 * ProcessingのバージョンIDです。
	 * @return
	 */
	private static PatchCollection createPatchCollection(int i_version_id)
	{
		switch(i_version_id){
		case NyAR4PsgConfig.PV_221:
			return new PatchCollection_Psg2x();