152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/* 252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * you may not use this file except in compliance with the License. 652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * You may obtain a copy of the License at 752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 1052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * See the License for the specific language governing permissions and 1452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * limitations under the License. 1552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */ 1652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 1752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpackage com.example.android.apis.graphics.kube; 1852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 1952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/** 2052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 2152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * A 4x4 float matrix 2252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 2352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */ 2452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpublic class M4 { 2552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public float[][] m = new float[4][4]; 2652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 2752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public M4() { 2852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 2952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 3052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public M4(M4 other) { 3152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int i = 0; i < 4; i++) { 3252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int j = 0; j < 4; j++) { 3352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project m[i][j] = other.m[i][j]; 3452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 3552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 3652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 3752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 3852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void multiply(GLVertex src, GLVertex dest) { 3952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project dest.x = src.x * m[0][0] + src.y * m[1][0] + src.z * m[2][0] + m[3][0]; 4052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project dest.y = src.x * m[0][1] + src.y * m[1][1] + src.z * m[2][1] + m[3][1]; 4152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project dest.z = src.x * m[0][2] + src.y * m[1][2] + src.z * m[2][2] + m[3][2]; 4252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 4352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 4452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public M4 multiply(M4 other) { 4552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project M4 result = new M4(); 4652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project float[][] m1 = m; 4752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project float[][] m2 = other.m; 4852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 4952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int i = 0; i < 4; i++) { 5052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int j = 0; j < 4; j++) { 5152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project result.m[i][j] = m1[i][0]*m2[0][j] + m1[i][1]*m2[1][j] + m1[i][2]*m2[2][j] + m1[i][3]*m2[3][j]; 5252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 5352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 5452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 5552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return result; 5652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 5752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 5852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void setIdentity() { 5952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int i = 0; i < 4; i++) { 6052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int j = 0; j < 4; j++) { 6152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project m[i][j] = (i == j ? 1f : 0f); 6252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 6352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 6452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 6552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 6652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project @Override 6752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public String toString() { 6852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project StringBuilder builder = new StringBuilder("[ "); 6952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int i = 0; i < 4; i++) { 7052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project for (int j = 0; j < 4; j++) { 7152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project builder.append(m[i][j]); 7252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project builder.append(" "); 7352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 7452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project if (i < 2) 7552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project builder.append("\n "); 7652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 7752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project builder.append(" ]"); 7852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return builder.toString(); 7952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 8052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project} 81