Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void transform(int transformation, int[] groups, int xOffset, int yOffset, int zOffset) {
- int count = groups.length;
- if (transformation == FrameConstants.CENTROID_TRANSFORMATION) {
- int vertices = 0;
- centroidX = 0;
- centroidY = 0;
- centroidZ = 0;
- for (int index = 0; index < count; index++) {
- int group = groups[index];
- if (group < vertexGroups.length) {
- for (int vertex : vertexGroups[group]) {
- centroidX += vertexXCoordinate[vertex];
- centroidY += vertexYCoordinate[vertex];
- centroidZ += vertexZCoordinate[vertex];
- vertices++;
- }
- }
- }
- if (vertices > 0) {
- centroidX = centroidX / vertices + xOffset;
- centroidY = centroidY / vertices + yOffset;
- centroidZ = centroidZ / vertices + zOffset;
- } else {
- centroidX = xOffset;
- centroidY = yOffset;
- centroidZ = zOffset;
- }
- } else if (transformation == FrameConstants.POSITION_TRANSFORMATION) {
- for (int index = 0; index < count; index++) {
- int group = groups[index];
- if (group < vertexGroups.length) {
- for (int vertex : vertexGroups[group]) {
- vertexXCoordinate[vertex] += xOffset;
- vertexYCoordinate[vertex] += yOffset;
- vertexZCoordinate[vertex] += zOffset;
- }
- }
- }
- } else if (transformation == FrameConstants.ROTATION_TRANSFORMATION) {
- for (int group : groups) {
- if (group < vertexGroups.length) {
- for (int vertex : vertexGroups[group]) {
- vertexXCoordinate[vertex] -= centroidX;
- vertexYCoordinate[vertex] -= centroidY;
- vertexZCoordinate[vertex] -= centroidZ;
- if (zOffset != 0) {
- int sin = SINE[zOffset];
- int cos = COSINE[zOffset];
- int x = vertexYCoordinate[vertex] * sin + vertexXCoordinate[vertex] * cos >> 16;
- vertexYCoordinate[vertex] = vertexYCoordinate[vertex] * cos - vertexXCoordinate[vertex] * sin >> 16;
- vertexXCoordinate[vertex] = x;
- }
- if (xOffset != 0) {
- int sin = SINE[xOffset];
- int cos = COSINE[xOffset];
- int y = vertexYCoordinate[vertex] * cos - vertexZCoordinate[vertex] * sin >> 16;
- vertexZCoordinate[vertex] = vertexYCoordinate[vertex] * sin + vertexZCoordinate[vertex] * cos >> 16;
- vertexYCoordinate[vertex] = y;
- }
- if (yOffset != 0) {
- int sin = SINE[yOffset];
- int cos = COSINE[yOffset];
- int x = vertexZCoordinate[vertex] * sin + vertexXCoordinate[vertex] * cos >> 16;
- vertexZCoordinate[vertex] = vertexZCoordinate[vertex] * cos - vertexXCoordinate[vertex] * sin >> 16;
- vertexXCoordinate[vertex] = x;
- }
- vertexXCoordinate[vertex] += centroidX;
- vertexYCoordinate[vertex] += centroidY;
- vertexZCoordinate[vertex] += centroidZ;
- }
- }
- }
- return;
- } else if (transformation == FrameConstants.SCALE_TRANSFORMATION) {
- for (int index = 0; index < count; index++) {
- int group = groups[index];
- if (group < vertexGroups.length) {
- for (int vertex : vertexGroups[group]) {
- vertexXCoordinate[vertex] -= centroidX;
- vertexYCoordinate[vertex] -= centroidY;
- vertexZCoordinate[vertex] -= centroidZ;
- vertexXCoordinate[vertex] = vertexXCoordinate[vertex] * xOffset >> 7;
- vertexYCoordinate[vertex] = vertexYCoordinate[vertex] * yOffset >> 7;
- vertexZCoordinate[vertex] = vertexZCoordinate[vertex] * zOffset >> 7;
- vertexXCoordinate[vertex] += centroidX;
- vertexYCoordinate[vertex] += centroidY;
- vertexZCoordinate[vertex] += centroidZ;
- }
- }
- }
- }
- if (transformation == FrameConstants.ALPHA_TRANSFORMATION && faceGroups != null && faceAlphas != null) {
- for (int index = 0; index < count; index++) {
- int group = groups[index];
- if (group < faceGroups.length) {
- for (int face : faceGroups[group]) {
- faceAlphas[face] += xOffset * 8;
- if (faceAlphas[face] < 0)
- faceAlphas[face] = 0;
- if (faceAlphas[face] > 255)
- faceAlphas[face] = 255;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement