diff options
Diffstat (limited to 'src/com/android/phasebeam/PhaseBeamRS.java')
-rw-r--r-- | src/com/android/phasebeam/PhaseBeamRS.java | 219 |
1 files changed, 71 insertions, 148 deletions
diff --git a/src/com/android/phasebeam/PhaseBeamRS.java b/src/com/android/phasebeam/PhaseBeamRS.java index 547f5f5..647f145 100644 --- a/src/com/android/phasebeam/PhaseBeamRS.java +++ b/src/com/android/phasebeam/PhaseBeamRS.java @@ -22,9 +22,15 @@ import android.renderscript.Mesh.Primitive; import android.graphics.Color; import android.renderscript.Float3; import android.renderscript.Float4; +import java.io.InputStreamReader; +import java.io.InputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.ArrayList; +import android.util.Log; public class PhaseBeamRS { - + public static String LOG_TAG = "PhaseBeam"; public static final int DOT_COUNT = 28; private Resources mRes; private RenderScriptGL mRS; @@ -33,24 +39,24 @@ public class PhaseBeamRS { int mWidth; private ScriptField_VpConsts mPvConsts; - private Allocation dotAllocation; - private Allocation beamAllocation; + private Allocation mDotAllocation; + private Allocation mBeamAllocation; - private ScriptField_Particle dotParticles; - private Mesh dotMesh; + private ScriptField_Particle mDotParticles; + private Mesh mDotMesh; - private ScriptField_Particle beamParticles; - private Mesh beamMesh; + private ScriptField_Particle mBeamParticles; + private Mesh mBeamMesh; - private ScriptField_VertexColor_s vertexColors; + private ScriptField_VertexColor_s mVertexColors; - private int densityDPI; + private int mDensityDPI; - boolean inited = false; + boolean mInited = false; public void init(int dpi, RenderScriptGL rs, Resources res, int width, int height) { - if (!inited) { - densityDPI = dpi; + if (!mInited) { + mDensityDPI = dpi; mRS = rs; mRes = res; @@ -58,23 +64,23 @@ public class PhaseBeamRS { mWidth = width; mHeight = height; - dotParticles = new ScriptField_Particle(mRS, DOT_COUNT); + mDotParticles = new ScriptField_Particle(mRS, DOT_COUNT); Mesh.AllocationBuilder smb2 = new Mesh.AllocationBuilder(mRS); - smb2.addVertexAllocation(dotParticles.getAllocation()); + smb2.addVertexAllocation(mDotParticles.getAllocation()); smb2.addIndexSetType(Mesh.Primitive.POINT); - dotMesh = smb2.create(); + mDotMesh = smb2.create(); - beamParticles = new ScriptField_Particle(mRS, DOT_COUNT); + mBeamParticles = new ScriptField_Particle(mRS, DOT_COUNT); Mesh.AllocationBuilder smb3 = new Mesh.AllocationBuilder(mRS); - smb3.addVertexAllocation(beamParticles.getAllocation()); + smb3.addVertexAllocation(mBeamParticles.getAllocation()); smb3.addIndexSetType(Mesh.Primitive.POINT); - beamMesh = smb3.create(); + mBeamMesh = smb3.create(); mScript = new ScriptC_phasebeam(mRS, mRes, R.raw.phasebeam); - mScript.set_dotMesh(dotMesh); - mScript.set_beamMesh(beamMesh); - mScript.bind_dotParticles(dotParticles); - mScript.bind_beamParticles(beamParticles); + mScript.set_dotMesh(mDotMesh); + mScript.set_beamMesh(mBeamMesh); + mScript.bind_dotParticles(mDotParticles); + mScript.bind_beamParticles(mBeamParticles); mPvConsts = new ScriptField_VpConsts(mRS, 1); @@ -85,12 +91,12 @@ public class PhaseBeamRS { createBackgroundMesh(); loadTextures(); - mScript.set_densityDPI(densityDPI); + mScript.set_densityDPI(mDensityDPI); mRS.bindRootScript(mScript); mScript.invoke_positionParticles(); - inited = true; + mInited = true; } } @@ -122,134 +128,51 @@ public class PhaseBeamRS { Matrix4f projNorm = getProjectionNormalized(mWidth, mHeight); ScriptField_VpConsts.Item i = new ScriptField_VpConsts.Item(); i.MVP = projNorm; - i.scaleSize = densityDPI / 240.0f; + i.scaleSize = mDensityDPI / 240.0f; mPvConsts.set(i, 0, true); } private void createBackgroundMesh() { // The composition and colors of the background mesh were plotted on paper and photoshop - // first then translated to the code you see below. Points and colors are not random. - - vertexColors = new ScriptField_VertexColor_s(mRS, 48); - - Float3 a = new Float3(-1.25f, 1.0f, 0.0f); - Float3 b = new Float3(0.0f, 1.0f, 0.0f); - Float3 c = new Float3(1.25f, 1.0f, 0.0f); - Float3 d = new Float3(-0.875f, 0.3f, 0.0f); - Float3 e = new Float3(-0.5f, 0.4f, 0.0f); - Float3 f = new Float3(0.25f, 0.2f, 0.0f); - Float3 g = new Float3(0.0f, 0.2f, 0.0f); - Float3 h = new Float3(-0.625f, 0.1f, 0.0f); - Float3 i = new Float3(-1.25f, -0.2f, 0.0f); - Float3 j = new Float3(-0.125f, -0.6f, 0.0f); - Float3 k = new Float3(-1.25f, -1.0f, 0.0f); - Float3 l = new Float3(1.25f, -1.0f, 0.0f); - vertexColors.set_position(0, a, false); - vertexColors.set_color(0, (new Float4(0.0f,0.584f,1.0f, 1.0f)), false); - vertexColors.set_position(1, i, false); - vertexColors.set_color(1, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(2, d, false); - vertexColors.set_color(2, (new Float4(0.51f,0.549f,0.929f, 1.0f)), false); - vertexColors.set_position(3, a, false); - vertexColors.set_color(3, (new Float4(0.0f,0.584f,1.0f, 1.0f)), false); - vertexColors.set_position(4, d, false); - vertexColors.set_color(4, (new Float4(0.51f,0.549f,0.929f, 1.0f)), false); - vertexColors.set_position(5, e, false); - vertexColors.set_color(5, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(6, a, false); - vertexColors.set_color(6, (new Float4(0.0f,0.584f,1.0f, 1.0f)), false); - vertexColors.set_position(7, e, false); - vertexColors.set_color(7, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(8, b, false); - vertexColors.set_color(8, (new Float4(0.573f,0.863f,1.0f, 1.0f)), false); - vertexColors.set_position(9, b, false); - vertexColors.set_color(9, (new Float4(0.573f,0.863f,1.0f, 1.0f)), false); - vertexColors.set_position(10, e, false); - vertexColors.set_color(10, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(11, f, false); - vertexColors.set_color(11, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(12, b, false); - vertexColors.set_color(12, (new Float4(0.573f,0.863f,1.0f, 1.0f)), false); - vertexColors.set_position(13, f, false); - vertexColors.set_color(13, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(14, c, false); - vertexColors.set_color(14, (new Float4(0.188f,0.533f,0.882f, 1.0f)), false); - vertexColors.set_position(15, c, false); - vertexColors.set_color(15, (new Float4(0.188f,0.533f,0.882f, 1.0f)), false); - vertexColors.set_position(16, f, false); - vertexColors.set_color(16, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(17, l, false); - vertexColors.set_color(17, (new Float4(0.29f,0.31f,0.392f, 1.0f)), false); - vertexColors.set_position(18, f, false); - vertexColors.set_color(18, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(19, e, false); - vertexColors.set_color(19, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(20, g, false); - vertexColors.set_color(20, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(21, f, false); - vertexColors.set_color(21, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(22, g, false); - vertexColors.set_color(22, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(23, l, false); - vertexColors.set_color(23, (new Float4(0.29f,0.31f,0.392f, 1.0f)), false); - vertexColors.set_position(24, g, false); - vertexColors.set_color(24, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(25, e, false); - vertexColors.set_color(25, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(26, h, false); - vertexColors.set_color(26, (new Float4(0.251f,0.62f,0.851f, 1.0f)), false); - vertexColors.set_position(27, h, false); - vertexColors.set_color(27, (new Float4(0.251f,0.62f,0.851f, 1.0f)), false); - vertexColors.set_position(28, e, false); - vertexColors.set_color(28, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(29, d, false); - vertexColors.set_color(29, (new Float4(0.51f,0.549f,0.929f, 1.0f)), false); - vertexColors.set_position(30, d, false); - vertexColors.set_color(30, (new Float4(0.51f,0.549f,0.929f, 1.0f)), false); - vertexColors.set_position(31, i, false); - vertexColors.set_color(31, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(32, h, false); - vertexColors.set_color(32, (new Float4(0.251f,0.62f,0.851f, 1.0f)), false); - vertexColors.set_position(33, j, false); - vertexColors.set_color(33, (new Float4(0.157f,0.122f,0.506f, 1.0f)), false); - vertexColors.set_position(34, h, false); - vertexColors.set_color(34, (new Float4(0.251f,0.62f,0.851f, 1.0f)), false); - vertexColors.set_position(35, i, false); - vertexColors.set_color(35, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(36, j, false); - vertexColors.set_color(36, (new Float4(0.157f,0.122f,0.506f, 1.0f)), false); - vertexColors.set_position(37, i, false); - vertexColors.set_color(37, (new Float4(0.196f,0.745f,1.0f, 1.0f)), false); - vertexColors.set_position(38, k, false); - vertexColors.set_color(38, (new Float4(0.357f,0.0f,0.408f, 1.0f)), false); - vertexColors.set_position(39, l, false); - vertexColors.set_color(39, (new Float4(0.29f,0.31f,0.392f, 1.0f)), false); - vertexColors.set_position(40, j, false); - vertexColors.set_color(40, (new Float4(0.157f,0.122f,0.506f, 1.0f)), false); - vertexColors.set_position(41, k, false); - vertexColors.set_color(41, (new Float4(0.357f,0.0f,0.408f, 1.0f)), false); - vertexColors.set_position(42, g, false); - vertexColors.set_color(42, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(43, h, false); - vertexColors.set_color(43, (new Float4(0.251f,0.62f,0.851f, 1.0f)), false); - vertexColors.set_position(44, j, false); - vertexColors.set_color(44, (new Float4(0.157f,0.122f,0.506f, 1.0f)), false); - vertexColors.set_position(45, l, false); - vertexColors.set_color(45, (new Float4(0.29f,0.31f,0.392f, 1.0f)), false); - vertexColors.set_position(46, g, false); - vertexColors.set_color(46, (new Float4(0.467f,0.522f,0.827f, 1.0f)), false); - vertexColors.set_position(47, j, false); - vertexColors.set_color(47, (new Float4(0.157f,0.122f,0.506f, 1.0f)), false); - - vertexColors.copyAll(); + // first then translated to the csv file in raw. Points and colors are not random. + ArrayList meshData = new ArrayList(); + InputStream inputStream = mRes.openRawResource(R.raw.bgmesh); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + try { + String line; + while ((line = reader.readLine()) != null) { + meshData.add(line); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Unable to load background mesh from csv file."); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + Log.e(LOG_TAG, "Unable to close background mesh csv file."); + } + } + + int meshDataSize = meshData.size(); + mVertexColors = new ScriptField_VertexColor_s(mRS, meshDataSize); + for(int i=0; i<meshDataSize; i++) { + String line = (String) meshData.get(i); + String[] values = line.split(","); + float xPos = new Float(values[0]); + float yPos = new Float(values[1]); + float red = new Float(values[2]); + float green = new Float(values[3]); + float blue = new Float(values[4]); + mVertexColors.set_position(i, new Float3(xPos, yPos, 0.0f), false); + mVertexColors.set_color(i, new Float4(red, green, blue, 1.0f), false); + } + mVertexColors.copyAll(); Mesh.AllocationBuilder backgroundBuilder = new Mesh.AllocationBuilder(mRS); backgroundBuilder.addIndexSetType(Primitive.TRIANGLE); - backgroundBuilder.addVertexAllocation(vertexColors.getAllocation()); + backgroundBuilder.addVertexAllocation(mVertexColors.getAllocation()); mScript.set_gBackgroundMesh(backgroundBuilder.create()); - - mScript.bind_vertexColors(vertexColors); - + mScript.bind_vertexColors(mVertexColors); } private Allocation loadTexture(int id) { @@ -258,10 +181,10 @@ public class PhaseBeamRS { } private void loadTextures() { - dotAllocation = loadTexture(R.drawable.dot); - beamAllocation = loadTexture(R.drawable.beam); - mScript.set_textureDot(dotAllocation); - mScript.set_textureBeam(beamAllocation); + mDotAllocation = loadTexture(R.drawable.dot); + mBeamAllocation = loadTexture(R.drawable.beam); + mScript.set_textureDot(mDotAllocation); + mScript.set_textureBeam(mBeamAllocation); } private void createProgramVertex() { @@ -276,7 +199,7 @@ public class PhaseBeamRS { ProgramVertex.Builder builder = new ProgramVertex.Builder(mRS); builder.setShader(mRes, R.raw.dot_vs); builder.addConstant(mPvConsts.getType()); - builder.addInput(dotMesh.getVertexAllocation(0).getType().getElement()); + builder.addInput(mDotMesh.getVertexAllocation(0).getType().getElement()); ProgramVertex pvs = builder.create(); pvs.bindConstants(mPvConsts.getAllocation(), 0); mRS.bindProgramVertex(pvs); |