X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali-toolkit%2Finternal%2Fcontrols%2Fmodel3d-view%2Fobj-loader.h;h=78de23396950f2535a832d5be8a75c8558d1743b;hb=56eaa070094d7a0fc04e9c75b272f1cd3ceb9dc8;hp=5f4662d7400497bddda791eff7575f2223044e97;hpb=d00a250741411c386d988e7ac34525cf94a1918e;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/model3d-view/obj-loader.h b/dali-toolkit/internal/controls/model3d-view/obj-loader.h index 5f4662d..78de233 100644 --- a/dali-toolkit/internal/controls/model3d-view/obj-loader.h +++ b/dali-toolkit/internal/controls/model3d-view/obj-loader.h @@ -38,9 +38,9 @@ public: struct TriIndex { - int pntIndex[3]; - int nrmIndex[3]; - int texIndex[3]; + int pointIndex[3]; + int normalIndex[3]; + int textureIndex[3]; }; struct Vertex @@ -111,7 +111,7 @@ public: void LoadMaterial( char* objBuffer, std::streampos fileSize, std::string& diffuseTextureUrl, std::string& normalTextureUrl, std::string& glossTextureUrl ); - Geometry CreateGeometry( int objectProperties ); + Geometry CreateGeometry( int objectProperties, bool useSoftNormals ); Vector3 GetCenter(); Vector3 GetSize(); @@ -136,27 +136,63 @@ private: bool mHasNormalMap; bool mHasSpecularMap; - Dali::Vector mPoints; - Dali::Vector mTextures; - Dali::Vector mTextures2; - Dali::Vector mNormals; - Dali::Vector mTangents; - Dali::Vector mBiTangents; + Dali::Vector mPoints; + Dali::Vector mTextures; + Dali::Vector mTextures2; + Dali::Vector mNormals; + Dali::Vector mTangents; + Dali::Vector mBiTangents; Dali::Vector mTriangles; - void CalculateTangentArray( const Dali::Vector& vertex, - const Dali::Vector& texcoord, - Dali::Vector& triangle, - Dali::Vector& normal, - Dali::Vector& tangent ); + /** + * @brief Calculates normals for each point on a per-face basis. + * + * There are multiple normals per point, each corresponding to the normal of a face connecting to the point. + * + * @param[in] vertices The vertices of the object. + * @param[in, out] triangles The triangles that form the faces. The normals of each triangle will be updated. + * @param[in, out] normals The normals to be calculated. + */ + void CalculateHardFaceNormals( const Dali::Vector& vertices, + Dali::Vector& triangles, + Dali::Vector& normals ); + + /** + * @brief Calculates smoothed normals for each point. + * + * There is one normal per point, an average of the connecting faces. + * + * @param[in] vertices The vertices of the object. + * @param[in, out] triangles The triangles that form the faces. The normals of each triangle will be updated. + * @param[in, out] normals The normals to be calculated. + */ + void CalculateSoftFaceNormals( const Dali::Vector& vertices, + Dali::Vector& triangles, + Dali::Vector& normals ); + + /** + * @brief Calculates tangents and bitangents for each point of the object. + * + * These are calculated using the object's points, texture coordinates and normals, so these must be initialised first. + */ + void CalculateTangentFrame(); void CenterAndScale( bool center, Dali::Vector& points ); - + /** + * @brief Using the data loaded from the file, create arrays of data to be used in creating the geometry. + * + * @param[in] vertices The vertices of the object. + * @param[in] textures The texture coordinates of the object. + * @param[in] verticesExt Extension to vertices, storing tangents and bitangents. + * @param[in] indices Indices of corresponding values to match triangles to their respective data. + * @param[in] useSoftNormals Indicates whether we should average the normals at each point to smooth the surface or not. + */ void CreateGeometryArray( Dali::Vector & vertices, Dali::Vector & textures, Dali::Vector & verticesExt, - Dali::Vector & indices ); + Dali::Vector & indices, + bool useSoftNormals ); };