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