15b539461dcc159bd89297443780d635ccc5e3564John Hoford/* 25b539461dcc159bd89297443780d635ccc5e3564John Hoford * Copyright (C) 2015 The Android Open Source Project 35b539461dcc159bd89297443780d635ccc5e3564John Hoford * 45b539461dcc159bd89297443780d635ccc5e3564John Hoford * Licensed under the Apache License, Version 2.0 (the "License"); 55b539461dcc159bd89297443780d635ccc5e3564John Hoford * you may not use this file except in compliance with the License. 65b539461dcc159bd89297443780d635ccc5e3564John Hoford * You may obtain a copy of the License at 75b539461dcc159bd89297443780d635ccc5e3564John Hoford * 85b539461dcc159bd89297443780d635ccc5e3564John Hoford * http://www.apache.org/licenses/LICENSE-2.0 95b539461dcc159bd89297443780d635ccc5e3564John Hoford * 105b539461dcc159bd89297443780d635ccc5e3564John Hoford * Unless required by applicable law or agreed to in writing, software 115b539461dcc159bd89297443780d635ccc5e3564John Hoford * distributed under the License is distributed on an "AS IS" BASIS, 125b539461dcc159bd89297443780d635ccc5e3564John Hoford * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135b539461dcc159bd89297443780d635ccc5e3564John Hoford * See the License for the specific language governing permissions and 145b539461dcc159bd89297443780d635ccc5e3564John Hoford * limitations under the License. 155b539461dcc159bd89297443780d635ccc5e3564John Hoford */ 165b539461dcc159bd89297443780d635ccc5e3564John Hoford 175b539461dcc159bd89297443780d635ccc5e3564John Hofordpackage com.example.android.rs.vr.engine; 185b539461dcc159bd89297443780d635ccc5e3564John Hoford 195b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.util.Log; 205b539461dcc159bd89297443780d635ccc5e3564John Hoford 215b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.io.FileReader; 225b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.io.LineNumberReader; 235b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.text.DecimalFormat; 245b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.util.Arrays; 255b539461dcc159bd89297443780d635ccc5e3564John Hoford 265b539461dcc159bd89297443780d635ccc5e3564John Hoford/** 275b539461dcc159bd89297443780d635ccc5e3564John Hoford * Simple representation triangulated surface 285b539461dcc159bd89297443780d635ccc5e3564John Hoford */ 295b539461dcc159bd89297443780d635ccc5e3564John Hofordpublic class TriData { 305b539461dcc159bd89297443780d635ccc5e3564John Hoford private static final String LOGTAG = "TriData"; 315b539461dcc159bd89297443780d635ccc5e3564John Hoford protected float[] mVert; 325b539461dcc159bd89297443780d635ccc5e3564John Hoford protected int[] mIndex; 335b539461dcc159bd89297443780d635ccc5e3564John Hoford 345b539461dcc159bd89297443780d635ccc5e3564John Hoford public TriData() { 355b539461dcc159bd89297443780d635ccc5e3564John Hoford } 365b539461dcc159bd89297443780d635ccc5e3564John Hoford 375b539461dcc159bd89297443780d635ccc5e3564John Hoford public void print() { 385b539461dcc159bd89297443780d635ccc5e3564John Hoford class Fmt extends DecimalFormat { 395b539461dcc159bd89297443780d635ccc5e3564John Hoford public Fmt() { 405b539461dcc159bd89297443780d635ccc5e3564John Hoford super(" ##0.000"); 415b539461dcc159bd89297443780d635ccc5e3564John Hoford } 425b539461dcc159bd89297443780d635ccc5e3564John Hoford 435b539461dcc159bd89297443780d635ccc5e3564John Hoford public String f(double number) { 445b539461dcc159bd89297443780d635ccc5e3564John Hoford String ret = " "+super.format(number); 455b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret.substring(ret.length() - 7); 465b539461dcc159bd89297443780d635ccc5e3564John Hoford } 475b539461dcc159bd89297443780d635ccc5e3564John Hoford } 485b539461dcc159bd89297443780d635ccc5e3564John Hoford Fmt df = new Fmt(); 495b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < mVert.length; i += 3) { 505b539461dcc159bd89297443780d635ccc5e3564John Hoford 515b539461dcc159bd89297443780d635ccc5e3564John Hoford String s = (i / 3 + "[ " + df.f(mVert[i])); 525b539461dcc159bd89297443780d635ccc5e3564John Hoford s += (", " + df.f(mVert[i + 1])); 535b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, s + ", " + df.f(mVert[i + 2]) + "]"); 545b539461dcc159bd89297443780d635ccc5e3564John Hoford } 555b539461dcc159bd89297443780d635ccc5e3564John Hoford } 565b539461dcc159bd89297443780d635ccc5e3564John Hoford 575b539461dcc159bd89297443780d635ccc5e3564John Hoford public TriData(TriData clone) { 585b539461dcc159bd89297443780d635ccc5e3564John Hoford 595b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert = Arrays.copyOf(clone.mVert, clone.mVert.length); 605b539461dcc159bd89297443780d635ccc5e3564John Hoford mIndex = Arrays.copyOf(clone.mIndex, clone.mIndex.length); 615b539461dcc159bd89297443780d635ccc5e3564John Hoford } 625b539461dcc159bd89297443780d635ccc5e3564John Hoford 635b539461dcc159bd89297443780d635ccc5e3564John Hoford public void scale(float[] s) { 645b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < mVert.length; i += 3) { 655b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i] *= s[0]; 665b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i + 1] *= s[1]; 675b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i + 2] *= s[2]; 685b539461dcc159bd89297443780d635ccc5e3564John Hoford } 695b539461dcc159bd89297443780d635ccc5e3564John Hoford } 705b539461dcc159bd89297443780d635ccc5e3564John Hoford 715b539461dcc159bd89297443780d635ccc5e3564John Hoford public void scale(double[] s) { 725b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < mVert.length; i += 3) { 735b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i] *= s[0]; 745b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i + 1] *= s[1]; 755b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[i + 2] *= s[2]; 765b539461dcc159bd89297443780d635ccc5e3564John Hoford } 775b539461dcc159bd89297443780d635ccc5e3564John Hoford } 785b539461dcc159bd89297443780d635ccc5e3564John Hoford 795b539461dcc159bd89297443780d635ccc5e3564John Hoford public void transform(Matrix m) { 805b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < mVert.length; i += 3) { 815b539461dcc159bd89297443780d635ccc5e3564John Hoford m.mult3(mVert, i, mVert, i); 825b539461dcc159bd89297443780d635ccc5e3564John Hoford } 835b539461dcc159bd89297443780d635ccc5e3564John Hoford } 845b539461dcc159bd89297443780d635ccc5e3564John Hoford 855b539461dcc159bd89297443780d635ccc5e3564John Hoford public void transform(Matrix m, TriData out) { 865b539461dcc159bd89297443780d635ccc5e3564John Hoford 875b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < mVert.length; i += 3) { 885b539461dcc159bd89297443780d635ccc5e3564John Hoford m.mult3(mVert, i, out.mVert, i); 895b539461dcc159bd89297443780d635ccc5e3564John Hoford } 905b539461dcc159bd89297443780d635ccc5e3564John Hoford } 915b539461dcc159bd89297443780d635ccc5e3564John Hoford 925b539461dcc159bd89297443780d635ccc5e3564John Hoford /** 935b539461dcc159bd89297443780d635ccc5e3564John Hoford * Read some simple triangle format used in testing 945b539461dcc159bd89297443780d635ccc5e3564John Hoford * @param fileName 955b539461dcc159bd89297443780d635ccc5e3564John Hoford */ 965b539461dcc159bd89297443780d635ccc5e3564John Hoford public void read(String fileName) { 975b539461dcc159bd89297443780d635ccc5e3564John Hoford try { 985b539461dcc159bd89297443780d635ccc5e3564John Hoford FileReader fr = new FileReader(fileName); 995b539461dcc159bd89297443780d635ccc5e3564John Hoford LineNumberReader lnr = new LineNumberReader(fr); 1005b539461dcc159bd89297443780d635ccc5e3564John Hoford int num_verts = Integer.parseInt(lnr.readLine()); 1015b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, "verts =" + num_verts); 1025b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert = new float[num_verts * 3]; 1035b539461dcc159bd89297443780d635ccc5e3564John Hoford int k = 0; 1045b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < num_verts; i++) { 1055b539461dcc159bd89297443780d635ccc5e3564John Hoford String[] s = lnr.readLine().split("\\s"); 1065b539461dcc159bd89297443780d635ccc5e3564John Hoford 1075b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int j = 0; j < s.length; j++) { 1085b539461dcc159bd89297443780d635ccc5e3564John Hoford mVert[k++] = Float.parseFloat(s[j]); 1095b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1105b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1115b539461dcc159bd89297443780d635ccc5e3564John Hoford int num_tri = Integer.parseInt(lnr.readLine()); 1125b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, "tri =" + num_tri); 1135b539461dcc159bd89297443780d635ccc5e3564John Hoford mIndex = new int[3 * num_tri]; 1145b539461dcc159bd89297443780d635ccc5e3564John Hoford k = 0; 1155b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < num_tri; i++) { 1165b539461dcc159bd89297443780d635ccc5e3564John Hoford String[] s = lnr.readLine().split("\\s"); 1175b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int j = 0; j < s.length; j++) { 1185b539461dcc159bd89297443780d635ccc5e3564John Hoford mIndex[k++] = Integer.parseInt(s[j]); 1195b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1205b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1215b539461dcc159bd89297443780d635ccc5e3564John Hoford } catch (Exception e) { 1225b539461dcc159bd89297443780d635ccc5e3564John Hoford e.printStackTrace(); 1235b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1245b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1255b539461dcc159bd89297443780d635ccc5e3564John Hoford} 126