Step by Step Skeletal Animation in C++ and OpenGL, Using COLLADA PART 2

Level: Beginner to Intermediate

Before you start reading the implementations part, if you haven’t read the first part of this tutorial(s), which explains COLLADA documents in detail, you should follow the link below.

Part 1: COLLADA documents

You should have seen the following structure. In part 1

1)     Reading and Understanding COLLADA documents. (high level overview of COLLADA)

2)     Actual Implementations in C++ using OpenGL, of what we learn in Part 1

The one that your are reading now is the second part which has further two parts,

1)     Implementation part related to the Exporter for COLLADA

2)     Implementation part related to the skeletal animation in C++ using OpenGL

As far as the implementation of skeletal animation is concerned, we will Use OpenGL and C++, but the exporter which is used to export Data from COLLADA documents into my own Binary format (.CBA), I have written in C# (C Sharp). I could have written that in C++, but I was too lazy to write my own implementation of XML readers, while C# has very good implementation for that. And the free API for XML parsing (tinyXML) has a lot of issues which I was not really ready for. So I wrote my COLLADA exporter in C# and I create my binary file format which I call CBA files, from my exporter. CBA means COLLADA Binary Assets 🙂 and later I import this file in C++ using a CBA reader API. Now this introduced a lot of problems for me, like I have to maintain almost similar code twice once in C# for my exporter and Once in C++ for my importer. So it would be better that you don’t use my exporter and write your own Exporter in what ever language you prefer. And that would also help you understand the COLLADA documents in depth.

Part 2.1:

Implementation of Exporter for COLLADA, written in C#

Implementation of Skeletal Animation in COLLADA documents

As we have discussed in the introduction part, this tutorial is split in to two parts, I assume you have already read first one general introduction to COLLADA documents which is irrespective of any programming language Part 1: COLLADA documents.  Now we would define the structure in which we can read the COLLADA document. Please bear in mind that this exporter which I have written in C# is one of my worst ever codes, I wrote everything very quick and didn’t had any time to plan and design before code. So you will see a lot of hacks every where 🙂 but it is of course recommended that you write your own exporter. One other thing you should remember is that, this part of part 2 will try to read the COLLADA document but will not change the structure (schema) of the data; every thing is read as it is from COLLADA, and when we will write our custom format out of it, we will just read those things which are really necessary.

Reading Geometry Data from COLLADA document
Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<library_geometries>

<geometry>

<mesh>

<souce>

<technique_common>

<float_array> and <NAME_array>

<accessor>

<param>

<triangles>

<vertices>

<input>

<p>

Now you might know that some of the nodes are part of the Core COLLADA, which means, that they can appear in many places and many libraries in COLLADA. So you should define a structure for those nodes with common names so that they can be used for all kinds of purposes, for example a <source> node can be used for Vertices, Animation, Texture Coordinates and Vertex Weights or any other kinds of data. This is something that I forgot in my C# implementation, and later I was not able to re-factor 🙂 Remember my hacky bits of code :).

So if I were to define a class in which I can read the Geometry data of a COLLADA document I would do something like follows.

class COLLADA
{
private:
    GeometryLibrary    m_GeometryLibrary;
};
 

Where GeometryLibrary would be defined as follows.

 
class GeometryLibrary
{
    Vector<Geometry>    m_Geometries;
};
 
And now we define Geometry as follows.
 
class Geometry
{
    Mesh                m_Mesh;
};

The rest of the Libraries are not important at this point so we will not discuss them. All the other types of classes which are needed to store different nodes from COLLADA are listed as follows. And this is the simplest implementation you can make. I am not considering optimizations and inheritance etc. and there might be a lot of opportunities for restructuring and optimizations. For example as we know a source can have one type of array node, which could be <float_array>, <NAME_array> or any other type of array, in my implementation I am using different classes for each, you might want to create one class called Array or BaseArray and then derive each type of Array from it with specialize values.

//----------------------------------------------//
class Float_Array
{
    unsigned int        m_Count;
    string              m_ID;
    float               *m_Floats;
};
//----------------------------------------------//
class Name_Array
{
    unsigned int        m_Count;
    string              m_ID;
    string              *m_Names;
};
//----------------------------------------------//
class Param
{
    string              m_Name;
    string              m_Type;
};
//----------------------------------------------//
class Accessor
{
    string              m_Source;
    unsigned int        m_Count;
    unsigned int        m_Stride;
    Vector<Param>       m_Params;
};
//----------------------------------------------//
class Technique_Common
{
    Accessor            m_Accessor;
};
//----------------------------------------------//
class Source
{
    string              m_ID;
    Float_Array         m_Float_Array;
    Name_Array          m_Name_Array;
    Technique_Common    m_TechniqueCommon
};
//----------------------------------------------//
class Input
{
    string              m_Semantic;
    string              m_Source;
    string              m_Offset;
    string              m_Set;
};
//----------------------------------------------//
class Vertices
{
    string              m_ID;
    Vector<Input>       m_Inputs;
};
//----------------------------------------------//
class P
{
    unsigned int         m_Count;
    unsigned short       *m_Indices;
};
//----------------------------------------------//
class Triangles
{
    unsigned int        m_Count;
    string              m_Material;
    Vector<Input>       m_Inputs;
    P                   m_P;
};
//----------------------------------------------//
class Mesh
{
    Vector<Source>      m_Sources;
    Vertices            m_Vertices;
    Vector<Triangles>   m_Triangles;
};
//----------------------------------------------//

Now using those files we will store the Geometry data from COLLADA documents in a COLLADA Class Object. How you can read all those nodes is another story, you can either use C#’s XML parsers or use TinyXML or any other XML parser to load and parse COLLADA documents, you can also write your own XML parser if you have enough time. But I would suggest using an existing one rather writing your own, since the goal is to read COLLADA documents not XML files.

By now you should have all the Data related to displaying the model in 3D scene, you can start from <triangles> node and render all the triangles using OpenGL.

Reading Texture filename from COLLADA document

Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<library_images>

<image>

<init_from>

Its all again up to you how you want to read the texture file name, once you know where to find it. In the simplest form I would create a class for LibraryImages as well in the COLLADA Class and read the <image> in to it and so on. So the refined implementation for Class COLLADA will become as follows.

class COLLADA
{
private:
    GeometryLibrary     m_GeometryLibrary;
    ImagesLibrary       m_ImagesLibrary;
};
 

Where ImagesLibrary would be defined as follows.

 
class ImagesLibrary
{
    Vector<Image>       m_Images;
};
 
And now we define Image as follows.
 
class Init_From
{
    string              m_Filename;
};
 
class Image
{
    Init_From           m_Init_From;
};
Reading Materials from COLLADA document
Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<triangles>

<library_materials>

<material>

<instance_effect>

<library_effects>

<effect>

<phong> or <blin>

<profile_COMMON>

<technique>

<ambient>

<diffuse>

<specular>

<emission>

<shininess>

<transparency>

<color>

If you have read the previous sections of this part 2, and introduction part for this section you should be able to define the structure for this section by yourself, so I will not discuss it, since its getting repeated.

Reading Skeleton from COLLADA document
Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<library_visual_scenes>

<node>

<instance_controller>

<skeleton>

<visual_scene>

<matrix>

In the introduction part we discussed how to read the skeleton from <visual_scene> so I assume you should be able to define the structure for reading that data. But I used another approach myself. Which I think is the simplest way of reading Skeleton from COLLADA documents. And before discussing that, you need to read the next section in the introduction part.

Reading Skinning information from COLLADA document
Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<library_controllers>

<controller>

<skin>

<source>

<param>

<accessor>

<technique_common>

<NAME_array>

<float_array>

<node>.

<vertex_weights>

<input>

<vcount>

<v>

What I do for reading the skeleton from COLLADA documents is that I read the <controller>, and for all the Bone SIDs I check in the Visual Scene and find his parent and Joint Matrix, there, and I read the Inverse Bind matrix from the <controller>. And that’s all what we need. As you might remember we took an assumption that all the joints must be attached to the skin. In that case you don’t have to read the <instance_controller> node in the <visual_scene> and you can read Bone IDs from <controller> and find them in <visual_scene>. It require a little work to find the node in <visual_scene> and find his parent etc, but once you have started working with COLLADA nodes it should not be hard for you.

Reading Animation data from COLLADA document
Click here to go to: Implementation section in Part 1 for this section of Part 2

In the introduction section of part 1, we discussed the following libraries and nodes which are related to this section and which will be parsed and used,

<library_animations>

<animation>

<source>

<sampler>

<channel>

<visual_scene>

By now you should be quite an expert to define the structure for loading this data into it. But I would also give you a hint. Your COLLADA Class should look as follows, after reading all those sections.

class COLLADA
{
private:
    GeometryLibrary     m_GeometryLibrary;
    ImagesLibrary       m_ImagesLibrary;
    EffectsLibrary      m_EffectsLibrary;
    MaterialLibrary     m_MaterialLibrary;
    ControllerLibrary   m_ControllerLibrary;
    AnimationLibrary    m_AnimationLibrary;
    VisualSceneLibrary  m_VisualSceneLibrary;
};
 

Where AnimationLibrary would be defined as follows and all the other libraries must have been defined by you.

 
class AnimationLibrary
{
    Vector<Animation>   m_Animations;
};
 
And now we define Animation as follows.
 
class Animation
{
    string              m_ID;
    Vector<source>      m_Sources;
    Vector<sample>      m_Samples;
    Vector<channel>     m_Channels;
};

And now you should be able to define “sample” and “channel” classes. You can also write a structure where you do some other processing already on these <animation> nodes, and only keep the list of channels, where you reference the sampler targeted by this channel and then in “sample” you save references to the <sources> that are targeted or used by that sample. This processing we have to do sooner or later so it’s your choice when and where you want to do it. But as we discussed in the beginning of this part, that we will not change the structure of COLLADA but read as it is so you might not want to do it now.

Please not that I am not giving you actual code for reading from COLLADA documents, since that depends on what language you use to read XML files. If you have read the first part of these tutorials and you have created the structure properly, you should be able to read the data very easily using any XML parser. So I will not go in that much detail of implementation. And will let you do the job yourself.

Once we have finished reading the COLLADA document, we are ready to write the CBA file, which will be explained in the following section, in case you don’t want to write CBA file you can write your own “what ever” format and then read it accordingly.

CBA file format

The CBA file format is a very easy and simple to read and write file format. Geometry and skeletal data i.e. Vertex Weights etc, is saved in index form, which means, the whole data is saved once in a long floats array and then that float array is referenced with indices from the places where the data is needed. This saves space when you don’t want to save repeated vertex attributes for example. In a typical 3D model one vertex can be used by many triangles, and instead of saving that vertex many times for each triangle, its better to save it once and save its index for each triangle. That’s how all the data is saved in COLLADA and CBA file will use the same structure since it saves a lot of space as well as sending this data to OpenGL is also easy and efficient.

The CBA file format header

You can see in figure 1, how the header for CBA file looks.

Figure 1: Header of CBA file 

The structure of the header, 96 bytes in total, in source code is as follows

class CCBAHeader  

{

public:

     // CBA Main Chunk contains information about all other chunks (32 Bytes in Total)

     class CCBAMainChunk

     {

     public:

          unsigned int  m_MagicNumber;               // Always CBA0

          unsigned int  m_ChunkID;                   // Must be 0 

          unsigned int  m_Version;                   // Version initial 1, In this version only supports GeometryChunk

          unsigned int  m_NoOfSubChunks;             // Total Number of Chunks

          unsigned int  m_HasAnimation_HasSkeleton;  // LowBytes = Animation, HighBytes = Skeleton

          unsigned int  m_FirstChunkOffset;          // From where does the First Chunk Starts

          unsigned int  m_FileSize;                  // Total number of Bytes in the File

          unsigned int  m_ExtraData;                 // Can be any number of Bytes after this bytes

     };

    

// Contains the Bind Position Geometry Data in CBA (40 Bytes in Total)

     class CCBAGeometryChunk

     {

     public:

          unsigned int  m_TotalNoOfTriangles;        // Total Triangles

          unsigned int  m_ChunkID;                   // Must be 1 

          unsigned int  m_NoOfTriangleGroups;        // Number of Triangle Groups Categorized by Material

          unsigned int  m_TrianglesDetails;          // 1 = Only Vertices, 2 = Vertices + Normals, 3 = Vertices + Normals + TextureCoords

          unsigned int  m_DataOffset;                // Actual Data Starts from this Offset

          char          m_TextureFileName[20];       // Texture files name (.jpg,.png,.tga,.bmp)  

     };

 

     // Contains the Animation Data in CBA (24 Bytes in Total)

     class CCBAAnimationChunk

     {

     public:

          unsigned int  m_NoOfAnimations;            // Total Animations Keyframes

          unsigned int  m_ChunkID;                   // Always 2

          unsigned int  m_NoOfKeyframes;             // Total Animations Keyframes

          float         m_StartTime;                 // Start Time of the animation

          float         m_TotalTime;                 // End time or total time of the animation

          float         m_FramesPerSecond;           // Frames Per second to render

     };

 

private:

     CCBAMainChunk      m_MainChunk;                // The Main Chunk of CBA file

     CCBAGeometryChunk  m_GeometryChunk;            // The Geometry Chunk of CBA file

     CCBAAnimationChunk m_AnimationChunk;           // The Animation Chunk of CBA file

};

Immediately, after the header is finished, the actual data of the CBA file format starts.

Figure 2: Data section of CBA file

As you can see the data section of the CBA file format is very simple. The first four elements are the 4 arrays we need which are saved in index form.

First one is the Vertices data, which says number of vertices in a 4 byte integer, and the actual data in 4 byte floats array.

Second one is the Normals data, which says number of Normals in a 4 byte integer, and the actual data in 4 byte floats array.

Third one is the Texture Coordinates data, which says number of Texture Coordinates in a 4 byte integer, and the actual data in 4 byte floats array.

Fourth one is the Vertex weights data, which says number of Vertex Weights in a 4 byte integer, and the actual data in 4 byte floats array.

After that we have the triangle group’s data, we already know how many triangle groups we have from the header so for each triangle group we save its number of triangles in a 4 bytes unsigned integer and second we save its material which is 4, 4 component vectors and 2 floats. In total 72 bytes for material. After that we save the triangles indices for each triangle, which are 3 unsigned shorts (1 for each vertex) per each attribute. So for a triangle which specifies Vertex, Normal and Texture Coordinate, we save 3 * 3 = 9 indices.

After the triangles data we write the Skeleton data, first we write the bind shape matrix for the skeleton. Then for each Joint we write its Parent ID, Joint Matrix, (which is called Bind matrix in the figure) and its inverse bind matrix. Remember we are not writing the Bone ID itself, in the skeleton, which can be considered as the number/index of the bone we read, so the first bone we read gets an ID of 0, the second one gets an ID of 1 and so on.

After the skeleton we have the weighted vertices data. For each vertex from the vertices source in the Geometry data section, we have to specify its weight towards any bone. So for each vertex we write the number of bones affecting this vertex, and then for each bone affecting this vertex, we write the Joint ID/Bone ID and the weight towards that bone.

