Develop and Download Open Source Software

Browse Subversion Repository

Contents of /nyar4psg/trunk/src/src/jp/nyatla/nyar4psg/NyARPsgBaseClass.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1120 - (show annotations) (download) (as text)
Tue Dec 11 14:15:54 2012 UTC (11 years, 4 months ago) by nyatla
Original Path: nyar4psg/trunk/for2.x/src/jp/nyatla/nyar4psg/NyARPsgBaseClass.java
File MIME type: text/x-java
File size: 11070 byte(s)
processing 2.0 support
1 /*
2 * PROJECT: NyARToolkit for proce55ing.
3 * --------------------------------------------------------------------------------
4 * The MIT License
5 * Copyright (c) 2008 nyatla
6 * airmail(at)ebony.plala.or.jp
7 * http://nyatla.jp/nyartoolkit/
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a copy
10 * of this software and associated documentation files (the "Software"), to deal
11 * in the Software without restriction, including without limitation the rights
12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 * copies of the Software, and to permit persons to whom the Software is
14 * furnished to do so, subject to the following conditions:
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 *
26 */
27
28 package jp.nyatla.nyar4psg;
29
30
31
32 import processing.core.*;
33 import processing.opengl.*;
34 import jp.nyatla.nyartoolkit.core.*;
35 import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;
36
37
38
39 /**
40 * ���������������������NyARToolkit for Processing������������������������������
41 * ARToolkit���������������������������������������������������������������������������������������������
42 */
43 public abstract class NyARPsgBaseClass
44 {
45 /**
46 * near���������������������������������������������
47 */
48 public final float FRUSTUM_DEFAULT_NEAR_CLIP=100;
49 /**
50 * far���������������������������������������������
51 */
52 public final float FRUSTUM_DEFAULT_FAR_CLIP=100000;
53
54 /**
55 * ���������������������������������
56 * NyAR4psg������������������������������������������
57 */
58 public final static String VERSION = "NyAR4psg/1.3.1;"+NyARVersion.VERSION_STRING;
59 /**���������������Applet������������������������������*/
60 protected PApplet _ref_papplet;
61 /**���������������������������������ModelviewMatrix���������*/
62 protected final PMatrix3D _ps_background_mv=new PMatrix3D();
63
64 /**���ARToolkit���������������������������������������������*/
65 protected NyAR4PsgConfig _config;
66
67
68
69 private float _clip_far;
70 private float _clip_near;
71
72 /**
73 * ������������������������������
74 */
75 protected NyARPsgBaseClass()
76 {
77 }
78 protected void initInstance(PApplet parent,NyAR4PsgConfig i_config) throws NyARException
79 {
80 this._ref_papplet=parent;
81 this._config=i_config;
82 //Processing���projectionMatrix���������������Frustum���������
83 this.setARClipping(FRUSTUM_DEFAULT_NEAR_CLIP,FRUSTUM_DEFAULT_FAR_CLIP);
84 return;
85 }
86 /**
87 * [readonly]������������������Processing���������ProjectionMatrix������������������������������
88 * @return
89 */
90 public abstract PMatrix3D getProjectionMatrix();
91 /**
92 * ������������������ProjectionMatrix���i_buf������������������������������
93 * @return
94 * ProjectionMatrix���������
95 */
96 public abstract PMatrix3D getProjectionMatrix(PMatrix3D i_buf);
97 /**
98 * ������������������PImage������������������������������������������������PImage���farclip���+1������������������������������
99 * <div>���������������������������������������������������</div>
100 * <hr/>
101 * :<br/>
102 * PMatrix3D om=new PMatrix3D(((PGraphics3D)g).projection);<br/>
103 * setBackgroundOrtho(img.width,img.height)<br/>
104 * pushMatrix();<br/>
105 * resetMatrix();<br/>
106 * translate(0,0,-(far*0.99f));<br/>
107 * image(img,-width/2,-height/2);<br/>
108 * popMatrix();<br/>
109 * setPerspective(om);<br/>
110 * :<br/>
111 * <hr/>
112 * ������������������PrjectionMatrix���ModelViewMatrix���������������������������������������������������������������������
113 * ���������������������������������������������������������������������
114 * @param i_img
115 * ���������������������������������
116 */
117 public void drawBackground(PImage i_img)
118 {
119 PApplet pa=this._ref_papplet;
120 PMatrix3D om=new PMatrix3D(((PGraphics3D)pa.g).projection);
121 this.setBackgroundOrtho(i_img.width,i_img.height);
122 pa.pushMatrix();
123 pa.setMatrix(this._ps_background_mv);
124 pa.image(i_img,-i_img.width/2,-i_img.height/2);
125 pa.popMatrix();
126 //���������������
127 this.setPerspective(om);
128 }
129
130 /**
131 * ������������������������������������������������������������������������������������������������������{@link #FRUSTUM_DEFAULT_NEAR_CLIP}���{@link #FRUSTUM_DEFAULT_FAR_CLIP}���������
132 * ������������������������{@link #setARPerspective()}������������������������������������������������������������������������������������������������������������������
133 * @param i_near
134 * NearPlane������������������������������������[mm]���������
135 * @param i_far
136 * FarPlane������������������������������������[mm]���������
137 */
138 public void setARClipping(float i_near,float i_far)
139 {
140 this._clip_far=i_far;
141 this._clip_near=i_near;
142 this._ps_background_mv.reset();
143 this._ps_background_mv.translate(0,0,-i_far);
144 }
145 /**
146 * ������������������������������������Processing������������������������
147 * ������������������0,0���������������������������
148 * near���������������������{@link #setARClipping}������������������������������������������������������
149 *���far���������������������{@link #setARClipping}���������������������������������+1���������������������
150 * <div>���������������������������������������������������</div>
151 * <hr/>
152 * :<br/>
153 * //for 1.x<br/>
154 * ortho(-i_width/2, i_width/2,-i_height/2,i_height/2,near,far+1);<br/>
155 * //for 2.x<br/>
156 * ortho(0,i_width,0,i_height,near,far+1);<br/>
157 * :<br/>
158 * <hr/>
159 * @param i_width
160 * ������������������������
161 * @param i_height
162 * ���������������������������
163 */
164 public void setBackgroundOrtho(int i_width,int i_height)
165 {
166 this._ref_papplet.ortho(0,i_width,0,i_height,this._clip_near,this._clip_far+1);
167 }
168 /**
169 * ������������������ARToolKit���������ProjectionMatrix���Processing������������������������
170 * ���������������������������Processing���ProjectionMatrix���ARToolKit���������������������������������������������������������������������������������������������������������������������
171 * Processing������������������Frustum���������������������{@link PGraphics3D#perspective()}������������������
172 * Frustum���������������������������{@link PGraphics3D#perspective()}���{@link PGraphics3D#perspective()}���������������������������������
173 * <p>
174 * Version 1.1.0���������������projection matrix���������������������������������������projection matrix���������������������{@link PGraphics3D#projection}���������������������������������������
175 * </p>
176 */
177 public void setARPerspective()
178 {
179 this.setPerspective(this.getProjectionMatrix());
180 }
181 /**
182 * ������������������ProjectionMatrix���Processing������������������������
183 * @param i_projection
184 * ������������ProjectionMatrix���������������������
185 * <p>
186 * Processing/1.3������������������{@link PApplet#matrixMode}���������������������������������������������������������
187 * ������������������������frustum������
188 * </p>
189 * <p>
190 * Version 1.1.0���������������projection matrix���������������������������������������projection matrix���������������������{@link PGraphics3D#projection}���������������������������������������
191 * </p>
192 */
193 public void setPerspective(PMatrix3D i_projection)
194 {
195 //Projection���frustum������������������
196 float far=i_projection.m23/(i_projection.m22+1);
197 float near=i_projection.m23/(i_projection.m22-1);
198 this._ref_papplet.frustum(
199 (i_projection.m02-1)*near/i_projection.m00,
200 (i_projection.m02+1)*near/i_projection.m00,
201 (i_projection.m12-1)*near/i_projection.m11,
202 (i_projection.m12+1)*near/i_projection.m11,
203 near,far);
204 return;
205 }
206
207 protected static void PMatrix2GLProjection(PMatrix3D i_in,float[] o_out)
208 {
209 o_out[ 0]=i_in.m00;
210 o_out[ 1]=i_in.m10;
211 o_out[ 2]=i_in.m20;
212 o_out[ 3]=i_in.m30;
213 o_out[ 4]=i_in.m01;
214 o_out[ 5]=i_in.m11;
215 o_out[ 6]=i_in.m21;
216 o_out[ 7]=i_in.m31;
217 o_out[ 8]=i_in.m02;
218 o_out[ 9]=i_in.m12;
219 o_out[10]=i_in.m22;
220 o_out[11]=i_in.m32;
221 o_out[12]=i_in.m03;
222 o_out[13]=i_in.m13;
223 o_out[14]=i_in.m23;
224 o_out[15]=i_in.m33;
225 }
226 protected static void PMatrix2GLProjection(PMatrix3D i_in,double[] o_out)
227 {
228 o_out[ 0]=i_in.m00;
229 o_out[ 1]=i_in.m10;
230 o_out[ 2]=i_in.m20;
231 o_out[ 3]=i_in.m30;
232 o_out[ 4]=i_in.m01;
233 o_out[ 5]=i_in.m11;
234 o_out[ 6]=i_in.m21;
235 o_out[ 7]=i_in.m31;
236 o_out[ 8]=i_in.m02;
237 o_out[ 9]=i_in.m12;
238 o_out[10]=i_in.m22;
239 o_out[11]=i_in.m32;
240 o_out[12]=i_in.m03;
241 o_out[13]=i_in.m13;
242 o_out[14]=i_in.m23;
243 o_out[15]=i_in.m33;
244 }
245 protected static void nyarMat2PsMat(NyARDoubleMatrix44 i_src,PMatrix3D i_dst)
246 {
247 i_dst.m00=(float)(i_src.m00);
248 i_dst.m01=(float)(i_src.m01);
249 i_dst.m02=(float)(i_src.m02);
250 i_dst.m03=(float)(i_src.m03);
251 i_dst.m10=(float)(i_src.m10);
252 i_dst.m11=(float)(i_src.m11);
253 i_dst.m12=(float)(i_src.m12);
254 i_dst.m13=(float)(i_src.m13);
255 i_dst.m20=(float)(i_src.m20);
256 i_dst.m21=(float)(i_src.m21);
257 i_dst.m22=(float)(i_src.m22);
258 i_dst.m23=(float)(i_src.m23);
259 i_dst.m30=(float)(i_src.m30);
260 i_dst.m31=(float)(i_src.m31);
261 i_dst.m32=(float)(i_src.m32);
262 i_dst.m33=(float)(i_src.m33);
263 }
264
265 /**
266 * ���������������������������
267 */
268 private final static PMatrix3D _lh_mat=new PMatrix3D(
269 -1,0,0,0,
270 0,1,0,0,
271 0,0,1,0,
272 0,0,0,1);
273
274 /**
275 * ���������������Processing���Matrix���������������������
276 * @param i_src
277 * @param i_mode
278 * @param o_pmatrix
279 */
280 protected static void matResult2PMatrix3D(NyARDoubleMatrix44 i_src,int i_mode,PMatrix3D o_pmatrix)
281 {
282 o_pmatrix.m00 = (float)i_src.m00;
283 o_pmatrix.m01 = (float)i_src.m01;
284 o_pmatrix.m02 = (float)i_src.m02;
285 o_pmatrix.m03 = (float)i_src.m03;
286 o_pmatrix.m10 = (float)i_src.m10;//mirror
287 o_pmatrix.m11 = (float)i_src.m11;//mirror
288 o_pmatrix.m12 = (float)i_src.m12;//mirror
289 o_pmatrix.m13 = (float)i_src.m13;//mirror
290 o_pmatrix.m20 = (float)-i_src.m20;
291 o_pmatrix.m21 = (float)-i_src.m21;
292 o_pmatrix.m22 = (float)-i_src.m22;
293 o_pmatrix.m23 = (float)-i_src.m23;
294 o_pmatrix.m30 = 0.0f;
295 o_pmatrix.m31 = 0.0f;
296 o_pmatrix.m32 = 0.0f;
297 o_pmatrix.m33 = 1.0f;
298 if(i_mode==NyAR4PsgConfig.CS_LEFT_HAND)
299 {
300 o_pmatrix.apply(_lh_mat);
301 }
302 }
303 protected static void matResult2GLArray(NyARDoubleMatrix44 i_src,double[] o_gl_array)
304 {
305 o_gl_array[0 + 0 * 4] = i_src.m00;
306 o_gl_array[0 + 1 * 4] = i_src.m01;
307 o_gl_array[0 + 2 * 4] = i_src.m02;
308 o_gl_array[0 + 3 * 4] = i_src.m03;
309 o_gl_array[1 + 0 * 4] = -i_src.m10;
310 o_gl_array[1 + 1 * 4] = -i_src.m11;
311 o_gl_array[1 + 2 * 4] = -i_src.m12;
312 o_gl_array[1 + 3 * 4] = -i_src.m13;
313 o_gl_array[2 + 0 * 4] = -i_src.m20;
314 o_gl_array[2 + 1 * 4] = -i_src.m21;
315 o_gl_array[2 + 2 * 4] = -i_src.m22;
316 o_gl_array[2 + 3 * 4] = -i_src.m23;
317 o_gl_array[3 + 0 * 4] = 0.0;
318 o_gl_array[3 + 1 * 4] = 0.0;
319 o_gl_array[3 + 2 * 4] = 0.0;
320 o_gl_array[3 + 3 * 4] = 1.0;
321 }
322
323 }
324

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26