Revision e7daa161
Added by Leszek Koltunski about 4 years ago
| src/main/java/org/distorted/objectlib/main/TwistyObject.java | ||
|---|---|---|
| 82 | 82 |
public static final float SQ5 = (float)Math.sqrt(5); |
| 83 | 83 |
public static final float SQ6 = (float)Math.sqrt(6); |
| 84 | 84 |
|
| 85 |
private static final float NODE_RATIO = 1.60f; |
|
| 86 | 85 |
private static final float MAX_SIZE_CHANGE = 1.35f; |
| 87 | 86 |
private static final float MIN_SIZE_CHANGE = 0.75f; |
| 88 | 87 |
|
| ... | ... | |
| 103 | 102 |
private final Static3D[] mAxis; |
| 104 | 103 |
private final float[][] mCuts; |
| 105 | 104 |
private final int[] mNumCuts; |
| 106 |
private final int mNodeSize;
|
|
| 105 |
private final int mNodeW, mNodeH;
|
|
| 107 | 106 |
private final float[][] mOrigPos; |
| 108 | 107 |
private final Static3D mNodeScale; |
| 109 | 108 |
private final Static4D mQuat; |
| 110 | 109 |
private final int[] mNumLayers; |
| 111 |
private final int mRealSize;
|
|
| 110 |
private final float mRealSize;
|
|
| 112 | 111 |
private final DistortedEffects mEffects; |
| 113 | 112 |
private final VertexEffectRotate mRotateEffect; |
| 114 | 113 |
private final Dynamic1D mRotationAngle; |
| ... | ... | |
| 139 | 138 |
|
| 140 | 139 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 141 | 140 |
|
| 142 |
TwistyObject(int[] numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture nodeTexture,
|
|
| 143 |
MeshSquare nodeMesh, DistortedEffects nodeEffects, Resources res, int screenWidth)
|
|
| 141 |
TwistyObject(int[] numLayers, float realSize, Static4D quat, Static3D move, DistortedTexture nodeTexture,
|
|
| 142 |
MeshSquare nodeMesh, DistortedEffects nodeEffects, Resources res, int surfaceW, int surfaceH)
|
|
| 144 | 143 |
{
|
| 145 | 144 |
super(nodeTexture,nodeEffects,nodeMesh); |
| 146 | 145 |
|
| 147 |
mNodeSize = screenWidth; |
|
| 146 |
mNodeW = surfaceW; |
|
| 147 |
mNodeH = surfaceH; |
|
| 148 | 148 |
|
| 149 |
resizeFBO(mNodeSize, (int)(NODE_RATIO*mNodeSize));
|
|
| 149 |
resizeFBO(mNodeW,mNodeH);
|
|
| 150 | 150 |
|
| 151 | 151 |
mNumLayers = numLayers; |
| 152 | 152 |
mRealSize = realSize; |
| 153 | 153 |
mOrigPos = getCubitPositions(mNumLayers); |
| 154 | 154 |
mAxis = getRotationAxis(); |
| 155 | 155 |
mInitScreenRatio = getScreenRatio(); |
| 156 |
mObjectScreenRatio = 1.0f; |
|
| 157 | 156 |
mNumCubitFaces = getNumCubitFaces(); |
| 158 | 157 |
mSolvedFunctionIndex = getSolvedFunctionIndex(); |
| 159 | 158 |
|
| ... | ... | |
| 190 | 189 |
|
| 191 | 190 |
mQuatDebug = new int[NUM_CUBITS]; |
| 192 | 191 |
|
| 193 |
if( mObjectScreenRatio>MAX_SIZE_CHANGE) mObjectScreenRatio = MAX_SIZE_CHANGE; |
|
| 194 |
if( mObjectScreenRatio<MIN_SIZE_CHANGE) mObjectScreenRatio = MIN_SIZE_CHANGE; |
|
| 195 |
|
|
| 196 |
mNodeScale= new Static3D(screenWidth,NODE_RATIO*screenWidth,screenWidth); |
|
| 192 |
mNodeScale= new Static3D(surfaceW,surfaceH,surfaceW); |
|
| 197 | 193 |
mQuat = quat; |
| 198 | 194 |
|
| 199 | 195 |
mRotationAngle= new Dynamic1D(); |
| ... | ... | |
| 204 | 200 |
mRotationAngleMiddle = new Static1D(0); |
| 205 | 201 |
mRotationAngleFinal = new Static1D(0); |
| 206 | 202 |
|
| 207 |
float scale = mObjectScreenRatio*mInitScreenRatio*mNodeSize/mRealSize; |
|
| 208 |
mObjectScale = new Static3D(scale,scale,scale); |
|
| 203 |
mObjectScale = new Static3D(1,1,1); |
|
| 204 |
setObjectRatioNow(1.0f); |
|
| 205 |
|
|
| 209 | 206 |
MatrixEffectScale scaleEffect = new MatrixEffectScale(mObjectScale); |
| 210 | 207 |
MatrixEffectQuaternion quatEffect = new MatrixEffectQuaternion(quat, CENTER); |
| 211 | 208 |
MatrixEffectMove moveEffect = new MatrixEffectMove(move); |
| ... | ... | |
| 247 | 244 |
|
| 248 | 245 |
float fov = getFOV(); |
| 249 | 246 |
double halfFOV = fov * (Math.PI/360); |
| 250 |
mCameraDist = 0.5f*NODE_RATIO / (float)Math.tan(halfFOV);
|
|
| 247 |
mCameraDist = (0.5f*mNodeH) / ((float)Math.tan(halfFOV)*mNodeW);
|
|
| 251 | 248 |
|
| 252 | 249 |
setProjection( fov, 0.1f); |
| 253 | 250 |
} |
| ... | ... | |
| 1098 | 1095 |
|
| 1099 | 1096 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 1100 | 1097 |
|
| 1101 |
void recomputeScaleFactor(int scrWidth)
|
|
| 1098 |
void recomputeScaleFactor(int surfaceW, int surfaceH)
|
|
| 1102 | 1099 |
{
|
| 1103 |
mNodeScale.set(scrWidth,NODE_RATIO*scrWidth,scrWidth);
|
|
| 1100 |
mNodeScale.set(surfaceW,surfaceH,surfaceW);
|
|
| 1104 | 1101 |
} |
| 1105 | 1102 |
|
| 1106 | 1103 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 1146 | 1143 |
void setObjectRatioNow(float sc) |
| 1147 | 1144 |
{
|
| 1148 | 1145 |
mObjectScreenRatio = sc; |
| 1149 |
float scale = mObjectScreenRatio*mInitScreenRatio*mNodeSize/mRealSize; |
|
| 1146 |
int nodeMinSize = Math.min(mNodeW,mNodeH); |
|
| 1147 |
float scale = mObjectScreenRatio*mInitScreenRatio*nodeMinSize/mRealSize; |
|
| 1150 | 1148 |
mObjectScale.set(scale,scale,scale); |
| 1151 | 1149 |
} |
| 1152 | 1150 |
|
| ... | ... | |
| 1159 | 1157 |
if( mObjectScreenRatio>MAX_SIZE_CHANGE) mObjectScreenRatio = MAX_SIZE_CHANGE; |
| 1160 | 1158 |
if( mObjectScreenRatio<MIN_SIZE_CHANGE) mObjectScreenRatio = MIN_SIZE_CHANGE; |
| 1161 | 1159 |
|
| 1162 |
float scale = mObjectScreenRatio*mInitScreenRatio*mNodeSize/mRealSize; |
|
| 1163 |
mObjectScale.set(scale,scale,scale); |
|
| 1160 |
setObjectRatioNow(mObjectScreenRatio); |
|
| 1164 | 1161 |
} |
| 1165 | 1162 |
|
| 1166 | 1163 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 1250 | 1247 |
|
| 1251 | 1248 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 1252 | 1249 |
|
| 1253 |
public int getNodeSize()
|
|
| 1250 |
public int getNodeWidth()
|
|
| 1254 | 1251 |
{
|
| 1255 |
return mNodeSize;
|
|
| 1252 |
return mNodeW;
|
|
| 1256 | 1253 |
} |
| 1257 | 1254 |
|
| 1258 | 1255 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
- remove the retarded NODE_RATIO from TwistyObject
- more correctly estimate Cuboid's 'realSize' as an average of their 3 sizes.