/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*
*/
-#include "mesh-builder.h"
-
-namespace Dali
-{
-
-void AddVertex( MeshData::VertexContainer& verts, Vector3 V, Vector2 UV )
-{
- MeshData::Vertex meshVertex;
- meshVertex.x = V.x;
- meshVertex.y = V.y;
- meshVertex.z = V.z;
- meshVertex.u = UV.x;
- meshVertex.v = UV.y;
- verts.push_back(meshVertex);
-}
-void SetNormal( MeshData::VertexContainer& verts, size_t vertIdx, Vector3 normal )
-{
- verts[vertIdx].nX = normal.x;
- verts[vertIdx].nY = normal.y;
- verts[vertIdx].nZ = normal.z;
-}
+// CLASS HEADER
+#include "mesh-builder.h"
-void SetBone( MeshData::VertexContainer& verts, size_t vertIdx, size_t index, size_t boneIndex, float weight)
-{
- verts[vertIdx].boneIndices[index] = boneIndex;
- verts[vertIdx].boneWeights[index] = weight;
-}
+// EXTERNAL INCLUDES
+#include <dali/devel-api/images/texture-set-image.h>
-void SetBones(MeshData::VertexContainer& verts)
+namespace Dali
{
- // Set all verts in one corner to be affected fully by bone 0
- SetBone(verts, 0, 0, 0, 1.0f);
- SetBone(verts, 1, 0, 0, 1.0f);
- SetBone(verts, 2, 0, 0, 1.0f);
-
- // Set all verts in next corner to be affected by bone 1 and bone 2 equally
- SetBone(verts, 3, 0, 1, 0.5f);
- SetBone(verts, 4, 0, 1, 0.5f);
- SetBone(verts, 5, 0, 1, 0.5f);
-
- SetBone(verts, 3, 1, 2, 0.5f);
- SetBone(verts, 4, 1, 2, 0.5f);
- SetBone(verts, 5, 1, 2, 0.5f);
-}
-void ConstructBones(BoneContainer& bones)
+Shader CreateShader()
{
- bones.push_back(Bone("Bone1", Matrix::IDENTITY));
- bones.push_back(Bone("Bone2", Matrix::IDENTITY));
- bones.push_back(Bone("Bone3", Matrix::IDENTITY));
+ return Shader::New( "vertexSrc", "fragmentSrc" );
}
-void CopyVertex( MeshData::Vertex& vert, Vector3& vector )
+TextureSet CreateTextureSet()
{
- vector.x = vert.x;
- vector.y = vert.y;
- vector.z = vert.z;
+ return TextureSet::New();
}
-void AddTriangle( MeshData::VertexContainer& verts,
- MeshData::FaceIndices& faces,
- size_t v0, size_t v1, size_t v2 )
+TextureSet CreateTextureSet( Image image )
{
- faces.push_back(v0);
- faces.push_back(v1);
- faces.push_back(v2);
-
- // Calculate normal...
- Vector3 vert0, vert1, vert2;
- CopyVertex(verts[v0], vert0);
- CopyVertex(verts[v1], vert1);
- CopyVertex(verts[v2], vert2);
- Vector3 e0 = vert1 - vert0;
- Vector3 e1 = vert2 - vert1;
- Vector3 normal = e0.Cross(e1);
- normal.Normalize();
- SetNormal(verts, v0, normal);
- SetNormal(verts, v1, normal);
- SetNormal(verts, v2, normal);
+ TextureSet textureSet = TextureSet::New();
+ TextureSetImage( textureSet, 0u, image );
+ return textureSet;
}
-void ConstructVertices( MeshData::VertexContainer& vertices, float sz )
+PropertyBuffer CreatePropertyBuffer()
{
- // back
- AddVertex(vertices, Vector3( 0.0f, -sz, 0.0f), Vector2(0.50f, 0.50f)); // 0a 0
- AddVertex(vertices, Vector3( 0.0f, -sz, 0.0f), Vector2(0.50f, 0.50f)); // 0b 1
- AddVertex(vertices, Vector3( 0.0f, -sz, 0.0f), Vector2(0.50f, 0.50f)); // 0c 2
-
- // left
- AddVertex(vertices, Vector3(-sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.25f, 0.50f)); // 1a 3
- AddVertex(vertices, Vector3(-sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.25f, 0.50f)); // 1b 4
- AddVertex(vertices, Vector3(-sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.25f, 0.50f)); // 1c 5
+ Property::Map texturedQuadVertexFormat;
+ texturedQuadVertexFormat["aPosition"] = Property::VECTOR2;
+ texturedQuadVertexFormat["aVertexCoord"] = Property::VECTOR2;
- // right
- AddVertex(vertices, Vector3( sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.50f, 0.25f)); // 2a 6
- AddVertex(vertices, Vector3( sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.50f, 0.25f)); // 2b 7
- AddVertex(vertices, Vector3( sz*0.5f, sz*0.3f, sz*0.5f), Vector2(0.50f, 0.25f)); // 2c 8
-
- // top
- AddVertex(vertices, Vector3( 0.0f, sz*0.3f, -sz*0.7f), Vector2(0.25f, 0.25f)); // 3a 9
- AddVertex(vertices, Vector3( 0.0f, sz*0.3f, -sz*0.7f), Vector2(0.25f, 0.25f)); // 3b 10
- AddVertex(vertices, Vector3( 0.0f, sz*0.3f, -sz*0.7f), Vector2(0.25f, 0.25f)); // 3c 11
-}
-
-void ConstructFaces(MeshData::VertexContainer& vertices, MeshData::FaceIndices& faces)
-{
- AddTriangle(vertices, faces, 0, 6, 3); // 0, 2, 1 back, right, left (ac)
- AddTriangle(vertices, faces, 1, 9, 7); // 0, 3, 2 back, top , right (ac)
- AddTriangle(vertices, faces, 2, 4, 10); // 0, 1, 3 back, left, top (ac)
- AddTriangle(vertices, faces, 11, 5, 8); // 3, 1, 2 top, left, right (ac)
+ PropertyBuffer vertexData = PropertyBuffer::New( texturedQuadVertexFormat );
+ return vertexData;
}
-Material ConstructMaterial()
+Geometry CreateQuadGeometry(void)
{
- Material customMaterial = Material::New("CustomMaterial");
- customMaterial.SetOpacity(.76f);
- customMaterial.SetDiffuseColor(Vector4(0.8f, 0.0f, 0.4f, 1.0f));
- customMaterial.SetAmbientColor(Vector4(0.2f, 1.0f, 0.6f, 1.0f));
- customMaterial.SetSpecularColor(Vector4(0.5f, 0.6f, 0.7f, 1.0f));
- return customMaterial;
+ PropertyBuffer vertexData = CreatePropertyBuffer();
+ const float halfQuadSize = .5f;
+ struct TexturedQuadVertex { Vector2 position; Vector2 textureCoordinates; };
+ TexturedQuadVertex texturedQuadVertexData[4] = {
+ { Vector2(-halfQuadSize, -halfQuadSize), Vector2(0.f, 0.f) },
+ { Vector2( halfQuadSize, -halfQuadSize), Vector2(1.f, 0.f) },
+ { Vector2(-halfQuadSize, halfQuadSize), Vector2(0.f, 1.f) },
+ { Vector2( halfQuadSize, halfQuadSize), Vector2(1.f, 1.f) } };
+ vertexData.SetData(texturedQuadVertexData, 4);
+
+ unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
+
+ Geometry geometry = Geometry::New();
+ geometry.AddVertexBuffer( vertexData );
+ geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
+
+ return geometry;
}
-Mesh ConstructMesh( float sz )
-{
- MeshData::VertexContainer vertices;
- MeshData::FaceIndices faces;
- ConstructVertices( vertices, sz );
- ConstructFaces(vertices, faces);
- Material customMaterial = ConstructMaterial();
-
- MeshData meshData;
- BoneContainer bones;
- meshData.SetData(vertices, faces, bones, customMaterial);
- meshData.SetHasNormals(true);
- meshData.SetHasTextureCoords(true);
-
- Mesh mesh = Mesh::New(meshData);
- return mesh;
-}
-
-
-void AddBone(Dali::BoneContainer& bones, const std::string& name, const Dali::Matrix& offsetMatrix)
-{
- bones.push_back(Bone(name, offsetMatrix));
-}
-
-void CreateMeshData(MeshData& meshData)
-{
- MeshData::VertexContainer vertices;
- MeshData::FaceIndices faces;
- Dali::BoneContainer bones;
- AddBone(bones, "trunk", Matrix::IDENTITY);
- AddBone(bones, "branch", Matrix::IDENTITY);
- AddBone(bones, "twig", Matrix::IDENTITY);
- ConstructVertices( vertices, 50 );
- ConstructFaces(vertices, faces);
- Material customMaterial = ConstructMaterial();
- meshData.SetData(vertices, faces, bones, customMaterial);
- meshData.SetHasNormals(true);
- meshData.SetHasTextureCoords(true);
-}
-
-Dali::ModelData BuildTreeModel()
-{
- Dali::ModelData modelData = Dali::ModelData::New("TreeModel");
-
- MeshData meshData;
- CreateMeshData(meshData);
- modelData.AddMesh(meshData);
-
- Dali::Entity rootEntity = Dali::Entity::New("root");
- Dali::Entity e1 = Dali::Entity::New("trunk");
- Dali::Entity e2 = Dali::Entity::New("branch");
- Dali::Entity e3 = Dali::Entity::New("twig");
- Dali::Entity e4 = Dali::Entity::New("leaf");
-
- rootEntity.SetType(Dali::Entity::OBJECT);
- e1.SetType(Dali::Entity::OBJECT);
- e2.SetType(Dali::Entity::OBJECT);
- e3.SetType(Dali::Entity::OBJECT);
- e4.SetType(Dali::Entity::OBJECT);
- e4.AddMeshIndex(0);
-
- modelData.SetRootEntity(rootEntity);
- rootEntity.Add(e1);
- e1.Add(e2);
- e2.Add(e3);
- e2.Add(e4);
-
- EntityAnimatorMap twigAnimator("TwigAnim");
- twigAnimator.SetEntityName("twig");
-
- KeyFrames pKF1 = KeyFrames::New();
- pKF1.Add(0.0f, Vector3(2.0f, 1.0f, 0.0f));
- pKF1.Add(0.5f, Vector3(3.0f, 1.0f, 5.0f));
- pKF1.Add(1.0f, Vector3(4.0f, 1.0f, 10.0f));
- twigAnimator.SetPositionKeyFrames(pKF1);
-
- EntityAnimatorMap branchAnimator("BranchAnim");
- branchAnimator.SetEntityName("branch");
-
- KeyFrames pKF2 = KeyFrames::New();
- pKF2.Add(0.0f, Vector3(0.0f, 1.0f, 0.0f));
- pKF2.Add(0.25f, Vector3(-1.0f,1.0f, 5.0f));
- pKF2.Add(0.5f, Vector3(0.0f, 1.0f, 10.0f));
- pKF2.Add(0.75f, Vector3(1.0f, 1.0f, 5.0f));
- pKF2.Add(1.0f, Vector3(0.0f, 1.0f, 10.0f));
- branchAnimator.SetPositionKeyFrames(pKF2);
-
- ModelAnimationMap modelAnim;
- modelAnim.name = "Anim1";
- modelAnim.duration = 10.0f;
- modelAnim.animators.push_back(branchAnimator);
- modelAnim.animators.push_back(twigAnimator);
-
- modelData.GetAnimationMapContainer().push_back(modelAnim);
-
- return modelData;
-}
} // namespace Dali