From 3c8eed3bdc000df08ccf5628ef43f52c478465ec Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Thu, 23 Feb 2012 10:12:45 -0800 Subject: [PATCH] Adding a few more howto elements to scenegraph example. Change-Id: I29f025ce6ecf3a8090a8365991de40af72b4e78f --- .../SceneGraph/res/raw/unit_obj.a3d | Bin 0 -> 29068 bytes .../src/com/android/testapp/SimpleAppRS.java | 96 ++++++++++++++++-- 2 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 tests/RenderScriptTests/SceneGraph/res/raw/unit_obj.a3d diff --git a/tests/RenderScriptTests/SceneGraph/res/raw/unit_obj.a3d b/tests/RenderScriptTests/SceneGraph/res/raw/unit_obj.a3d new file mode 100644 index 0000000000000000000000000000000000000000..56eff046c696d726de0bfa926d8a50ce33441dd1 GIT binary patch literal 29068 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 literal 0 HcmV?d00001 diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java index 621bfa364bac3..fff6f3407a929 100644 --- a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java +++ b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/SimpleAppRS.java @@ -34,9 +34,6 @@ import android.util.Log; // This is where the scenegraph and the rendered objects are initialized and used public class SimpleAppRS { - - private static String TAG = "SimpleAppRS"; - SceneManager mSceneManager; RenderScriptGL mRS; @@ -44,6 +41,8 @@ public class SimpleAppRS { Scene mScene; Mesh mSimpleMesh; + Mesh mSphereMesh; + Mesh mCubeMesh; public void init(RenderScriptGL rs, Resources res, int width, int height) { mRS = rs; @@ -54,7 +53,9 @@ public class SimpleAppRS { mScene = new Scene(); setupGeometry(); - setupRenderables(); + setupColoredQuad(); + setupTexturedQuad(); + setupShadedGeometry(); setupCamera(); setupRenderPass(); @@ -68,6 +69,7 @@ public class SimpleAppRS { Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, 3, Mesh.TriangleMeshBuilder.TEXTURE_0); + // Create four vertices with texture coordinates tmb.setTexture(0.0f, 1.0f).addVertex(-1.0f, 1.0f, 0.0f); tmb.setTexture(0.0f, 0.0f).addVertex(-1.0f, -1.0f, 0.0f); tmb.setTexture(1.0f, 0.0f).addVertex(1.0f, -1.0f, 0.0f); @@ -76,36 +78,110 @@ public class SimpleAppRS { tmb.addTriangle(0, 1, 2); tmb.addTriangle(2, 3, 0); mSimpleMesh = tmb.create(true); + + // Load a file that constains two pieces of geometry, a sphere and a cube + FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.unit_obj); + for (int i = 0; i < model.getIndexEntryCount(); i ++) { + FileA3D.IndexEntry entry = model.getIndexEntry(i); + if (entry != null && entry.getName().equals("CubeMesh")) { + mCubeMesh = entry.getMesh(); + } else if (entry != null && entry.getName().equals("SphereMesh")) { + mSphereMesh = entry.getMesh(); + } + } } - private void setupRenderables() { + private void setupColoredQuad() { // Built-in shader that provides position, texcoord and normal VertexShader genericV = SceneManager.getDefaultVS(); // Built-in shader that displays a color FragmentShader colorF = SceneManager.getColorFS(); - // Built-in shader that displays a texture - FragmentShader textureF = SceneManager.getTextureFS(); RenderState colorRS = new RenderState(genericV, colorF, null, null); - ProgramStore alphaBlend = ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS); - RenderState texRS = new RenderState(genericV, textureF, alphaBlend, null); // Draw a simple colored quad Renderable quad = mScene.appendNewRenderable(); quad.setMesh(mSimpleMesh); + // Our shader has a constant input called "color" + // This tells the scenegraph to assign the following float3 to that input quad.appendSourceParams(new Float4Param("color", 0.2f, 0.3f, 0.4f)); quad.setRenderState(colorRS); + } + + private void setupTexturedQuad() { + // Built-in shader that provides position, texcoord and normal + VertexShader genericV = SceneManager.getDefaultVS(); + // Built-in shader that displays a texture + FragmentShader textureF = SceneManager.getTextureFS(); + // We want to use transparency based on the alpha channel of the texture + ProgramStore alphaBlend = ProgramStore.BLEND_ALPHA_DEPTH_TEST(mRS); + RenderState texRS = new RenderState(genericV, textureF, alphaBlend, null); // Draw a textured quad - quad = mScene.appendNewRenderable(); + Renderable quad = mScene.appendNewRenderable(); quad.setMesh(mSimpleMesh); // Make a transform to position the quad CompoundTransform t = mScene.appendNewCompoundTransform(); t.addTranslate("position", new Float3(2, 2, 0)); quad.setTransform(t); + // Our fragment shader has a constant texture input called "color" + // This will assign an icon from drawables to that input quad.appendSourceParams(new TextureParam("color", new Texture2D(R.drawable.icon))); quad.setRenderState(texRS); } + private FragmentShader createLambertShader() { + // Describe what constant inputs our shader wants + Element.Builder b = new Element.Builder(mRS); + b.add(Element.F32_4(mRS), "cameraPos"); + + // Create a shader from a text file in resources + FragmentShader.Builder fb = new FragmentShader.Builder(mRS); + // Tell the shader what constants we want + fb.setShaderConst(new Type.Builder(mRS, b.create()).setX(1).create()); + // Shader code location + fb.setShader(mRes, R.raw.diffuse); + // We want a texture called diffuse on our shader + fb.addTexture(TextureType.TEXTURE_2D, "diffuse"); + FragmentShader shader = fb.create(); + mScene.appendShader(shader); + return shader; + } + + private void setupShadedGeometry() { + // Built-in shader that provides position, texcoord and normal + VertexShader genericV = SceneManager.getDefaultVS(); + // Custom shader + FragmentShader diffuseF = createLambertShader(); + RenderState diffuseRS = new RenderState(genericV, diffuseF, null, null); + + // Draw a sphere + Renderable sphere = mScene.appendNewRenderable(); + // Use the sphere geometry loaded earlier + sphere.setMesh(mSphereMesh); + // Make a transform to position the sphere + CompoundTransform t = mScene.appendNewCompoundTransform(); + t.addTranslate("position", new Float3(-1, 2, 3)); + t.addScale("scale", new Float3(1.4f, 1.4f, 1.4f)); + sphere.setTransform(t); + // Tell the renderable which texture to use when we draw + // This will mean a texture param in the shader called "diffuse" + // will be assigned a texture called red.jpg + sphere.appendSourceParams(new TextureParam("diffuse", new Texture2D("", "red.jpg"))); + sphere.setRenderState(diffuseRS); + + // Draw a cube + Renderable cube = mScene.appendNewRenderable(); + cube.setMesh(mCubeMesh); + t = mScene.appendNewCompoundTransform(); + t.addTranslate("position", new Float3(-2, -2.1f, 0)); + t.addRotate("rotateX", new Float3(1, 0, 0), 30); + t.addRotate("rotateY", new Float3(0, 1, 0), 30); + t.addScale("scale", new Float3(2, 2, 2)); + cube.setTransform(t); + cube.appendSourceParams(new TextureParam("diffuse", new Texture2D("", "orange.jpg"))); + cube.setRenderState(diffuseRS); + } + private void setupCamera() { Camera camera = mScene.appendNewCamera(); camera.setFar(200);