And at the end we write the Animations key frame data. As you might have noticed that the animation nodes are targeting Joints from the skeleton and this was one of our assumptions that only skeletal animation is supported and not backed animations or vertex animation. So for each Bone/Joint targeted by the animations from the library animations we write it’s Bone ID and then its number of key frames, which consists of “time” and a Joint Matrix, which is called “transform” in the figure.

And that’s the whole CBA file format. In the next part you will learn how to create this Character in OpenGL scene that we saved in CBA files, how to connect it to the skeleton and how to animate it.

Part 2.2:

Implementation part; skeletal animation in C++ using OpenGL

Implementation of Skeletal Animation in C++

At last we are here 🙂 for which we were waiting. This part of the tutorials is the most important of all the other parts we have read so far. We will first try to write the implementation for loading the CBA file that we wrote before in C#. You can also download this CBA loading API from downloads section of this website.

The API has a CCBA class which handles loading and displaying of the CBA files, which looks like follows.

class CCBA
{
public:
      CCBA(void);
      ~CCBA(void);
 
      // Some of the Functions are excluded from this text for the sake of simplicity
        void      Draw();
        bool      Update(unsigned long a_MiliSeconds);
        void      SetupSkeleton(int a_Frame);
        void      SetupBindPose();
        void      ReadCBA(string a_FileName);
    
protected:
        void      ReadHeader(CExport *a_File, string a_FileName);
        void      ReadArray(CExport *a_File, float **a_Destination,unsigned int &a_Size);
        void      ReadTriangles(CExport *a_File);
        void      ReadSkeleton(CExport *a_File);
        void      ReadAnimations(CExport *a_File);
 
        void      WriteCBA(string a_FileName);
        
        void      CalculateBound();
        void      ConvertToArrays();
 
    private:
        // Only the most important member variables are shown here 
        CCBAHeader                 *m_Header;             // Header (Contains information about the file)
        CGeometryData              *m_GeometryData;       // Common data in the Mesh (List of Vertices/Normals/TexCoords)
        CSkeletonData              *m_SkeletonData;       // Skeleton Data used for animation
        Vector<CTriangleGroup*>    *m_TrianglesGroups;    // Individual Triangle Groups Separated By Material Data (Just Indices and Material)
    };
 

In the CCBA class the most important member variables are m_Header, m_GeometryData, m_SkeletonData and m_TriangleGroups the rest of the stuff is provided for the sake of completeness. As the names suggests, m_Header contains the Header, m_GeometryData will contain the Geometry of the Character, m_SkeletonData will contain the Joints Hierarchy, and m_TriangleGroups contains all the Triangle groups which are separated by Material, by the COLLADA Exporter from StudioMax.

 

The ReadCBA function of CCBA class looks like this.

 

void CCBA::ReadCBA( string a_FileName )
{
    CExport *File = new CExport(0,a_FileName);
 
    this->ReadHeader(File, a_FileName); // Read Header
    this->ReadArray(File, &this->m_GeometryData->m_VerticesArray, this->m_GeometryData->m_VerticesArraySize); // Read Points
    this->ReadArray(File, &this->m_GeometryData->m_NormalsArray, this->m_GeometryData->m_NormalsArraySize); // Read Normal
    this->ReadArray(File, &this->m_GeometryData->m_TextureCoordsArray, this->m_GeometryData->m_TextureCoordsArraySize); // Read Texture Coordinates
 
    if (65536 & this->m_Header->m_MainChunk.m_HasAnimation_HasSkeleton)
        this->ReadArray(File, &this->m_GeometryData->m_VertexWeightsArray, this->m_GeometryData->m_VertexWeightsArraySize);// Read Weights Data
 
    this->ReadTriangles(File); // Read Triangles Data
 
    if (65536 & this->m_Header->m_MainChunk.m_HasAnimation_HasSkeleton)
    {
        this->ReadSkeleton(File); // Read Skeleton Data
        this->ReadAnimations(File); // Read Animations Data
        this->SetupInverseBindAttributes(); // Extra Processing for setting up for Skinning
    }
 
    delete File;
    
    this->ReadClipsInformation(a_FileName); // Read Animation Clips
 
    this->CalculateBound(); // Calculates Bounding Sphere
 
    if (this->m_Header->m_MainChunk.m_Version == 1) // CBA Version 1 is changed to 2
    {
        this->ConvertToArrays();
        this->WriteCBA(a_FileName);
        this->DuplicateSkinnedData();
    }
    else
        this->DuplicateBackupData();
 
    this->FillVertexBufferObject(); // Makes it Ready to be rendered 
    this->FillIndexBufferObject();  // Makes it Ready to be rendered
    this->SetupTexture(); // Sets up Texture and loads
}

You can see that the function is quite simple; it’s just reading the sections that we discussed before. For example it reads header, and all arrays, and then reads Triangles etc. One thing that I would like to explain here is that the exporter that we discussed before write a CBA version 1.0, which means all the data is saved as it is as we read from COLLADA. In ReadCBA function we check if the CBA version is 1.0 then we convert it to CBA Version 2.0. And before doing that, ConvertToArrays() is called, which takes all the arrays from CBA and makes them ready to be used with OpenGL Vertex Buffers and Index Buffers. The Difference between these two types is that, for example we have one triangle in COLLADA and it has 3 Attributes per vertex. So each vertex of a triangle in COLLADA has 1 Index per Attribute, and 3 indices for 3 attributes. While OpenGL Vertex Buffers can only read One Index per vertex for any number of attributes. For that purpose we have to do some extra processing on the data arrays to shuffle them so that each vertex used in a triangle has same Index for all its attributes from the attributes sources. And then we resave this new CBA file as Version 2.0. If you don’t understand this process, then don’t worry and keep on reading because you need this step only if you want to render the mesh using OpenGL vertex and index buffers. If you want to render everything in immediate mode then you don’t have to worry about that.

The rest of the functions are self explanatory, each one of them reads the corresponding section from CBA files, and if I try to explain each and every one of them separately it will easily get very boring.

The main purpose of ReadCBA is to read the CBA file and fill the data structures that we created for saving the Character data. We have already discussed the header structure of CBA file. Now we will discuss the rest of the data structures that we save.

CGeometryData	*m_GeometryData;       // Common data in the Mesh (List of Vertices/Normals/TexCoords)

CGeometryData class contains all the Data that we need for the Character other then Skeleton and Animations data. And it looks like follows.

class CGeometryData

{

public:

     CGeometryData(void);

     ~CGeometryData(void);

     //Functions for this class are removed

private:

     float                        *m_VerticesArray;                     // All the Vertices

     float                        *m_SkinnedVerticesArray;              // All the Skinned Vertices

     float                        *m_NormalsArray;                      // All the Normals

     float                        *m_SkinnedNormalsArray;               // All the Skinned Normals

     float                        *m_TextureCoordsArray;                // All the Texture Coordinates

     float                        *m_VertexWeightsArray;                // All the Vertex Weights

     Vector<CVertexInfluence*>    *m_VertexInfluences;                  // Vertices Influences

 

     unsigned int                 m_VerticesArraySize;

     unsigned int                 m_NormalsArraySize;

     unsigned int                 m_TextureCoordsArraySize;

     unsigned int                 m_VertexWeightsArraySize;

};

We will read all the Vertices, Normals, Texture coordinates and Vertex Weights arrays in this m_GeometryData pointer. If you see we also have Duplicated copies of both the Vertices array and Normals array. These copies are used during skinning and will be explained later. Since the Vertex Texture coordinates and vertex weights never change during skinning, we don’t need copies of them.

Apart from all that, we have a list of CVertexInfluence pointers for each model. This is the list where we save the data regarding which bone is influencing which vertex with how much weight. The structure of CVertexInfluence is as follows.

class CVertexInfluence

{

public:

     CVertexInfluence(void);

     ~CVertexInfluence(void);

 

private:

     unsigned int       m_NoOfInfluences;      // Total Number of Influences

     unsigned int       *m_Weights;             // Weights Array

     int                *m_Joints;              // Joints Array

};

 

The next thing in CCBA is;

 
CSkeletonData           *m_SkeletonData;       // Skeleton Data used for animation
 
This is where the skeleton data is saved and the structure of the CSkeletonData is as follows.

 

class CSkeletonData

{

public:

     CSkeletonData(void);

     ~CSkeletonData(void);

 

private:

     unsigned int  m_NoOfBones;          // Total Number of Joints in Skeleton

     unsigned int  m_NoOfKeyframes;      // Another Copy of the No Of Key frames of animation

     CMatrix4f     *m_BindShapeMatrix;   // Bind Shape Matrix

     CBone         **m_Bones;            // All the bones

     CBone         *m_RootBone;          // Root bone reference to one of the Bone in the m_Bones

};

Here we save all the bones and the bones contain the hierarchy information. We have the Bind Shape Matrix, and a bone count. How each bone is structures is as follows.

class CBone

{

public:

     CBone(void);

     ~CBone(void);

private:

     int           m_ID;                  // ID of this bone

     int           m_ParentID;            // Parent ID of this bone

     CMatrix4f     *m_JointMatrix;        // The Bind Pose Matrix

     CMatrix4f     *m_InverseBindMatrix;  // The Inverse Bind Pose Matrix

     CMatrix4f     *m_WorldMatrix;        // The World Matrix

     CMatrix4f     *m_SkinningMatrix      // The Matrix Used for calculations

     unsigned int  m_ChildCount;          // Number of Children

     Vector<int>   *m_Children;           // Children of this bone

     unsigned int  m_NoOfKeyframes;       // No Of key frames of animation for this bone

     CKeyframe     **m_Keyframes;         // All Key frames for this Bone’s animation

};

Here we have the Bone ID, Parent Bone ID, Joint Matrix, Inverse Bind Matrix, all the Child bone IDs and all the key frames for this bone. World Matrix and Skinning Matrix are created and changed at run time when we run the animation, so they are just convenience buffers. Each key frame is a pair of Transformation (Joint Matrix) and time.

class CKeyframe

{

public:

     CKeyframe(void);

     ~CKeyframe(void);

 

private:

     float          m_Time;                // Time of this key frame

     CMatrix4f      *m_Transform;          // Transformation of this Key frame

};

 

The next very important thing in CCBA is;

 
Vector<CTriangleGroup*> *m_TrianglesGroups;// Individual Triangle Groups Separated By Material Data (Just Indices and Material)
 
The Structure of a CTriangleGroup is as follows.
 
class CTriangleGroup

{

public:

CTriangleGroup(void);

     ~CTriangleGroup(void);

 

     // The functions for this class are removed

 

private:

     CTriangle     *m_Triangles;

     CMaterial     *m_Material;

     unsigned int  m_NoOfTriangles;

};

This class is used for saving the triangles data from CBA file as well as the material information for each triangle group. For the sake of completeness the structure of CTriangle is also presented, which is used to save 9 indices for 3 vertices and their 3 attributes of each vertex of a triangle.

class CTriangle

{

public:

     CTriangle(void);

     ~CTriangle(void);

 

     // The functions for this class are removed

 

private:

 

     unsigned short     m_VerticesIndex[3];

     unsigned short     m_NormalsIndex[3];

     unsigned short     m_TexturesIndex[3];

};

And that’s all the data structures that we need to read the Character in. Now all what we have to do is to, use this data and make our character animate. Which is done half in setting up the skeleton SetupSkeleton() and half in SetupBindPose().

How skeletal Animation works?

If you have come so far you might already know that so far we have saved data for the character in 3 Categories, one category is the Geometry data of the Character which is saved in m_GeometryData and m_TriangleGroups, second category is the skeleton data, which is saved in m_SkeletonData, and the Third Category is the animation data which is saved within the bones inside the m_SkeletonData. The first category of Geometry data can be used alone to draw the character on screen. The pose that you will see is called the Modeling pose, in which the character was modeled. Please refer to the following figure.

Figure 3: Modelling Pose of a Character

All you have to do to draw this Pose is to render all the triangles from all the triangle groups (m_TriangleGroups) with texture applied.

The second category can be used to draw the skeleton in Bind Pose, which is the pose when the skeleton was attached to the skin.

Figure 4: Skeleton in Bind Pose

You can see in this here that the skeleton is ready to be used to transform the vertices of the Modeling pose to bring the Character in this pose. The process goes like this.

Figure 5: Process of Binding Skeleton to the Skin

The model is given to us in Modeling Pose Just like shown in Figure 5.1, we have also setup the skeleton in the Bind pose like shown in Figure 5.2, we need to transform all the vertices of the model in Figure 5.1 using the skeleton from Figure 5.2 to get the shape of Figure 5.3, this is done with the Skinning equation given later in the text, and then we render the model using textures and materials as shown in Figure 5.4.

The transformation for each bone is calculated by multiplying its Joint Matrix with the parent Bone’s World matrix. An example is given in the following figure.

Figure 6: Deriving the skeleton world matrices

In this figure the World matrix for the red bone is calculated. We always start from the root bone, since the root bone doesn’t have any parent; its world matrix becomes its joint matrix. Next we pick the next bone in the hierarchy, we get its world matrix from multiplication of the parent bone’s (root bone) world matrix (M1W) with this bone’s Joint Matrix (M2j), and this world matrix is called M2in the figure. Now we move to the next bone (red bone) and to calculate its world matrix we multiply its parent bone’s World matrix (M2W) with the red bone’s Joint matrix (M3j) and we get the Red bone’s World Matrix called (M3W). This process is repeated for each bone, taking its parent bone world matrix and multiplying its own join matrix with it, and then saving the result in its own world matrix. As you can see this process must be started from the root bone, so that we don’t have dirty world matrices while we go down.

In this model most of the vertices are influenced by more then one bone, and the influence is denoted by the weight associated with each vertex toward each bone that influences it. Without this the animation looks very rigid. Example of vertices affected by only one bone is given as follows.

Example of vertices affected by more then one bone is given as follows.

Figure 7: Vertices only effected by one bone

Example of vertices affected by more than one bone is given as follows.

Figure 8: Vertices effected by more then one bone

In the following figure you can see how the vertex weights are distributed over the vertices. Red Color vertices means high influence from the red bone, while blue color means less influence from the selected Bone (red bone), the colors in between red and blue are used for weight values between zero and one.

Figure 9: Vertices affected with different weights by the red bone

In the following sections you will see how the weights of each bone affecting a vertex are accumulated to get the final vertex position.

And the Final and Third category is the Animations data. We use the animation data to move the Skeleton of the character in different poses and then use that new pose generated by the animation data to transform the vertices of the character and draw in new pose. So all what the animation data do is to animate the skeleton and we use the animated skeleton to animate our character.

Figure 10: Animation data is applied to the skeleton to animate the skeleton

Here we can see that the Bind pose skeleton is transformed by different key frame transforms from the animation data, to define different poses. And then these poses are used to drive the skin, and transform the vertices of the character.

This was all the theory behind skeletal animation, how it is done using our CBA file data is given in the following sections.

