/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.rs.vr.engine; import android.util.Log; import java.io.FileReader; import java.io.LineNumberReader; import java.text.DecimalFormat; import java.util.Arrays; /** * Simple representation triangulated surface */ public class TriData { private static final String LOGTAG = "TriData"; protected float[] mVert; protected int[] mIndex; public TriData() { } public void print() { class Fmt extends DecimalFormat { public Fmt() { super(" ##0.000"); } public String f(double number) { String ret = " "+super.format(number); return ret.substring(ret.length() - 7); } } Fmt df = new Fmt(); for (int i = 0; i < mVert.length; i += 3) { String s = (i / 3 + "[ " + df.f(mVert[i])); s += (", " + df.f(mVert[i + 1])); Log.v(LOGTAG, s + ", " + df.f(mVert[i + 2]) + "]"); } } public TriData(TriData clone) { mVert = Arrays.copyOf(clone.mVert, clone.mVert.length); mIndex = Arrays.copyOf(clone.mIndex, clone.mIndex.length); } public void scale(float[] s) { for (int i = 0; i < mVert.length; i += 3) { mVert[i] *= s[0]; mVert[i + 1] *= s[1]; mVert[i + 2] *= s[2]; } } public void scale(double[] s) { for (int i = 0; i < mVert.length; i += 3) { mVert[i] *= s[0]; mVert[i + 1] *= s[1]; mVert[i + 2] *= s[2]; } } public void transform(Matrix m) { for (int i = 0; i < mVert.length; i += 3) { m.mult3(mVert, i, mVert, i); } } public void transform(Matrix m, TriData out) { for (int i = 0; i < mVert.length; i += 3) { m.mult3(mVert, i, out.mVert, i); } } /** * Read some simple triangle format used in testing * @param fileName */ public void read(String fileName) { try { FileReader fr = new FileReader(fileName); LineNumberReader lnr = new LineNumberReader(fr); int num_verts = Integer.parseInt(lnr.readLine()); Log.v(LOGTAG, "verts =" + num_verts); mVert = new float[num_verts * 3]; int k = 0; for (int i = 0; i < num_verts; i++) { String[] s = lnr.readLine().split("\\s"); for (int j = 0; j < s.length; j++) { mVert[k++] = Float.parseFloat(s[j]); } } int num_tri = Integer.parseInt(lnr.readLine()); Log.v(LOGTAG, "tri =" + num_tri); mIndex = new int[3 * num_tri]; k = 0; for (int i = 0; i < num_tri; i++) { String[] s = lnr.readLine().split("\\s"); for (int j = 0; j < s.length; j++) { mIndex[k++] = Integer.parseInt(s[j]); } } } catch (Exception e) { e.printStackTrace(); } } }