Revision ab31cf6f
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objectlib/main/Movement.java | ||
---|---|---|
41 | 41 |
private final float[] mPoint, mCamera, mTouch; |
42 | 42 |
private final float[] mPoint2D, mMove2D; |
43 | 43 |
private final int[] mEnabledRotAxis; |
44 |
private final float mDistanceCenterFace3D; |
|
44 |
private final float[] mDistanceCenterFace3D;
|
|
45 | 45 |
private final Static3D[] mFaceAxis; |
46 | 46 |
|
47 | 47 |
private int mLastTouchedFace; |
... | ... | |
61 | 61 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
62 | 62 |
|
63 | 63 |
Movement(Static3D[] rotAxis, Static3D[] faceAxis, float[][] cuts, boolean[][] rotatable, |
64 |
float distance3D, float size, int type, int[][][] enabled) |
|
64 |
float[] distance3D, float size, int type, int[][][] enabled)
|
|
65 | 65 |
{ |
66 | 66 |
mPoint = new float[3]; |
67 | 67 |
mCamera= new float[3]; |
... | ... | |
82 | 82 |
|
83 | 83 |
computeCastedAxis(rotAxis); |
84 | 84 |
computeBorders(cuts,rotatable,size); |
85 |
computeLinear(distance3D,rotAxis,faceAxis);
|
|
85 |
computeLinear(rotAxis,faceAxis); |
|
86 | 86 |
} |
87 | 87 |
|
88 | 88 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
180 | 180 |
{ |
181 | 181 |
Static3D faceAxis = mFaceAxis[index]; |
182 | 182 |
float castCameraOnAxis = mCamera[0]*faceAxis.get0() + mCamera[1]*faceAxis.get1() + mCamera[2]*faceAxis.get2(); |
183 |
return castCameraOnAxis > mDistanceCenterFace3D; |
|
183 |
return castCameraOnAxis > mDistanceCenterFace3D[index];
|
|
184 | 184 |
} |
185 | 185 |
|
186 | 186 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
207 | 207 |
if( denom != 0.0f ) |
208 | 208 |
{ |
209 | 209 |
float axisCam = a0*mCamera[0] + a1*mCamera[1] + a2*mCamera[2]; |
210 |
float alpha = (mDistanceCenterFace3D-axisCam)/denom; |
|
210 |
float alpha = (mDistanceCenterFace3D[index]-axisCam)/denom;
|
|
211 | 211 |
|
212 | 212 |
output[0] = mCamera[0] + d0*alpha; |
213 | 213 |
output[1] = mCamera[1] + d1*alpha; |
... | ... | |
356 | 356 |
// the 3D 'cuts' to translate it from 3D (i.e. with respect to the rotAxis) to 2D in-face (i.e. with |
357 | 357 |
// respect to the 2D rotAxis cast into a particular face) |
358 | 358 |
|
359 |
private void computeLinear(float distance3D, Static3D[] rotAxis, Static3D[] faceAxis)
|
|
359 |
private void computeLinear(Static3D[] rotAxis, Static3D[] faceAxis) |
|
360 | 360 |
{ |
361 | 361 |
int numFaces = faceAxis.length; |
362 | 362 |
int numRot = rotAxis.length; |
... | ... | |
373 | 373 |
{ |
374 | 374 |
float coeff = (float)Math.sqrt(1/(mA[i][j]*mA[i][j]) -1); |
375 | 375 |
int sign = computeSign(faceAxis[i],rotAxis[j]); |
376 |
mB[i][j] = sign*distance3D*coeff;
|
|
376 |
mB[i][j] = sign*coeff*mDistanceCenterFace3D[i];
|
|
377 | 377 |
} |
378 | 378 |
else mB[i][j] = 0.0f; |
379 | 379 |
} |
Also available in: Unified diff
Cuboids: movement.