In SetupSkeleton() we make the skeleton ready for next pose, the body of the function is as follows. And then we use that pose to setup our vertices in the new pose which is done in SetupBindPose().

void CCBA::SetupSkeleton(int a_Frame)

{

// Update the tree of bones

static CStack<int> BonesStack;

BonesStack.Push(this->m_SkeletonData->m_RootBone->m_ID);

      while (!BonesStack.Empty())
     {

          unsigned int CurrentBone = BonesStack.Pop();

          assert(CurrentBone != -1  && "Current Bone is Null");

 

          CMatrix4f WorldMatrix = *this->m_SkeletonData->m_Bones[CurrentBone]->m_JointMatrix;

 

          if (this->m_SkeletonData->m_Bones[CurrentBone]->m_NoOfKeyframes > 0/* && frame > 0*/)

          {

              assert(a_Frame < (int)this->m_SkeletonData->m_Bones[CurrentBone]->m_NoOfKeyframes && "Invalid Key frame");

 

              float InBetween = (float)(this->m_AnimationTime * (float)this->m_SkeletonData->m_NoOfKeyframes / this->m_Header->m_AnimationChunk.m_TotalTime);

              InBetween -= a_Frame;

 

              if (a_Frame <  (int)this->m_SkeletonData->m_Bones[CurrentBone]->m_NoOfKeyframes - 1)

              {

                   WorldMatrix = Interpolate(*this->m_SkeletonData->m_Bones[CurrentBone]->m_Keyframes[a_Frame]->m_Transform,

                                                          *this->m_SkeletonData->m_Bones[CurrentBone]->m_Keyframes[a_Frame + 1]->m_Transform,InBetween);

              }

              else

                   WorldMatrix = *this->m_SkeletonData->m_Bones[CurrentBone]->m_Keyframes[a_Frame]->m_Transform;

 

          }

 

          if (this->m_SkeletonData->m_Bones[CurrentBone]->HasParent())

              WorldMatrix = WorldMatrix * *this->m_SkeletonData->m_Bones[this->m_SkeletonData->m_Bones[CurrentBone]->m_ParentID]->m_WorldMatrix;

 

          *this->m_SkeletonData->m_Bones[CurrentBone]->m_WorldMatrix = WorldMatrix;

          *this->m_SkeletonData->m_Bones[CurrentBone]->m_SkinningMatrix = *this->m_SkeletonData->m_Bones[CurrentBone]->m_InverseBindMatrix * WorldMatrix;

 

          // Handle its Children

          if (this->m_SkeletonData->m_Bones[CurrentBone]->HasChildren())

          {

              unsigned int NoOfChildren = this->m_SkeletonData->m_Bones[CurrentBone]->m_ChildCount;

              for (unsigned int Index = 0; Index < NoOfChildren; Index++)

              {

                   BonesStack.Push(this->m_SkeletonData->m_Bones[CurrentBone]->GetChildAt(Index));

              }

          }

     } // While

}

In very short and very simple, all this function is doing is to take the current frame Joint Matrix for the current bone and if it’s a root bone then save that Joint matrix as world matrix for the current bone, other wise take the parent bones World matrix and multiply this bone’s Joint matrix with it and then save the result as current bone’s World Matrix. We have to start this process from the Root bone so that we don’t have dirty world matrices from previous frames in the tree. This is why a Depth first Tree Traversal is used, using a Stack. Now for each bone we have a new World Matrix for the current frame of animation. And in the same function we use this World Matrix to derive the skinning matrix for the current bone, which is used in SetupBindPose() to do the skinning, which means to attach all the vertices with the skeleton and move them with the corresponding bones. If you see SetupBindPose() you will see in the beginning the skinning calculation equation. In that equation we need have (IBMi * JMi) which means we need to multiply a bone’s Inverse Bind matrix with its World matrix so that’s what is done in SetupSkeleton() and the result is saved in advance in m_SkinningMatrix for each bone, with this we don’t have to do this multiplication for each and every vertex we need to skin to the skeleton. One other thing which we can do before hand is the (v * BSM) which is the multiplication of each vertex with the Bind Shape matrix of the skeleton. So we do that once and then use the updated vertices. The actual skinning is done in the following function.

void CCBA::SetupBindPose()

{

     /*

     The skinning calculation for each vertex v in a bind shape is

     for i to n

          v += {[(v * BSM) * IBMi * JMi] * JW}

 

     • n: The number of joints that influence vertex v

     • BSM: Bind-shape matrix

     • IBMi: Inverse bind-pose matrix of joint i

     • JMi: Transformation matrix of joint i

     • JW: Weight of the influence of joint i on vertex v

 

     I have Got (v * BSM) and (IBMi * JMi) already multiplied since they are constants

     */

     rUsInt NumberOfVertices = this->m_GeometryData->m_VerticesArraySize / 3;

     for (rUsInt CurrentVertex = 0; CurrentVertex < NumberOfVertices; CurrentVertex++)

     {

          CVector3f TempVertex;

          CVector3f TempNormal;

          CVector3f TempNormalTransform;

 

          CVector3f Vertex(  this->m_GeometryData->m_VerticesArray[(CurrentVertex * 3)    ],

                                  this->m_GeometryData->m_VerticesArray[(CurrentVertex * 3) + 1],

                                  this->m_GeometryData->m_VerticesArray[(CurrentVertex * 3) + 2]);

 

          CVector3f Normal(  this->m_GeometryData->m_NormalsArray[(CurrentVertex * 3)    ],

                                  this->m_GeometryData->m_NormalsArray[(CurrentVertex * 3) + 1],

                                  this->m_GeometryData->m_NormalsArray[(CurrentVertex * 3) + 2]);

 

          float TotalJointsWeight = 0;

          float NormalizedWeight = 0;

 

          for (rUsInt CurrentInfluence = 0; CurrentInfluence < (*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_NoOfInfluences; CurrentInfluence++)

          {

 

              TempVertex    += ((Vertex *

                   *this->m_SkeletonData->m_Bones[(*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_Joints[CurrentInfluence]]->m_SkinningMatrix) *

                   this->m_GeometryData->m_VertexWeightsArray[(*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_Weights[CurrentInfluence]]);

 

              this->m_SkeletonData->m_Bones[(*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_Joints[CurrentInfluence]]->m_SkinningMatrix->RotateVector(Normal,TempNormalTransform);

 

                  TempNormal  += TempNormalTransform * this->m_GeometryData->m_VertexWeightsArray[(*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_Weights[CurrentInfluence]];

 

                  TotalJointsWeight += this->m_GeometryData->m_VertexWeightsArray[(*this->m_GeometryData->m_VertexInfluences)[CurrentVertex]->m_Weights[CurrentInfluence]];

          }

 

          if (TotalJointsWeight != 1.0f)

          {

              NormalizedWeight = 1.0f / TotalJointsWeight;

              TempVertex *= NormalizedWeight;

              TempNormal *= NormalizedWeight;

          }

 

          this->m_GeometryData->m_SkinnedVerticesArray[(CurrentVertex * 3)    ] = TempVertex.x;

          this->m_GeometryData->m_SkinnedVerticesArray[(CurrentVertex * 3) + 1] = TempVertex.y;

          this->m_GeometryData->m_SkinnedVerticesArray[(CurrentVertex * 3) + 2] = TempVertex.z;

 

          this->m_GeometryData->m_SkinnedNormalsArray[(CurrentVertex * 3)    ] = TempNormal.x;

          this->m_GeometryData->m_SkinnedNormalsArray[(CurrentVertex * 3) + 1] = TempNormal.y;

          this->m_GeometryData->m_SkinnedNormalsArray[(CurrentVertex * 3) + 2] = TempNormal.z;

 

     }

}

If you read the comments in the beginning of the functions it says how the skinning is done on this data that we have read so far.

The skinning calculation for each vertex v in a bind shape is

for i to n

     v += {[(v * BSM) * IBMi * JMi] * JW}

• n: The number of joints that influence vertex v

• BSM: Bind-shape matrix

• IBMi: Inverse bind-pose matrix of joint i

• JMi: Transformation matrix of joint i

• JW: Weight of the influence of joint i on vertex v

I have Got (v * BSM) and (IBMi * JMi) already multiplied since they are constants

As we have discussed already I have (v * BSM) and (IBMi * JMi) already multiplied from the SetupSkeleton() function, and we run a lope for all the vertices in the character and get both the current vertex as well as current normal (remember that the normal is also pre-multiplied with Bind Shape Matrix) and we run another nested lope for each bone (influence) influencing this vertex and take its weight and m_SkinningMatrix and multiply them with the current vertex, which is already multiplied with Bind shape matrix, and then save it back in the copy of the Vertices array (m_SkinnedNormalsArray) which we talked about when we created the data structure of CGeometryData. Now if we use this changed vertex and display the character, we will see the character in the current frame’s pose. This is the simple way of doing one frame of skinning for the character, if we want to animate it for the whole animation key frames, we must iterate for all the frames over time and call SetupSkeleton() and SetupBindPose() in that order.

As we discussed before if the time falls in between two key frames then we have to do interpolation on the two transforms for those two key frames. And then use the new value of transform to setup the skeleton. But once you have done the simple form of just running the character on all the key frames only, you can take the next step and do the interpolated animations or smooth animation. For that you might also like to save the transforms in quaternion instead of matrices.

This animation process can get as much complicated as you want it to be, in these implementations that I presented in this set of tutorials you will find the simple most animations you can achieve. You don’t even need to worry about any interpolations and such until you have your character changing pose from one frame to another. Once you have achieved that, you can go for improving your animation system and introduce things like, Smooth animation, Animations Instancing system, blending two animations, Layering two animations and doing Forward Kinematics on your animations etc and it never ends :).

I hope this tutorial will help people in working with COLLADA as well as doing skeletal animations, please don’t hesitate to bust my ass with your constructive comments and criticism. You can always reach me through my email address given in the contacts section of the website.

3,974 thoughts on “Collada Tutorial

  1. 우리카지노

    That is really interesting, You are a very skilled
    blogger. I have joined your feed and stay up for seeking more of your wonderful post.
    Additionally, I’ve shared your site in my social networks

    Reply
  2. thomas467.nerobaby.com

    Hi there! I could have sworn I’ve been to this website
    before but after checking through some of the post I realized it’s new to me.

    Anyways, I’m definitely glad I found it and
    I’ll be book-marking and checking back often!

    Reply
  3. 파라오카지노

    Have you ever considered about including a little bit more than just your articles?
    I mean, what you say is important and all. However think about if you added some great photos or video clips to give your posts more,
    “pop”! Your content is excellent but with images and clips, this website could undeniably be one of
    the best in its field. Superb blog!

    Reply
  4. Oren Matthias

    Please let me know if you’re looking for a writer for your blog.
    You have some really great posts and I believe I would be a good asset.
    If you ever want to take some of the load off,
    I’d love to write some material for your blog in exchange for a link back
    to mine. Please blast me an e-mail if interested. Regards!
    by baccarat66.net

    Here is my homepage: Oren Matthias

    Reply
  5. images.google.it

    Hello there! This blog post could not be written any better!

    Reading through this post reminds me of my previous roommate!
    He always kept talking about this. I most certainly will send this
    information to him. Pretty sure he’ll have a great read. Many thanks
    for sharing! by sagaming915.com

    My homepage Manual Lattimore (images.google.it)

    Reply
  6. https://davies427.argosyinvestor.com/2020/11/14/the-true-and-tried-way-for-gambling-in-step-by-step-detail.html

    Excellent goods from you, man. I have understand your stuff previous to and you are just too great.
    I really like what you’ve acquired here, certainly like
    what you’re saying and the way in which you say it. You make it entertaining and you still care for to keep it smart.
    I can’t wait to read much more from you. This is actually a wonderful web site.

    Reply
  7. davies1058.b-luxatelier.com

    Do you mind if I quote a couple of your articles as long as
    I provide credit and sources back to your webpage?
    My blog site is in the exact same niche as yours and my visitors would definitely benefit from some of the information you provide here.
    Please let me know if this okay with you. Thanks!

    Reply
  8. clarke659.antepmasajci.com

    Hello! I could have sworn I’ve been to this website before
    but after going through a few of the articles I realized it’s new to me.
    Anyways, I’m certainly pleased I stumbled upon it and I’ll be
    book-marking it and checking back frequently!

    Reply
  9. harrison200.patinetando.com

    Just desire to say your article is as amazing.
    The clearness in your post is simply spectacular and i can assume you are
    an expert on this subject. Fine with your permission let me to grab
    your RSS feed to keep up to date with forthcoming post.

    Thanks a million and please keep up the gratifying work.

    Reply
  10. watson715.evamassagespa.com

    My spouse and I absolutely love your blog and find most
    of your post’s to be precisely what I’m looking for. Would you offer
    guest writers to write content for yourself?
    I wouldn’t mind producing a post or elaborating
    on a number of the subjects you write related to
    here. Again, awesome website!

    Reply
  11. website

    Write more, thats all I have to say. Literally, it seems as though you relied on the video to make
    your point. You obviously know what youre talking about, why throw away your intelligence on just posting videos
    to your blog when you could be giving us something enlightening to
    read?

    my site: website

    Reply
  12. website

    We’re a group of volunteers and starting a new scheme in our community.
    Your web site offered us with valuable information to work on. You’ve done an impressive job and our
    whole community will be grateful to you.

    Also visit my webpage; website

    Reply
  13. website

    Hello, i think that i saw you visited my site thus
    i got here to return the favor?.I’m trying to find issues to improve my site!I assume its
    ok to make use of a few of your ideas!!

    Feel free to visit my homepage; website

    Reply
  14. 더킹카지노

    Hello there, just became aware of your blog through Google, and found that it is truly informative.
    I am going to watch out for brussels. I’ll be grateful
    if you continue this in future. A lot of people will be benefited from
    your writing. Cheers!

    Reply
  15. 파라오카지노

    I like the helpful info you supply on your articles.
    I’ll bookmark your weblog and take a look at once
    more here frequently. I’m relatively certain I will be told
    plenty of new stuff proper here! Best of luck for the following!

    Reply
  16. 카지노사이트

    Cool blog! Is your theme custom made or did you download it from somewhere?
    A design like yours with a few simple tweeks would really make my blog jump out.
    Please let me know where you got your design. Thanks

    Reply
  17. 예스카지노

    Very nice post. I just stumbled upon your blog and wished to say
    that I have truly enjoyed surfing around your blog posts.
    In any case I will be subscribing to your rss feed and I hope you write again soon!

    Reply
  18. 더킹카지노

    Hi! I just wanted to ask if you ever have any problems with hackers?
    My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no data backup.
    Do you have any methods to prevent hackers?

    Reply
  19. cook1052.technota9adom.com

    I’ve been browsing online more than 3 hours as of late, yet I never discovered any fascinating article like yours.
    It’s pretty price sufficient for me. In my view, if all
    webmasters and bloggers made just right content material as
    you probably did, the net will likely be a lot more useful than ever before.

    Reply
  20. 카지노사이트

    I do not know if it’s just me or if perhaps everyone else encountering issues with your blog.
    It appears like some of the written text in your posts are running off
    the screen. Can someone else please comment and let me know
    if this is happening to them as well? This might be a problem with my browser because I’ve had
    this happen before. Cheers

    Reply
  21. 예스카지노

    With havin so much written content do you ever run into any issues of plagorism or copyright infringement?
    My website has a lot of exclusive content I’ve either authored myself or outsourced but it looks like a lot of it is popping
    it up all over the internet without my agreement.
    Do you know any techniques to help prevent content from being stolen? I’d genuinely appreciate it.

    Reply
  22. https://young356.datassauro.com/p/1

    I’ve been browsing online more than 3 hours today, yet I never found any interesting article like yours.
    It’s pretty worth enough for me. In my opinion, if all website owners and bloggers made good content as you did,
    the internet will be much more useful than ever before.

    Reply
  23. 더킹카지노

    When I originally commented I clicked the “Notify me when new comments are added” checkbox and
    now each time a comment is added I get several e-mails with
    the same comment. Is there any way you can remove people from that service?
    Many thanks!

    Reply
  24. wheat dust explosion

    You’re so interesting! I don’t suppose I have read a single thing like that before.
    So wonderful to find another person with some unique thoughts
    on this topic. Seriously.. many thanks for starting this up.
    This site is one thing that’s needed on the web, someone with a bit of originality!

    Feel free to surf to my blog: wheat dust explosion

    Reply
  25. 우리카지노

    I’m truly enjoying the design and layout of your site.
    It’s a very easy on the eyes which makes it
    much more enjoyable for me to come here and visit more often. Did you
    hire out a designer to create your theme? Excellent work!

    Reply
  26. Heriberto Levien

    We stumbled over here by a different web page and
    thought I might as well check things out.
    I like what I see so now i’m following you. Look forward to checking out your
    web page for a second time. by thaisoccer.org

    Also visit my web page – Heriberto Levien

    Reply
  27. smith1051.bold-ecommerce.com

    Hello there I am so glad I found your web site, I really found you by mistake, while I was researching on Digg for something else, Regardless
    I am here now and would just like to say many thanks for
    a remarkable post and a all round interesting blog (I
    also love the theme/design), I don’t have time to browse it all at the minute but I have bookmarked it and also included
    your RSS feeds, so when I have time I will be back to
    read much more, Please do keep up the excellent b.

    Reply
  28. wilso345.pitfallescape.com

    Great post. I was checking continuously this blog and I am impressed!
    Very useful information specifically the last part
    🙂 I care for such info a lot. I was looking for this
    certain information for a very long time. Thank you and good luck.

    Reply
  29. body butter

    I get pleasure from, result in I discovered exactly what I used
    to be having a look for. You have ended my 4
    day lengthy hunt! God Bless you man. Have a
    great day. Bye

    Reply
  30. https://edwards1017.tallerdepaginasweb.com/2020/11/things-you-have-to-know-about-baccarat/

    I think what you composed made a great deal of sense.

    But, consider this, suppose you typed a catchier title?
    I mean, I don’t want to tell you how to run your blog, however what if you added a post title to maybe
    get people’s attention? I mean Collada Tutorial – waZim is
    kinda plain. You might glance at Yahoo’s front page and note how they create article headlines to grab people
    interested. You might try adding a video or a related pic or
    two to get readers excited about what you’ve got to say.
    In my opinion, it would make your posts a little bit more interesting.

    Reply
  31. hall303.datassauro.com

    Whats up are using WordPress for your site platform?
    I’m new to the blog world but I’m trying to get started and create my own. Do you need any html coding knowledge to make your own blog?
    Any help would be really appreciated!

    Reply
  32. lewis999.premierekorea.com

    I’m very pleased to uncover this great site.
    I need to to thank you for your time just for this wonderful read!!

    I definitely really liked every bit of it and i also have you book marked to look at new things on your blog.

    Reply
  33. https://lewis904.roarripple.com/sports-what-is-it/

    Hello just wanted to give you a quick heads up.
    The words in your post seem to be running off the screen in Ie.
    I’m not sure if this is a formatting issue or something to do with web browser compatibility but
    I thought I’d post to let you know. The design and style
    look great though! Hope you get the problem solved soon. Many
    thanks

    Reply
  34. edwards721.ahmed3mer.com

    Wonderful blog! Do you have any hints for aspiring writers?
    I’m hoping to start my own blog soon but I’m a little lost on everything.
    Would you recommend starting with a free platform like
    Wordpress or go for a paid option? There are so many options out there that
    I’m completely confused .. Any suggestions? Thank you!

    Reply
  35. walker199.mlimat.com

    We’re a group of volunteers and starting a new scheme in our community.
    Your web site provided us with helpful information to work on. You have
    done a formidable activity and our entire community will be grateful to you.

    Reply
  36. brown786.thurstoninteriors.com

    Can I simply just say what a relief to uncover somebody who really understands what they’re discussing on the
    internet. You certainly understand how to bring a problem to light and make it important.
    More people really need to read this and understand
    this side of the story. I can’t believe you are not more popular
    since you certainly possess the gift.

    Reply
  37. wood594.cameraoo.com

    Hmm is anyone else experiencing problems with the pictures on this blog loading?
    I’m trying to determine if its a problem on my end or if
    it’s the blog. Any suggestions would be greatly appreciated.

    Reply
  38. https://williams190.jojobet135.com/2020/11/14/i-did-maybe-not-know-that-top-baccarat-of-the-decade.html

    Hey would you mind sharing which blog platform you’re working with?
    I’m looking to start my own blog in the near future but I’m having a tough time making
    a decision between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your design seems different then most blogs and I’m looking for something unique.
    P.S My apologies for getting off-topic but I had
    to ask!

    Reply
  39. website

    great post, very informative. I’m wondering why the
    opposite specialists of this sector do not understand this.
    You must proceed your writing. I’m sure, you have a huge readers’ base already!

    Look into my page … website

    Reply
  40. website

    I believe that is among the such a lot significant information for me.
    And i am happy reading your article. However
    should statement on some basic issues, The website style is perfect,
    the articles is actually nice : D. Good activity, cheers

    Reply
  41. website

    I’m really loving the theme/design of your site.
    Do you ever run into any internet browser compatibility problems?
    A handful of my blog readers have complained about my blog
    not working correctly in Explorer but looks great in Chrome.
    Do you have any ideas to help fix this issue?

    My website website

    Reply
  42. website

    I like the valuable info you supply on your articles.
    I’ll bookmark your weblog and test again here regularly.
    I’m moderately sure I will learn lots of new stuff proper right here!
    Best of luck for the following!

    my website; website

    Reply
  43. excel 2019 courses

    First off I would like to say excellent blog!
    I had a quick question that I’d like to ask if you do not mind.
    I was interested to know how you center yourself and clear
    your thoughts before writing. I have had difficulty clearing
    my thoughts in getting my ideas out there. I truly
    do enjoy writing however it just seems like the first 10 to 15 minutes are generally lost simply just trying to figure
    out how to begin. Any recommendations or hints? Appreciate it!

    my blog post … excel 2019 courses

    Reply
  44. MCSA web applications

    Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet
    my newest twitter updates. I’ve been looking for a plug-in like this for quite some time and was hoping
    maybe you would have some experience with something like
    this. Please let me know if you run into anything. I truly enjoy
    reading your blog and I look forward to your new updates.

    Feel free to surf to my blog post :: MCSA web applications

    Reply
  45. comptia cysa certification

    Have you ever considered about adding a little bit more than just your articles?

    I mean, what you say is important and everything.
    However just imagine if you added some great visuals or videos to give your posts more, “pop”!
    Your content is excellent but with images and clips, this site
    could definitely be one of the best in its niche. Very good blog!

    Feel free to surf to my website: comptia cysa certification

    Reply
  46. watson603.kepoinaja.com

    We absolutely love your blog and find a lot of your post’s to be what
    precisely I’m looking for. Would you offer
    guest writers to write content to suit your needs?

    I wouldn’t mind writing a post or elaborating on most of
    the subjects you write with regards to here.
    Again, awesome weblog!

    Reply
  47. w88casino

    I’m not that much of a online reader to be honest but your sites really nice, keep it up!
    I’ll go ahead and bookmark your website to come back down the road.
    Many thanks

    Here is my blog post w88casino

    Reply
  48. green484.estenisa.com

    I am extremely impressed with your writing skills and also with the layout on your weblog.

    Is this a paid theme or did you modify it yourself? Anyway keep
    up the excellent quality writing, it is rare to see a great blog like this one
    nowadays.

    Reply
  49. jones180.tinrahan.com

    Hi there, just became alert to your blog through Google, and found that it’s truly informative.
    I am gonna watch out for brussels. I will appreciate if you continue
    this in future. A lot of people will be benefited from your writing.
    Cheers!

    Reply
  50. prediksi sgp

    Thank you for another informative site. Where else may I
    am getting that type of information written in such a perfect means?
    I have a undertaking that I am simply now running on, and I have been at
    the glance out for such info.

    My homepage – prediksi sgp

    Reply
  51. smith1086.interturkeysosyal.com

    Have you ever thought about writing an e-book or guest authoring on other blogs?
    I have a blog centered on the same ideas you discuss and would love to have you share some stories/information. I know my subscribers would enjoy your work.
    If you are even remotely interested, feel free to send me an email.

    Reply
  52. https://clark274.antepmasajci.com/archives/1

    Hmm it looks like your site ate my first comment (it was super long) so I guess I’ll just sum it up what
    I submitted and say, I’m thoroughly enjoying your blog.
    I as well am an aspiring blog writer but I’m still new to everything.
    Do you have any suggestions for rookie blog writers?
    I’d genuinely appreciate it.

    Reply
  53. clark958.wonodds35.com

    Hey! I could have sworn I’ve been to this website before but after checking through some of the post I realized it’s new to me.
    Anyhow, I’m definitely glad I found it and I’ll be bookmarking and checking back
    often!

    Reply
  54. zuchero06

    I think that is among the most significant info for me.
    And i am satisfied reading your article. However should observation on few general issues, The web
    site style is great, the articles is in reality excellent :
    D. Just right job, cheers

    Here is my blog post :: zuchero06

    Reply
  55. zuchero05

    Hello! I know this is kinda off topic but I’d figured I’d ask.

    Would you be interested in exchanging links or maybe guest authoring a blog article
    or vice-versa? My site discusses a lot of the same subjects as yours
    and I think we could greatly benefit from each other. If you happen to be interested
    feel free to send me an email. I look forward to hearing from you!
    Awesome blog by the way!

    Feel free to visit my web blog :: zuchero05

    Reply
  56. zuchero04

    Today, I went to the beachfront with my kids. I found a sea shell and gave it to my 4 year old
    daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear
    and screamed. There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this is completely off
    topic but I had to tell someone!

    Here is my web-site :: zuchero04

    Reply
  57. zuchero01

    Magnificent goods from you, man. I’ve understand your stuff previous to and you are just too great.
    I actually like what you have acquired here, certainly like what you
    are stating and the way in which you say it. You make it entertaining and you still care for to keep it sensible.
    I can not wait to read far more from you. This is really a terrific website.

    Also visit my blog post zuchero01

    Reply
  58. zuchero03

    Hi there just wanted to give you a quick heads up.
    The words in your article seem to be running off the
    screen in Firefox. I’m not sure if this is a format issue or something to do with web browser compatibility but I thought I’d post to let you know.

    The layout look great though! Hope you get the issue fixed soon. Cheers

    my page zuchero03

    Reply
  59. https://carter556.direct2pay.com/p/1

    Unquestionably believe that which you said.
    Your favorite reason appeared to be on the web the simplest thing to be aware of.
    I say to you, I certainly get annoyed while people consider worries that they just do not know about.
    You managed to hit the nail upon the top as well as defined
    out the whole thing without having side effect
    , people could take a signal. Will likely be back to get more.

    Thanks

    Reply
  60. سنگ کوارتز

    Fantastic blog! Do you have any hints for aspiring writers?
    I’m hoping to start my own blog soon but I’m a little
    lost on everything. Would you advise starting with a free platform like WordPress or go for a paid
    option? There are so many options out there that I’m completely confused ..
    Any recommendations? Thanks!

    my website سنگ کوارتز

    Reply
  61. private school near me

    My spouse and I absolutely love your blog and find many of your
    post’s to be exactly what I’m looking for.
    can you offer guest writers to write content for you personally?
    I wouldn’t mind publishing a post or elaborating
    on a lot of the subjects you write related to here.

    Again, awesome website!

    Also visit my blog – private school near me

    Reply
  62. free slots codes

    I’m not sure where you’re getting your information, but good
    topic. I needs to spend some time learning more or understanding more.
    Thanks for excellent information I was looking for this
    information for my mission.

    Here is my web site … free slots codes

    Reply
  63. moore957.onlinebrs.com

    Oh my goodness! Amazing article dude! Thank you, However I am experiencing troubles with your RSS.
    I don’t understand why I am unable to subscribe to it.

    Is there anybody else having similar RSS issues? Anybody who knows the solution can you kindly respond?

    Thanks!!

    Reply
  64. turner809.simoorghshop.com

    I just like the valuable information you provide to
    your articles. I’ll bookmark your weblog and check again right here frequently.
    I am rather sure I’ll be told many new stuff proper here!
    Best of luck for the following!

    Reply
  65. Orange County Concrete Pavers

    hey there and thank you for your info – I have certainly picked up something new from right here.
    I did however expertise several technical points using this
    web site, since I experienced to reload the site many times previous to I
    could get it to load properly. I had been wondering if your
    web hosting is OK? Not that I’m complaining, but sluggish loading instances times will sometimes affect your placement in google and could damage your high-quality
    score if advertising and marketing with Adwords. Anyway
    I am adding this RSS to my e-mail and can look out for much more of your respective
    interesting content. Make sure you update this again very soon.

    my web-site: Orange County Concrete Pavers

    Reply
  66. ww88

    I have read so many content on the topic of the blogger lovers
    except this post is genuinely a fastidious article, keep it up.

    Feel free to surf to my page – ww88

    Reply
  67. voltrove v3

    After I originally commented I appear to have clicked on the -Notify me when new comments are added-
    checkbox and from now on whenever a comment is added I recieve
    four emails with the exact same comment. Perhaps there is a means you can remove me from
    that service? Appreciate it!

    my page: voltrove v3

    Reply
  68. roberts521.turnkeyledger.com

    Hello! This post could not be written any better!

    Reading through this post reminds me of my good old room mate!
    He always kept chatting about this. I will forward this post to him.
    Fairly certain he will have a good read. Thanks for sharing!

    Reply
  69. ww88

    You could certainly see your enthusiasm within the article you write.
    The arena hopes for even more passionate writers like you who
    are not afraid to mention how they believe. At all times go after your heart.

    Stop by my blog: ww88

    Reply
  70. commercial fitness equipment

    I don’t know whether it’s just me or if everybody else encountering problems with
    your site. It looks like some of the written text in your posts are running off the
    screen. Can somebody else please comment and let me know if this is happening to
    them too? This might be a issue with my internet browser because I’ve had this happen previously.
    Thanks

    Feel free to surf to my homepage :: commercial fitness equipment

    Reply
  71. 우리카지노

    Greate article. Keep writing such kind of info on your page.
    Im really impressed by it.
    Hi there, You’ve performed an excellent job.

    I will certainly digg it and personally suggest to my friends.

    I’m confident they will be benefited from this site.

    my web site; 우리카지노

    Reply
  72. Submit your music

    Appreciating the time and effort you put into Submit your music blog and detailed information you present.
    It’s awesome to come across a blog every once in a while that isn’t the same unwanted
    rehashed material. Excellent read! I’ve saved your site and I’m including your RSS feeds to my
    Google account.

    Reply
  73. campbell978.dokukoleji.com

    Howdy! This post could not be written any better! Reading this post
    reminds me of my good old room mate! He always kept talking
    about this. I will forward this post to him. Fairly certain he will have a good
    read. Many thanks for sharing!

    Reply
  74. turner746.patinetando.com

    Howdy! Quick question that’s totally off topic. Do you know how to make your site mobile friendly?
    My blog looks weird when viewing from my apple iphone.
    I’m trying to find a template or plugin that might be
    able to resolve this problem. If you have any suggestions, please share.
    Cheers!

    Reply
  75. adams595.thietbispatot.com

    This design is steller! You definitely know how to keep a reader amused.
    Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Wonderful job.

    I really enjoyed what you had to say, and more than that, how you
    presented it. Too cool!

    Reply
  76. Anessa B

    What’s up?

    I found this article very interesting…please read!

    Do you remember the blockbuster hit film The Matrix that was released in 1999? You may not know this, but it has deep spiritual implications concerning the times we are living in and Bible prophecy.

    It tells a story of how these “agents” are trying to turn us into machines. We are closer then ever before for this to become a reality when they cause us to receive an implantable microchip in our body during a time when physical money will be no more.

    You may have seen on NBC news concerning the implantable RFID microchip that some people are getting put in their hand to make purchases, but did you know this microchip matches perfectly with prophecy in the Bible?

    “He (the false prophet who deceives many by his miracles) causes all, both small and great, rich and poor, free and slave, to receive a mark on their right hand or on their foreheads, and that no one may buy or sell except one who has the mark or the name of the beast, or the number of his name…

    You also may have heard of the legendary number “666” that people have been speculating for possibly thousands of years on what it actually means. This article shares something I haven’t seen before, and I don’t think there could be any better explanation for what it means to calculate 666. This is no hoax. Very fascinating stuff!

    …Here is wisdom. Let him who has understanding calculate the number of the beast, for it is the number of a man: His number is 666″ (Revelation 13:16-18 NKJV).

    To see all the details showing why the Bible foretold of all these things, check out this article!

    Article: https://biblewoke.com/rfid-mark-of-the-beast-666-revealed

    GOD is sending out His end time warning:

    “Then a third angel followed them, saying with a loud voice, ‘If anyone worships the beast and his image, and receives his mark on his forehead or on his hand, he himself shall also drink of the wine of the wrath of God, which is poured out full strength into the cup of His indignation. He shall be tormented with fire and brimstone in the presence of the holy angels and in the presence of the Lamb. And the smoke of their torment ascends forever and ever; and they have no rest day or night, who worship the beast and his image, and whoever receives the mark of his name'” (Revelation 14:9-11).

    In the Islamic religion they have man called the Mahdi who is known as their messiah of whom they are waiting to take the stage. There are many testimonies from people online who believe this man will be Barack Obama who is to be the biblical Antichrist based off dreams they have received. I myself have had strange dreams about him like no other person. So much so that I decided to share this information.

    He came on stage claiming to be a Christian with no affiliation to the Muslim faith…

    “In our lives, Michelle and I have been strengthened by our Christian faith. But there have been times where my faith has been questioned — by people who don’t know me — or they’ve said that I adhere to a different religion, as if that were somehow a bad thing,” – Barack Obama

    …but was later revealed by his own family members that he indeed is a devout Muslim.

    So what’s in the name? The meaning of someones name can say a lot about a person. God throughout history has given names to people that have a specific meaning tied to their lives. How about the name Barack Obama? Let us take a look at what may be hiding beneath the surface…

    “And He (Jesus) said to them (His disciples), ‘I saw Satan fall like lightning from heaven'” (Luke 10:18).

    In the Hebrew language we can uncover the meaning behind the name Barack Obama.

    Barack, also transliterated as Baraq, in Hebrew is: lightning

    baraq – Biblical definition:

    From Strongs H1299; lightning; by analogy a gleam; concretely a flashing sword: – bright, glitter (-ing, sword), lightning. (Strongs Hebrew word H1300 baraq baw-rawk’)

    Barak ‘O’bamah, The use of bamah is used to refer to the “heights” of Heaven.

    bamah – Biblical definition:

    From an unused root (meaning to be high); an elevation: – height, high place, wave. (Strongs Hebrew word H1116 bamah baw-maw’)

    The day following the election of Barack Obama (11/04/08), the winning pick 3 lotto numbers in Illinois (Obama’s home state) for 11/5/08 were 666.

    Obama was a U.S. senator for Illinois, and his zip code was 60606.

    Seek Jesus while He may be found…repent, confess and forsake your sins and trust in the savior! Jesus says we must be born again by His Holy Spirit to enter the kingdom of God…God bless!

    Reply
  77. https://clarke313.classicroyalgroup.com/2020/11/16/what-does-slot-machines-mean.html

    Hello! I know this is kinda off topic however , I’d figured I’d ask.
    Would you be interested in trading links or maybe guest writing a blog post or vice-versa?
    My site addresses a lot of the same subjects as yours and I feel we could
    greatly benefit from each other. If you might be interested feel free to
    send me an email. I look forward to hearing from you! Excellent blog
    by the way!

    Reply
  78. turner770.mohtafa.com

    I loved as much as you’ll receive carried out right here.
    The sketch is tasteful, your authored subject matter
    stylish. nonetheless, you command get bought an edginess over
    that you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same
    nearly very often inside case you shield this hike.

    Reply
  79. clarke528.hayaletvitrinmankeni.com

    Write more, thats all I have to say. Literally, it seems
    as though you relied on the video to make your point.
    You obviously know what youre talking about,
    why waste your intelligence on just posting videos to your blog when you could be giving us something informative to read?

    Reply
  80. campbell924.premierekorea.com

    I’d like to thank you for the efforts you’ve put in writing this website.
    I really hope to view the same high-grade content by you later on as well.
    In truth, your creative writing abilities has encouraged
    me to get my very own site now 😉

    Reply
  81. mitchell702.off9shop.com

    You’re so cool! I don’t suppose I’ve read through something like this before.
    So good to discover somebody with unique thoughts on this
    subject matter. Really.. thank you for starting this up.
    This site is one thing that’s needed on the web, someone with a little originality!

    Reply
  82. carter282.tnios.com

    Howdy would you mind stating which blog platform you’re working with?
    I’m planning to start my own blog soon but I’m having a
    hard time making a decision between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your design seems different then most blogs and
    I’m looking for something unique. P.S My apologies
    for being off-topic but I had to ask!

    Reply
  83. 메리트카지노

    May I simply just say what a comfort to uncover somebody that truly understands what they
    are discussing online. You certainly know how to bring an issue to
    light and make it important. A lot more people need to read this and understand this
    side of the story. I was surprised that you are not
    more popular given that you surely have the gift.

    Here is my blog post … 메리트카지노

    Reply
  84. 우리카지노

    Excellent post. I was checking constantly this blog and I’m
    impressed! Very useful info specifically the last part 🙂 I care
    for such information much. I was seeking this particular info for a long time.
    Thank you and good luck.

    my web-site … 우리카지노

    Reply
  85. accounting services

    Its like you read my mind! You seem to know so much about this, like
    you wrote the book in it or something. I think that you
    could do with some pics to drive the message home a bit, but other than that, this is magnificent blog.
    A great read. I will certainly be back.

    Feel free to visit my page :: accounting services

    Reply
  86. Insurance

    I got this web site from my buddy who informed me regarding this
    web site and now this time I am visiting this website and reading
    very informative articles or reviews at this time.

    Check out my blog post; Insurance

    Reply
  87. 우리카지노

    I’m truly enjoying the design and layout of your website.
    It’s a very easy on the eyes which makes it much more enjoyable for me to come here and visit more
    often. Did you hire out a designer to create your theme?
    Excellent work!

    My web page … 우리카지노

    Reply
  88. carter573.tnios.com

    That is very fascinating, You’re a very skilled blogger. I’ve joined your rss feed and sit up
    for seeking extra of your excellent post. Also,
    I’ve shared your site in my social networks

    Reply
  89. data sgp 2021

    Have you ever thought about creating an e-book
    or guest authoring on other websites? I have a blog based on the same topics you discuss and would really like to have
    you share some stories/information. I know my readers would
    enjoy your work. If you are even remotely interested, feel free to shoot me an email.

    Also visit my web-site … data sgp 2021

    Reply
  90. data sgp 2021

    Attractive section of content. I just stumbled upon your site and in accession capital to assert that I
    get in fact enjoyed account your blog posts. Any way I’ll be subscribing to your augment and
    even I achievement you access consistently rapidly.

    Look into my page; data sgp 2021

    Reply
  91. somin

    You actually make it appear really easy together with your
    presentation however I in finding this matter to be
    really something which I think I’d by no means understand.
    It kind of feels too complicated and extremely
    huge for me. I’m looking forward to your next post, I’ll try to get the hold of it!

    Also visit my site … somin

    Reply
  92. carter248.alexreissjewelry.com

    Great post. I was checking continuously this blog and I am
    impressed! Extremely useful info specially the last part :
    ) I care for such information a lot. I was looking for this particular information for a
    long time. Thank you and good luck.

    Reply
  93. young948.ibeautycool.com

    Definitely consider that which you said. Your favorite reason seemed to be on the net the easiest factor to take
    into accout of. I say to you, I definitely get irked even as people think about worries that they just do not recognise
    about. You controlled to hit the nail upon the
    top as smartly as outlined out the whole thing without having
    side-effects , other folks can take a signal. Will probably be
    again to get more. Thank you

    Reply
  94. data sgp 2021

    You actually make it appear really easy together with your presentation however I in finding
    this matter to be actually something that I believe I’d
    never understand. It sort of feels too complex and extremely large for
    me. I’m looking forward in your next post, I will attempt to get the grasp of it!

    My webpage data sgp 2021

    Reply
  95. sterling silver ring

    Howdy this is kinda of off topic but I was wanting to know if blogs use WYSIWYG editors or
    if you have to manually code with HTML. I’m starting a blog soon but have
    no coding experience so I wanted to get guidance from someone with experience.
    Any help would be enormously appreciated!

    my web site – sterling silver ring

    Reply
  96. shanexekr050.hatenablog.com

    Woah! I’m really loving the template/theme of this website.
    It’s simple, yet effective. A lot of times it’s challenging to
    get that “perfect balance” between user friendliness and visual appeal.
    I must say you have done a awesome job with this. Additionally, the blog
    loads very fast for me on Chrome. Excellent Blog!

    Reply
  97. SidRMedicine

    Howdy! I know this is kinda off topic nevertheless I’d figured I’d ask.
    Would you be interested in trading links or maybe guest writing a blog
    article or vice-versa? My blog addresses a lot of the same subjects
    as yours and I think we could greatly benefit from each other.

    If you might be interested feel free to send me an e-mail.
    I look forward to hearing from you! Excellent blog by the way!

    Check out my web-site – SidRMedicine

    Reply
  98. Let's Write a Musical

    Just want to say your article is as amazing. The clearness in your post is simply great and i could assume you are an expert on this subject.
    Fine with your permission let me to grab your feed to keep up to date with forthcoming post.
    Thanks Let’s Write a Musical million and please continue the gratifying work.

    Reply
  99. landenxyun866.theglensecret.com

    Definitely believe that which you said. Your favourite reason appeared to be on the internet the easiest thing to take into accout of.
    I say to you, I definitely get annoyed at the same time as
    other folks consider issues that they just do not know about.
    You controlled to hit the nail upon the top as well
    as defined out the entire thing with no need side effect
    , folks can take a signal. Will probably be again to get more.
    Thank you

    Reply
  100. Rental Cleaning Melbourne

    I absolutely love your blog and find almost all of your post’s
    to be exactly what I’m looking for. Does one offer guest writers to write content
    available for you? I wouldn’t mind publishing a post or elaborating on a number of the subjects you write in relation to here.
    Again, awesome web site!

    Take a look at my web page; Rental Cleaning Melbourne

    Reply
  101. Used pickups for sale

    I loved as much as you’ll receive carried out right here.
    The sketch is attractive, your authored material stylish. nonetheless, you command get bought an impatience over that you
    wish be delivering the following. unwell unquestionably come more formerly again as
    exactly the same nearly a lot often inside case you shield this hike.

    My blog post :: Used pickups for sale

    Reply
  102. Used hilux

    Hello just wanted to give you a quick heads up
    and let you know a few of the images aren’t
    loading correctly. I’m not sure why but I think its a linking issue.
    I’ve tried it in two different internet browsers and both show the same results.

    Here is my site: Used hilux

    Reply
  103. somin collagen

    I think that everything posted was actually very reasonable.

    But, what about this? suppose you added a little information?
    I mean, I don’t wish to tell you how to run your blog, however
    suppose you added something that makes people want more?
    I mean Collada Tutorial – waZim is kinda boring. You ought to peek at
    Yahoo’s front page and watch how they create post titles
    to grab viewers to open the links. You might add a related video or
    a pic or two to grab people interested about what you’ve written.
    In my opinion, it might make your website a little bit more interesting.

    my webpage … somin collagen

    Reply
  104. postheaven.net

    Hey there would you mind letting me know which
    webhost you’re using? I’ve loaded your blog in 3 different internet browsers
    and I must say this blog loads a lot faster then most.
    Can you suggest a good web hosting provider at a fair price?

    Cheers, I appreciate it!

    Reply
  105. www.liveinternet.ru

    I believe everything posted was actually very logical.

    However, what about this? what if you were to write a awesome post title?
    I am not saying your information isn’t good., but suppose you added a title that makes people want more?
    I mean Collada Tutorial – waZim is kinda plain. You should glance
    at Yahoo’s home page and see how they create article titles to get
    people to open the links. You might try adding a video
    or a pic or two to get readers excited about what you’ve written. Just my opinion,
    it might bring your blog a little bit more interesting.

    Reply
  106. 우리카지노

    Hello! This is my 1st comment here so I just wanted to give a quick
    shout out and say I genuinely enjoy reading your articles.
    Can you recommend any other blogs/websites/forums that deal with the same topics?

    Thank you so much!

    Reply
  107. 바카라

    I do not know whether it’s just me or if perhaps everyone else experiencing problems with your blog.
    It appears as if some of the written text on your content are
    running off the screen. Can somebody else please provide feedback and let me know if this is happening to
    them too? This might be a issue with my web browser because I’ve had this happen before.
    Cheers

    Reply
  108. 휴게텔

    Thanks for another informative website. Where else may just I get that type of info
    written in such a perfect manner? I have a undertaking that I am just now operating on,
    and I’ve been at the look out for such info.

    Reply
  109. 바카라사이트

    Greetings from California! I’m bored to tears at work so I decided to check out your blog on my iphone during lunch break.
    I really like the info you present here and can’t wait to take a look when I get home.
    I’m shocked at how fast your blog loaded on my mobile ..
    I’m not even using WIFI, just 3G .. Anyways, awesome site!

    Reply
  110. b3.zcubes.com

    We stumbled over here coming from a different website and thought
    I may as well check things out. I like what I see so
    i am just following you. Look forward to looking into your web page for a second time.

    Reply
  111. reidcldu955.lucialpiazzale.com

    Its like you learn my mind! You seem to grasp
    a lot approximately this, like you wrote the ebook in it
    or something. I think that you simply can do with some p.c.
    to force the message house a bit, but other than that, that is excellent blog.
    A fantastic read. I’ll definitely be back.

    Reply
  112. https://rocterm.ua

    hi!,I like your writing very much! share we keep in touch more approximately your post
    on AOL? I require an expert in this area to solve my problem.
    May be that’s you! Taking a look ahead to peer you.

    Reply
  113. section-5fa859522ca33

    This is very interesting, You’re an excessively skilled blogger.
    I have joined your feed and look ahead to looking for
    more of your wonderful post. Also, I’ve shared your web site in my social networks

    Reply
  114. หวย

    With havin so much content do you ever run into any problems of plagorism or copyright infringement?

    My website has a lot of unique content I’ve either authored myself or outsourced but it seems a
    lot of it is popping it up all over the internet without my agreement.

    Do you know any techniques to help protect against content
    from being stolen? I’d truly appreciate it.

    Reply
  115. 우리카지노

    Sweet blog! I found it while surfing around on Yahoo News.
    Do you have any suggestions on how to get listed in Yahoo News?

    I’ve been trying for a while but I never seem to get there!
    Appreciate it

    Reply
  116. diigo.com

    Aw, this was a very nice post. Spending some time and actual effort to create a superb article… but
    what can I say… I put things off a lot and don’t seem to get nearly anything done.

    Reply
  117. b3.zcubes.com

    Hi! I could have sworn I’ve been to this web
    site before but after looking at some of the posts I realized it’s new to me.
    Anyways, I’m certainly happy I found it and I’ll be bookmarking it and checking back frequently!

    Reply
  118. https://pbase.com/topics/devaldyxxr/kajinoas650

    Simply wish to say your article is as astonishing.
    The clarity to your post is just spectacular
    and that i can assume you’re a professional in this
    subject. Fine together with your permission let me to seize your RSS feed to keep updated with forthcoming post.
    Thank you a million and please keep up the rewarding work.

    Reply
  119. https://tullydanzer40.wixsite.com/manuelhsxh350/post/20-best-tweets-of-all-time-about-kajino

    hey there and thank you for your info – I’ve definitely picked up something new from right here.
    I did however expertise some technical points using this
    website, as I experienced to reload the website a lot of times previous to I could get it to
    load correctly. I had been wondering if your web host is OK?

    Not that I’m complaining, but slow loading instances times will very frequently affect your placement in google and could damage your high-quality
    score if advertising and marketing with Adwords.
    Anyway I am adding this RSS to my email and can look out for a lot more
    of your respective interesting content. Ensure that you update this again very soon.

    Reply
  120. felixpkba564.tearosediner.net

    Great post. I was checking continuously this blog and I am impressed!

    Extremely useful information particularly the last part 🙂 I care for such
    info a lot. I was looking for this particular info for a long time.
    Thank you and good luck.

    Reply
  121. remingtonajtf114.shutterfly.com

    Does your site have a contact page? I’m having problems locating it but,
    I’d like to shoot you an email. I’ve got some ideas for your blog
    you might be interested in hearing. Either way, great blog and I
    look forward to seeing it grow over time.

    Reply
  122. gobnetbspo.nation2.com

    Thanks for some other informative web site. The place
    else may I am getting that kind of info written in such a
    perfect manner? I’ve a project that I’m just now running on, and I have been on the glance out for such
    information.

    Reply
  123. zenwriting.net

    Can I simply just say what a comfort to discover somebody that truly understands what
    they are discussing on the web. You certainly know how to bring a problem to light and
    make it important. More and more people must check this out and understand this side
    of the story. I was surprised that you aren’t more popular
    given that you definitely have the gift.

    Reply
  124. section-5fa86c23559cf

    Have you ever considered writing an ebook or guest authoring on other sites?
    I have a blog based on the same information you discuss
    and would really like to have you share some stories/information. I know my subscribers would appreciate your work.
    If you are even remotely interested, feel free to send
    me an e mail.

    Reply
  125. www.liveinternet.ru

    Good day! Do you know if they make any plugins to assist with SEO?
    I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good success.
    If you know of any please share. Cheers!

    Reply
  126. finntnfi779.fotosdefrases.com

    of course like your website but you need to check the spelling on quite a few of your posts.
    Many of them are rife with spelling problems and I find it very troublesome to tell the truth then again I will definitely come back again.

    Reply
  127. donovanyuyk856.hatenablog.com

    I’m truly enjoying the design and layout of your
    site. It’s a very easy on the eyes which makes it much more pleasant for
    me to come here and visit more often. Did you hire out a designer to create your theme?
    Exceptional work!

    Reply
  128. arthurglbn245.edublogs.org

    I know this if off topic but I’m looking into starting my own weblog and was curious what all is needed to get setup?

    I’m assuming having a blog like yours would cost a pretty penny?
    I’m not very internet smart so I’m not 100% positive.
    Any tips or advice would be greatly appreciated. Thank you

    Reply
  129. collagen

    Good day! This is my first comment here so I just wanted to
    give a quick shout out and tell you I genuinely enjoy reading through your posts.
    Can you recommend any other blogs/websites/forums that cover the
    same subjects? Thanks for your time!

    Feel free to visit my webpage: collagen

    Reply
  130. andreslbnv697.tearosediner.net

    obviously like your website however you have to take a look at the spelling on quite a few of your posts.
    Many of them are rife with spelling problems and I
    to find it very troublesome to tell the reality on the other hand
    I will surely come back again.

    Reply
  131. writeablog.net

    Thanks for the auspicious writeup. It if truth be told was once
    a amusement account it. Look complicated to more introduced agreeable
    from you! However, how can we be in contact?

    Reply
  132. johnathanazaw790.lowescouponn.com

    Hello, i read your blog occasionally and i own a similar one and i was just wondering if you get a lot of spam responses?
    If so how do you reduce it, any plugin or anything you can advise?

    I get so much lately it’s driving me crazy so any assistance is very much
    appreciated.

    Reply
  133. edwindvnz322.iamarrows.com

    I have been surfing online greater than three hours
    today, yet I never discovered any interesting article like yours.
    It’s beautiful value enough for me. In my opinion, if all web owners and
    bloggers made good content material as you
    did, the internet can be much more useful than ever before.

    Reply
  134. arthurglbn245.edublogs.org

    What i don’t understood is in fact how you are no longer really much more smartly-preferred than you might be now.

    You’re so intelligent. You understand therefore considerably relating
    to this subject, produced me for my part imagine
    it from numerous various angles. Its like men and women don’t
    seem to be fascinated until it is something to do with Lady gaga!

    Your personal stuffs excellent. Always care for it up!

    Reply
  135. marine collagen

    You’re so interesting! I don’t suppose I’ve read through something like that before.
    So great to find someone with a few genuine thoughts on this subject matter.

    Really.. thank you for starting this up. This website is something that is
    needed on the internet, someone with a little originality!

    Feel free to visit my website – marine collagen

    Reply
  136. blogfreely.net

    Someone essentially lend a hand to make seriously posts I would
    state. This is the very first time I frequented your website page and thus far?
    I amazed with the analysis you made to make this actual publish incredible.
    Great job!

    Reply
  137. www.evernote.com

    Hey there are using WordPress for your site platform?
    I’m new to the blog world but I’m trying to get started and set up my own. Do you need any html coding knowledge to
    make your own blog? Any help would be greatly appreciated!

    Reply
  138. liquid collagen

    Hey there would you mind letting me know which hosting company you’re
    utilizing? I’ve loaded your blog in 3 different browsers and I must say this blog loads
    a lot faster then most. Can you suggest a good internet hosting provider at a honest
    price? Thanks a lot, I appreciate it!

    my site – liquid collagen

    Reply
  139. Home security

    I was curious if you ever thought of changing the layout of your website?
    Its very well written; I love what youve got to say.
    But maybe you could a little more in the way of content so people could connect with
    it better. Youve got an awful lot of text for only having 1 or two pictures.
    Maybe you could space it out better?

    Feel free to visit my homepage; Home security

    Reply
  140. b3.zcubes.com

    Usually I don’t learn post on blogs, but I would like to say that this write-up very forced me to check out and do so!
    Your writing taste has been amazed me. Thank you, quite great post.

    Reply
  141. remingtonajtf114.shutterfly.com

    I know this if off topic but I’m looking into starting my own weblog and was wondering what all
    is required to get setup? I’m assuming having a blog like yours would cost
    a pretty penny? I’m not very web smart so I’m not 100% certain. Any tips or advice would
    be greatly appreciated. Thank you

    Reply
  142. Open boating

    Good day! This post could not be written any better!

    Reading this post reminds me of my previous room
    mate! He always kept talking about this. I will forward this article to him.
    Pretty sure he will have a good read. Thank you for sharing!

    my homepage – Open boating

    Reply
  143. Open boating

    I am not sure where you’re getting your info, but great topic.
    I needs to spend some time learning much more or understanding more.

    Thanks for magnificent information I was looking for this info for my mission.

    Feel free to visit my homepage :: Open boating

    Reply
  144. boats for sale

    You actually make it seem so easy with your presentation but I find this
    matter to be really something that I think I would never understand.
    It seems too complex and very broad for me. I’m looking
    forward boats for sale your next post, I’ll try to get the hang of it!

    Reply
  145. https://knoxthag415.creatorlink.net/a-kajino-success-story-youll-never

    I’ve been exploring for a little for any high quality articles or weblog posts in this kind
    of space . Exploring in Yahoo I ultimately stumbled upon this website.
    Studying this information So i am glad to show that I have
    an incredibly just right uncanny feeling I came upon exactly what I needed.
    I most surely will make sure to do not put out of your mind
    this site and give it a look regularly.

    Reply
  146. keeganbfvu511.hatenablog.com

    Having read this I thought it was really informative.

    I appreciate you spending some time and effort to put this short article together.
    I once again find myself personally spending way too much time both reading and
    commenting. But so what, it was still worth it!

    Reply
  147. garrettultc876.edublogs.org

    Hi, I think your website could be having web browser compatibility issues.
    When I look at your website in Safari, it looks fine however,
    if opening in Internet Explorer, it’s got some overlapping issues.

    I simply wanted to provide you with a quick heads up!

    Besides that, wonderful blog!

    Reply
  148. mylesuaqr927.creatorlink.net

    Attractive component of content. I simply stumbled upon your blog and in accession capital to assert that
    I acquire in fact enjoyed account your weblog posts.
    Any way I’ll be subscribing on your feeds or even I achievement you get right of
    entry to consistently fast.

    Reply
  149. DSLR camera search

    Excellent goods from you, man. I’ve understand your stuff previous to
    and you are just extremely wonderful. I really like what you’ve acquired here, really like what you
    are saying and the way in which you say it. You make it enjoyable and you still take care of
    to keep it sensible. I can not wait to read much more from
    you. This is actually a terrific site.

    My site :: DSLR camera search

    Reply
  150. Workshops Plus Courses

    Can I just say what a comfort to discover an individual who genuinely knows what they’re discussing on the net.
    You definitely know how to bring an issue to light and make it important.
    A lot more people really need to read this and understand this side of your story.
    I can’t believe you are not more popular because you definitely have the gift.

    Feel free to surf to my site; Workshops Plus Courses

    Reply
  151. sony

    I’m pretty pleased to discover this site. I want to to
    thank you for ones time for this particularly wonderful read!!
    I definitely loved every little bit of it and i also
    have you saved as a favorite to check out new things
    in your web site.

    My web site … sony

    Reply
  152. b707 pill

    I believe everything posted was actually very reasonable.
    But, what about this? suppose you added a little content?

    I mean, I don’t want to tell you how to run your website, however suppose you
    added a post title that grabbed people’s attention? I mean Collada Tutorial – waZim is a little vanilla.
    You should peek at Yahoo’s front page and note how they
    create article headlines to get people to click. You might add a related
    video or a picture or two to get readers excited about what you’ve written. In my opinion, it might bring your blog a little livelier.

    my web page :: b707 pill

    Reply
  153. no text

    Hey there just wanted to give you a quick heads up. The no text in your
    content seem to be running off the screen in Ie. I’m not sure if this
    is a format issue or something to do with browser compatibility but I figured I’d post to let you know.
    The design look great though! Hope you get the issue resolved
    soon. Cheers

    Reply
  154. camo phone case

    You really make it seem so easy with your presentation but I find this topic to be really something that I
    think I would never understand. It seems too complex and very
    broad for me. I’m looking forward for your next post, I’ll try to get
    the hang of it!

    Reply
  155. Seth

    Please let me know if you’re looking for a author for your weblog.
    You have some really good articles and I feel I would be a good
    asset. If you ever want to take some of the load off, I’d
    absolutely love to write some articles for your
    blog in exchange for a link back to mine.
    Please blast me an e-mail if interested. Thank you!

    Reply
  156. Latanya

    Hey there! This is my 1st comment here so I just wanted to give
    a quick shout out and say I truly enjoy reading through your posts.
    Can you recommend any other blogs/websites/forums that cover the same topics?

    Thank you!

    Reply
  157. 메리트카지노

    I’m amazed, I have to admit. Seldom do I come across a blog that’s both educative and entertaining, and let me tell you, you’ve hit the nail on the head.
    The issue is an issue that not enough men and women are speaking intelligently about.
    I’m very happy I found this during my search for something regarding this.

    my page :: 메리트카지노

    Reply
  158. 우리카지노

    Thanks , I’ve recently been searching for info about this subject for
    ages and yours is the greatest I have discovered so far.

    But, what in regards to the conclusion? Are you positive about the supply?

    Also visit my web blog … 우리카지노

    Reply
  159. Fleta

    I am now not positive where you’re getting your information, but good topic.
    I needs to spend a while studying much more or working out
    more. Thank you for excellent info I used to be searching for this information for my mission.

    Reply
  160. 메리트카지노

    When I originally left a comment I seem to have clicked on the -Notify me when new comments are added-
    checkbox and from now on whenever a comment is added I get four emails with the same comment.
    Perhaps there is a means you are able to remove
    me from that service? Kudos!

    Look at my homepage – 메리트카지노

    Reply
  161. W88

    Since the admin of this web site is working, no question very soon it will be famous, due
    to its feature contents.

    Look into my webpage: W88

    Reply
  162. Eliza

    excellent publish, very informative. I wonder why the opposite specialists of
    this sector do not understand this. You should continue your writing.
    I’m sure, you have a huge readers’ base already!

    Reply
  163. w88.tips

    I loved as much as you will receive carried out right here.
    The sketch is attractive, your authored material stylish.
    nonetheless, you command get bought an edginess over that you wish be delivering the following.

    unwell unquestionably come further formerly again since
    exactly the same nearly a lot often inside case you
    shield this increase.

    my website: w88.tips

    Reply
  164. 우리카지노

    certainly like your website however you have
    to test the spelling on several of your posts.
    Several of them are rife with spelling problems and I to find it very troublesome to inform the reality however I
    will definitely come again again.

    Feel free to visit my homepage; 우리카지노

    Reply
  165. 우리카지노

    Great article! This is the type of info that are meant to be shared
    around the net. Shame on the search engines for now not positioning this submit upper!
    Come on over and discuss with my web site . Thanks =)

    Reply
  166. Locksmiths Mottram

    Wonderful beat ! I would like to apprentice whilst you amend your website, how could i
    subscribe for a blog site? The account helped me a appropriate deal.
    I were tiny bit acquainted of this your broadcast provided bright clear idea

    Feel free to surf to my web blog; Locksmiths Mottram

    Reply
  167. wishlist

    Nice post. I was checking constantly this blog and I’m impressed!
    Extremely useful info particularly the last part 🙂 I care for
    such info a lot. I was looking for this certain information for a long
    time. Thank you and best of luck.

    Also visit my site :: wishlist

    Reply
  168. Precizn - Swiss Made Watches

    An impressive share! I have just forwarded this onto a friend who has been doing a
    little research on this. And he actually ordered me breakfast due to the fact that I
    stumbled upon it for him… lol. So allow me to
    reword this…. Thanks for the meal!! But yeah, thanx for spending some time to discuss this
    topic here on your internet site.

    My web page – Precizn – Swiss Made Watches

    Reply
  169. mejores cremas antiedad

    I have been surfing online greater than 3 hours
    nowadays, but I never discovered any attention-grabbing article like yours.
    It is pretty worth enough for me. Personally, if all webmasters and bloggers made just right content material as you did,
    the net might be a lot more helpful than ever before.

    My homepage; mejores cremas antiedad

    Reply
  170. Access Asap

    Sweet blog! I found it while browsing on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to get
    there! Many thanks

    Here is my web site … Access Asap

    Reply
  171. Cooper

    Yesterday, while I was at work, my sister stole my iPad and tested to see if it
    can survive a 40 foot drop, just so she can be a youtube
    sensation. My apple ipad is now broken and she has 83 views.
    I know this is completely off topic but I had to share it with someone!

    Reply
  172. Leif

    Hey I know this is off topic but I was wondering if you knew of any
    widgets I could add to my blog that automatically tweet
    my newest twitter updates. I’ve been looking for a plug-in like this
    for quite some time and was hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I truly enjoy
    reading your blog and I look forward to your
    new updates.

    Reply
  173. Reva

    My spouse and I stumbled over here by a different website and thought I
    might as well check things out. I like what I see so i am just following you.
    Look forward to exploring your web page again.

    Reply
  174. Rachele

    It’s really very complicated in this full of activity life to listen news on TV, thus I only use world wide web
    for that reason, and obtain the hottest information.

    Reply
  175. Katja

    Hey there! This post couldn’t be written any better!
    Reading this post reminds me of my good old room mate!
    He always kept talking about this. I will forward this post
    to him. Fairly certain he will have a good read.
    Many thanks for sharing!

    Reply
  176. mens cardio workout

    {
    {I have|I’ve} been {surfing|browsing} online more than {three|3|2|4} hours today, yet I never
    found any interesting article like yours. {It’s|It
    is} pretty worth enough for me. {In my opinion|Personally|In my
    view}, if all {webmasters|site owners|website owners|web owners} and bloggers made good content as you did,
    the {internet|net|web} will be {much more|a lot more} useful than ever before.|
    I {couldn’t|could not} {resist|refrain from} commenting. {Very well|Perfectly|Well|Exceptionally
    well} written!|
    {I will|I’ll} {right away|immediately} {take hold of|grab|clutch|grasp|seize|snatch} your {rss|rss feed} as I {can not|can’t} {in finding|find|to find} your {email|e-mail} subscription {link|hyperlink} or {newsletter|e-newsletter} service.
    Do {you have|you’ve} any? {Please|Kindly} {allow|permit|let} me {realize|recognize|understand|recognise|know}
    {so that|in order that} I {may just|may|could} subscribe.
    Thanks.|
    {It is|It’s} {appropriate|perfect|the best} time to make some plans for the future and
    {it is|it’s} time to be happy. {I have|I’ve} read this post and if I could I {want
    to|wish to|desire to} suggest you {few|some} interesting things or {advice|suggestions|tips}.
    {Perhaps|Maybe} you {could|can} write next articles referring to this article.
    I {want to|wish to|desire to} read {more|even more} things
    about it!|
    {It is|It’s} {appropriate|perfect|the best} time to
    make {a few|some} plans for {the future|the longer term|the long run} and {it is|it’s} time to
    be happy. {I have|I’ve} {read|learn} this {post|submit|publish|put up} and
    if I {may just|may|could} I {want to|wish to|desire to} {suggest|recommend|counsel} you
    {few|some} {interesting|fascinating|attention-grabbing} {things|issues} or {advice|suggestions|tips}.
    {Perhaps|Maybe} you {could|can} write {next|subsequent} articles {relating to|referring
    to|regarding} this article. I {want to|wish to|desire to} {read|learn} {more|even more} {things|issues} {approximately|about} it!|
    {I have|I’ve} been {surfing|browsing} {online|on-line} {more than|greater than} {three|3}
    hours {these days|nowadays|today|lately|as of late},
    {yet|but} I {never|by no means} {found|discovered} any {interesting|fascinating|attention-grabbing} article like yours.

    {It’s|It is} {lovely|pretty|beautiful} {worth|value|price}
    {enough|sufficient} for me. {In my opinion|Personally|In my view}, if all {webmasters|site owners|website owners|web
    owners} and bloggers made {just right|good|excellent} {content|content material} as {you did|you probably
    did}, the {internet|net|web} {will be|shall be|might be|will probably be|can be|will likely be}
    {much more|a lot more} {useful|helpful} than ever before.|
    Ahaa, its {nice|pleasant|good|fastidious} {discussion|conversation|dialogue} {regarding|concerning|about|on the topic of} this {article|post|piece of writing|paragraph} {here|at this place} at this {blog|weblog|webpage|website|web site}, I have read all that,
    so {now|at this time} me also commenting {here|at this place}.|
    I am sure this {article|post|piece of writing|paragraph} has touched all the internet
    {users|people|viewers|visitors}, its really really {nice|pleasant|good|fastidious} {article|post|piece of writing|paragraph} on building
    up new {blog|weblog|webpage|website|web site}.|
    Wow, this {article|post|piece of writing|paragraph} is {nice|pleasant|good|fastidious}, my
    {sister|younger sister} is analyzing {such|these|these kinds of} things, {so|thus|therefore} I am going to {tell|inform|let know|convey} her.|
    {Saved as a favorite|bookmarked!!}, {I really like|I like|I love} {your blog|your site|your web site|your website}!|
    Way cool! Some {very|extremely} valid points!

    I appreciate you {writing this|penning this} {article|post|write-up} {and the|and
    also the|plus the} rest of the {site is|website is} {also very|extremely|very|also really|really} good.|
    Hi, {I do believe|I do think} {this is an excellent|this is a great} {blog|website|web site|site}.
    I stumbledupon it 😉 {I will|I am going to|I’m going to|I may} {come back|return|revisit} {once again|yet again}
    {since I|since i have} {bookmarked|book marked|book-marked|saved as a favorite} it.

    Money and freedom {is the best|is the greatest}
    way to change, may you be rich and continue to {help|guide} {other
    people|others}.|
    Woah! I’m really {loving|enjoying|digging}
    the template/theme of this {site|website|blog}.
    It’s simple, yet effective. A lot of times it’s {very hard|very difficult|challenging|tough|difficult|hard} to get that
    “perfect balance” between {superb usability|user friendliness|usability}
    and {visual appearance|visual appeal|appearance}.

    I must say {that you’ve|you have|you’ve} done a {awesome|amazing|very good|superb|fantastic|excellent|great} job with
    this. {In addition|Additionally|Also}, the blog loads {very|extremely|super}
    {fast|quick} for me on {Safari|Internet explorer|Chrome|Opera|Firefox}.

    {Superb|Exceptional|Outstanding|Excellent} Blog!|
    These are {really|actually|in fact|truly|genuinely} {great|enormous|impressive|wonderful|fantastic} ideas in {regarding|concerning|about|on the topic of} blogging.
    You have touched some {nice|pleasant|good|fastidious} {points|factors|things} here.
    Any way keep up wrinting.|
    {I love|I really like|I enjoy|I like|Everyone loves} what you guys {are|are usually|tend to
    be} up too. {This sort of|This type of|Such|This kind of} clever
    work and {exposure|coverage|reporting}! Keep up the {superb|terrific|very good|great|good|awesome|fantastic|excellent|amazing|wonderful}
    works guys I’ve {incorporated||added|included} you guys to {|my|our||my personal|my own} blogroll.|
    {Howdy|Hi there|Hey there|Hi|Hello|Hey}! Someone in my {Myspace|Facebook} group shared this {site|website} with us so
    I came to {give it a look|look it over|take a look|check
    it out}. I’m definitely {enjoying|loving} the information. I’m {book-marking|bookmarking} and will be tweeting this to my followers!
    {Terrific|Wonderful|Great|Fantastic|Outstanding|Exceptional|Superb|Excellent} blog and {wonderful|terrific|brilliant|amazing|great|excellent|fantastic|outstanding|superb} {style and design|design and style|design}.|
    {I love|I really like|I enjoy|I like|Everyone loves} what
    you guys {are|are usually|tend to be} up too. {This sort of|This type of|Such|This kind of} clever work and {exposure|coverage|reporting}!
    Keep up the {superb|terrific|very good|great|good|awesome|fantastic|excellent|amazing|wonderful} works guys I’ve {incorporated|added|included} you
    guys to {|my|our|my personal|my own} blogroll.|
    {Howdy|Hi there|Hey there|Hi|Hello|Hey} would you mind {stating|sharing} which blog platform you’re {working with|using}?
    I’m {looking|planning|going} to start my own blog {in the near future|soon} but I’m having a {tough|difficult|hard} time {making a decision|selecting|choosing|deciding}
    between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your {design and style|design|layout} seems different then most blogs and I’m looking for something
    {completely unique|unique}. P.S {My apologies|Apologies|Sorry} for {getting|being} off-topic but I had to ask!|
    {Howdy|Hi there|Hi|Hey there|Hello|Hey} would you mind letting me know which {webhost|hosting company|web host} you’re {utilizing|working with|using}?

    I’ve loaded your blog in 3 {completely different|different} {internet browsers|web browsers|browsers} and I must say this
    blog loads a lot {quicker|faster} then most. Can you {suggest|recommend}
    a good {internet hosting|web hosting|hosting} provider
    at a {honest|reasonable|fair} price? {Thanks a lot|Kudos|Cheers|Thank you|Many thanks|Thanks},
    I appreciate it!|
    {I love|I really like|I like|Everyone loves} it {when people|when individuals|when folks|whenever people} {come together|get together} and share {opinions|thoughts|views|ideas}.

    Great {blog|website|site}, {keep it up|continue
    the good work|stick with it}!|
    Thank you for the {auspicious|good} writeup. It in fact was a amusement account it.
    Look advanced to {far|more} added agreeable from you!

    {By the way|However}, how {can|could} we communicate?|
    {Howdy|Hi there|Hey there|Hello|Hey} just wanted
    to give you a quick heads up. The {text|words} in your {content|post|article} seem
    to be running off the screen in {Ie|Internet explorer|Chrome|Firefox|Safari|Opera}.

    I’m not sure if this is a {format|formatting} issue or something to do with {web
    browser|internet browser|browser} compatibility but I {thought|figured} I’d post to let you
    know. The {style and design|design and style|layout|design} look great though!
    Hope you get the {problem|issue} {solved|resolved|fixed} soon. {Kudos|Cheers|Many thanks|Thanks}|
    This is a topic {that is|that’s|which is} {close to|near to}
    my heart… {Cheers|Many thanks|Best wishes|Take care|Thank you}!
    {Where|Exactly where} are your contact details though?|
    It’s very {easy|simple|trouble-free|straightforward|effortless} to find out any {topic|matter} on {net|web} as compared to {books|textbooks}, as
    I found this {article|post|piece of writing|paragraph} at this {website|web site|site|web
    page}.|
    Does your {site|website|blog} have a contact page? I’m having {a tough
    time|problems|trouble} locating it but, I’d like to {send|shoot} you an {e-mail|email}.

    I’ve got some {creative ideas|recommendations|suggestions|ideas} for your blog
    you might be interested in hearing. Either way, great {site|website|blog} and I look forward to seeing it {develop|improve|expand|grow} over time.|
    {Hola|Hey there|Hi|Hello|Greetings}! I’ve been {following|reading} your {site|web
    site|website|weblog|blog} for {a long time|a while|some time} now and finally got the {bravery|courage} to go
    ahead and give you a shout out from {New Caney|Kingwood|Huffman|Porter|Houston|Dallas|Austin|Lubbock|Humble|Atascocita} {Tx|Texas}!
    Just wanted to {tell you|mention|say} keep up the {fantastic|excellent|great|good} {job|work}!|
    Greetings from {Idaho|Carolina|Ohio|Colorado|Florida|Los angeles|California}!
    I’m {bored to tears|bored to death|bored} at work so I decided to {check out|browse} your {site|website|blog} on my iphone during lunch break.
    I {enjoy|really like|love} the {knowledge|info|information} you
    {present|provide} here and can’t wait to take a
    look when I get home. I’m {shocked|amazed|surprised} at how {quick|fast} your blog loaded on my
    {mobile|cell phone|phone} .. I’m not even using WIFI, just 3G ..
    {Anyhow|Anyways}, {awesome|amazing|very good|superb|good|wonderful|fantastic|excellent|great} {site|blog}!|
    Its {like you|such as you} {read|learn} my {mind|thoughts}!
    You {seem|appear} {to understand|to know|to grasp} {so much|a lot} {approximately|about}
    this, {like you|such as you} wrote the {book|e-book|guide|ebook|e book} in it or something.
    {I think|I feel|I believe} {that you|that you simply|that you just} {could|can} do with {some|a few} {%|p.c.|percent} to {force|pressure|drive|power}
    the message {house|home} {a bit|a little bit}, {however|but} {other than|instead of}
    that, {this is|that is} {great|wonderful|fantastic|magnificent|excellent} blog.
    {A great|An excellent|A fantastic} read. {I’ll|I will} {definitely|certainly}
    be back.|
    I visited {multiple|many|several|various} {websites|sites|web
    sites|web pages|blogs} {but|except|however} the audio {quality|feature} for audio songs {current|present|existing}
    at this {website|web site|site|web page} is {really|actually|in fact|truly|genuinely} {marvelous|wonderful|excellent|fabulous|superb}.|
    {Howdy|Hi there|Hi|Hello}, i read your blog {occasionally|from time to time} and i own a
    similar one and i was just {wondering|curious} if you get a
    lot of spam {comments|responses|feedback|remarks}?
    If so how do you {prevent|reduce|stop|protect against} it,
    any plugin or anything you can {advise|suggest|recommend}?
    I get so much lately it’s driving me {mad|insane|crazy} so any {assistance|help|support} is very much appreciated.|
    Greetings! {Very helpful|Very useful} advice {within this|in this
    particular} {article|post}! {It is the|It’s the} little changes {that make|which will make|that produce|that
    will make} {the biggest|the largest|the greatest|the most important|the most significant} changes.
    {Thanks a lot|Thanks|Many thanks} for sharing!|
    {I really|I truly|I seriously|I absolutely} love {your blog|your site|your website}..
    {Very nice|Excellent|Pleasant|Great} colors & theme.
    Did you {create|develop|make|build} {this website|this site|this web site|this
    amazing site} yourself? Please reply back as I’m {looking to|trying to|planning
    to|wanting to|hoping to|attempting to} create {my own|my very own|my own personal} {blog|website|site} and {would
    like to|want to|would love to} {know|learn|find out} where you got this from or {what the|exactly
    what the|just what the} theme {is called|is named}. {Thanks|Many thanks|Thank you|Cheers|Appreciate it|Kudos}!|
    {Hi there|Hello there|Howdy}! This {post|article|blog post} {couldn’t|could not} be written {any better|much better}!
    {Reading through|Looking at|Going through|Looking through} this {post|article}
    reminds me of my previous roommate! He {always|constantly|continually} kept {talking about|preaching about} this.
    {I will|I’ll|I am going to|I most certainly will} {forward|send} {this article|this information|this post} to him.

    {Pretty sure|Fairly certain} {he will|he’ll|he’s going to} {have a good|have a very good|have a great} read.
    {Thank you for|Thanks for|Many thanks for|I appreciate you for} sharing!|
    {Wow|Whoa|Incredible|Amazing}! This blog looks {exactly|just} like my old
    one! It’s on a {completely|entirely|totally} different {topic|subject}
    but it has pretty much the same {layout|page layout} and design. {Excellent|Wonderful|Great|Outstanding|Superb} choice of colors!|
    {There is|There’s} {definately|certainly} {a lot to|a great deal to} {know about|learn about|find out about} this {subject|topic|issue}.
    {I like|I love|I really like} {all the|all of the} points {you
    made|you’ve made|you have made}.|
    {You made|You’ve made|You have made} some {decent|good|really good} points there.
    I {looked|checked} {on the internet|on the web|on the net} {for more info|for more information|to find out more|to learn more|for additional information} about
    the issue and found {most individuals|most people} will go
    along with your views on {this website|this site|this web site}.|
    {Hi|Hello|Hi there|What’s up}, I {log on to|check|read} your {new stuff|blogs|blog} {regularly|like every week|daily|on a regular basis}.

    Your {story-telling|writing|humoristic} style is {awesome|witty}, keep
    {doing what you’re doing|up the good work|it up}!|
    I {simply|just} {could not|couldn’t} {leave|depart|go away} your
    {site|web site|website} {prior to|before} suggesting that I {really|extremely|actually} {enjoyed|loved} {the standard|the usual} {information|info} {a person|an individual} {supply|provide} {for your|on your|in your|to your} {visitors|guests}?
    Is {going to|gonna} be {back|again} {frequently|regularly|incessantly|steadily|ceaselessly|often|continuously}
    {in order to|to} {check up on|check out|inspect|investigate cross-check} new posts|
    {I wanted|I needed|I want to|I need to} to thank you for this
    {great|excellent|fantastic|wonderful|good|very good} read!!
    I {definitely|certainly|absolutely} {enjoyed|loved} every {little bit of|bit of} it.
    {I have|I’ve got|I have got} you {bookmarked|book marked|book-marked|saved as a favorite} {to check out|to look at} new {stuff you|things you} post…|
    {Hi|Hello|Hi there|What’s up}, just wanted to {mention|say|tell
    you}, I {enjoyed|liked|loved} this {article|post|blog post}.

    It was {inspiring|funny|practical|helpful}. Keep on posting!|
    {Hi there|Hello}, I enjoy reading {all of|through} your {article|post|article post}.

    I {like|wanted} to write a little comment to support you.|
    I {always|constantly|every time} spent my half an hour to read this {blog|weblog|webpage|website|web site}’s {articles|posts|articles or reviews|content} {everyday|daily|every day|all the
    time} along with a {cup|mug} of coffee.|
    I {always|for all time|all the time|constantly|every time} emailed this {blog|weblog|webpage|website|web site} post page to all my {friends|associates|contacts}, {because|since|as|for the reason that} if like to read it
    {then|after that|next|afterward} my {friends|links|contacts} will too.|
    My {coder|programmer|developer} is trying to {persuade|convince} me to move to .net from PHP.
    I have always disliked the idea because of the {expenses|costs}.
    But he’s tryiong none the less. I’ve been using {Movable-type|WordPress} on {a number of|a variety of|numerous|several|various} websites for about a year and am {nervous|anxious|worried|concerned} about
    switching to another platform. I have heard
    {fantastic|very good|excellent|great|good} things about blogengine.net.
    Is there a way I can {transfer|import} all my wordpress {content|posts} into it?
    {Any kind of|Any} help would be {really|greatly} appreciated!|
    {Hello|Hi|Hello there|Hi there|Howdy|Good day}!
    I could have sworn I’ve {been to|visited} {this blog|this web site|this website|this site|your blog}
    before but after {browsing through|going through|looking at} {some
    of the|a few of the|many of the} {posts|articles} I realized it’s
    new to me. {Anyways|Anyhow|Nonetheless|Regardless}, I’m {definitely|certainly} {happy|pleased|delighted} {I found|I
    discovered|I came across|I stumbled upon} it and I’ll be {bookmarking|book-marking} it and checking back {frequently|regularly|often}!|
    {Terrific|Great|Wonderful} {article|work}! {This is|That is} {the type of|the kind of} {information|info} {that
    are meant to|that are supposed to|that should} be shared {around the|across the}
    {web|internet|net}. {Disgrace|Shame} on {the {seek|search} engines|Google}
    for {now not|not|no longer} positioning this {post|submit|publish|put up} {upper|higher}!
    Come on over and {talk over with|discuss with|seek advice
    from|visit|consult with} my {site|web site|website} . {Thank you|Thanks} =)|
    Heya {i’m|i am} for the first time here. I {came across|found} this
    board and I find It {truly|really} useful & it
    helped me out {a lot|much}. I hope to give something
    back and {help|aid} others like you {helped|aided}
    me.|
    {Hi|Hello|Hi there|Hello there|Howdy|Greetings}, {I think|I believe|I
    do believe|I do think|There’s no doubt that} {your site|your
    website|your web site|your blog} {might be|may be|could be|could possibly be} having {browser|internet browser|web browser} compatibility {issues|problems}.
    {When I|Whenever I} {look at your|take a look at your} {website|web site|site|blog} in Safari, it looks fine {but
    when|however when|however, if|however, when} opening in {Internet Explorer|IE|I.E.}, {it
    has|it’s got} some overlapping issues. {I just|I simply|I merely} wanted to {give you a|provide you with a} quick heads up!
    {Other than that|Apart from that|Besides that|Aside from that}, {fantastic|wonderful|great|excellent} {blog|website|site}!|
    {A person|Someone|Somebody} {necessarily|essentially} {lend a hand|help|assist} to make {seriously|critically|significantly|severely} {articles|posts} {I would|I might|I’d} state.
    {This is|That is} the {first|very first} time I frequented your {web page|website page} and {to this point|so far|thus far|up to now}?
    I {amazed|surprised} with the {research|analysis} you made to {create|make} {this actual|this
    particular} {post|submit|publish|put up} {incredible|amazing|extraordinary}.
    {Great|Wonderful|Fantastic|Magnificent|Excellent} {task|process|activity|job}!|
    Heya {i’m|i am} for {the primary|the first} time here.

    I {came across|found} this board and I {in finding|find|to find} It {truly|really}
    {useful|helpful} & it helped me out {a lot|much}.
    {I am hoping|I hope|I’m hoping} {to give|to offer|to provide|to present} {something|one thing} {back|again} and {help|aid} others {like you|such as you} {helped|aided} me.|
    {Hello|Hi|Hello there|Hi there|Howdy|Good day|Hey there}!
    {I just|I simply} {would like to|want to|wish to} {give you a|offer
    you a} {huge|big} thumbs up {for the|for your} {great|excellent} {info|information} {you have|you’ve got|you have
    got} {here|right here} on this post. {I will be|I’ll be|I am} {coming back to|returning to} {your blog|your site|your website|your web site} for more soon.|
    I {always|all the time|every time} used to {read|study} {article|post|piece
    of writing|paragraph} in news papers but
    now as I am a user of {internet|web|net} {so|thus|therefore}
    from now I am using net for {articles|posts|articles or reviews|content}, thanks to
    web.|
    Your {way|method|means|mode} of {describing|explaining|telling} {everything|all|the whole thing} in this {article|post|piece of writing|paragraph} is {really|actually|in fact|truly|genuinely} {nice|pleasant|good|fastidious}, {all|every one} {can|be able to|be capable of} {easily|without difficulty|effortlessly|simply} {understand|know|be aware of} it, Thanks a lot.|
    {Hi|Hello} there, {I found|I discovered} your {blog|website|web site|site} {by means of|via|by the use of|by way of}
    Google {at the same time as|whilst|even as|while} {searching for|looking for} a {similar|comparable|related} {topic|matter|subject}, your {site|web site|website}
    {got here|came} up, it {looks|appears|seems|seems to
    be|appears to be like} {good|great}. {I have|I’ve} bookmarked it in my google bookmarks.

    {Hello|Hi} there, {simply|just} {turned into|became|was|become|changed into}
    {aware of|alert to} your {blog|weblog} {thru|through|via} Google, {and found|and located} that {it is|it’s} {really|truly} informative.
    {I’m|I am} {gonna|going to} {watch out|be careful} for brussels.
    {I will|I’ll} {appreciate|be grateful} {if you|should you|when you|in the event you|in case you|for those who|if you happen to}
    {continue|proceed} this {in future}. {A lot of|Lots of|Many|Numerous} {other folks|folks|other people|people}
    {will be|shall be|might be|will probably be|can be|will
    likely be} benefited {from your|out of your} writing. Cheers!|
    {I am|I’m} curious to find out what blog {system|platform}
    {you have been|you happen to be|you are|you’re} {working with|utilizing|using}?
    I’m {experiencing|having} some {minor|small} security {problems|issues} with my latest {site|website|blog} and {I would|I’d} like to
    find something more {safe|risk-free|safeguarded|secure}.
    Do you have any {solutions|suggestions|recommendations}?|
    {I am|I’m} {extremely|really} impressed with your writing skills
    {and also|as well as} with the layout on your {blog|weblog}.
    Is this a paid theme or did you {customize|modify} it yourself?
    {Either way|Anyway} keep up the {nice|excellent} quality writing,
    {it’s|it is} rare to see a {nice|great} blog like this one {these days|nowadays|today}.|
    {I am|I’m} {extremely|really} {inspired|impressed}
    {with your|together with your|along with your} writing {talents|skills|abilities} {and also|as {smartly|well|neatly} as} with the {layout|format|structure} {for your|on your|in your|to your} {blog|weblog}.
    {Is this|Is that this} a paid {subject|topic|subject matter|theme} or did you {customize|modify}
    it {yourself|your self}? {Either way|Anyway} {stay|keep} up the {nice|excellent} {quality|high quality} writing, {it’s|it is} {rare|uncommon} {to peer|to see|to look} a {nice|great} {blog|weblog} like this one {these
    days|nowadays|today}..|
    {Hi|Hello}, Neat post. {There is|There’s} {a problem|an issue} {with your|together with your|along with your} {site|web site|website} in {internet|web} explorer, {may|might|could|would} {check|test} this?
    IE {still|nonetheless} is the {marketplace|market} {leader|chief}
    and {a large|a good|a big|a huge} {part of|section of|component to|portion of|component
    of|element of} {other folks|folks|other people|people} will {leave out|omit|miss|pass over}
    your {great|wonderful|fantastic|magnificent|excellent} writing
    {due to|because of} this problem.|
    {I’m|I am} not sure where {you are|you’re} getting your {info|information}, but {good|great} topic.
    I needs to spend some time learning {more|much more} or understanding more.
    Thanks for {great|wonderful|fantastic|magnificent|excellent} {information|info} I
    was looking for this {information|info} for my mission.|
    {Hi|Hello}, i think that i saw you visited my {blog|weblog|website|web site|site} {so|thus} i came to “return the favor”.{I
    am|I’m} {trying to|attempting to} find things to {improve|enhance} my {website|site|web site}!I suppose its ok to use {some of|a few of} your ideas!!\

    Reply
  177. buy mxc token

    I believe that is one of the such a lot important info for me.

    And i am satisfied studying your article. However should remark on some common issues,
    The site style is wonderful, the articles is actually excellent :
    D. Excellent activity, cheers

    Here is my web site; buy mxc token

    Reply
  178. Quinn

    Excellent beat ! I would like to apprentice while you amend your website, how could i subscribe
    for a weblog web site? The account helped me a appropriate deal.
    I have been tiny bit familiar of this your broadcast provided vivid transparent concept

    Reply
  179. 우리카지노

    you are truly a excellent webmaster. The website loading velocity
    is amazing. It kind of feels that you’re doing any distinctive trick.
    In addition, The contents are masterpiece. you have performed
    a magnificent activity in this topic!

    Reply
  180. Paramount Skills

    Hi this is somewhat of off topic but I was wanting to know if blogs use WYSIWYG editors or
    if you have to manually code with HTML. I’m starting a blog soon but have no coding knowledge so I wanted to get guidance from someone with experience.
    Any help would be enormously appreciated!

    Here is my homepage Paramount Skills

    Reply
  181. Chara

    When I originally left a comment I appear to have clicked on the -Notify me when new comments are added-
    checkbox and from now on each time a comment is added I get 4 emails
    with the same comment. Perhaps there is a means you are able to remove me from that
    service? Appreciate it!

    Reply