Esempio n. 1
0
unique_ptr<RenderableObject> RenderableObject::quad(int startX, 
                                                    int startY, 
                                                    int width, 
                                                    int height, 
                                                    const glm::vec4 &color, GLenum primitive)
{
    glm::vec3 mi(startX, startY, 0.0f);
    glm::vec3 ma(startX + width, startY + height, 0.0f);

    vector<glm::vec3> vertices;
    vector<glm::vec3> normals;
    vector<glm::vec3> texCoords;

    float d = 0.1;

    vertices.push_back(glm::vec3(mi.x, mi.y, d));
    vertices.push_back(glm::vec3(mi.x, ma.y, d));
    vertices.push_back(glm::vec3(ma.x, ma.y, d));
    vertices.push_back(glm::vec3(ma.x, mi.y, d));

    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));

    texCoords.push_back(glm::vec3(0.0f, 0.0f, 0.0f));
    texCoords.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    texCoords.push_back(glm::vec3(1.0f, 1.0f, 0.0f));
    texCoords.push_back(glm::vec3(1.0f, 0.0f, 0.0f));

    // Indices
    vector<GLuint> indices ={
        0, 1, 2,
        0, 2, 3
    };

    uint nrVertices = vertices.size();
    vector<RenderableObject::Vertex> attrData(nrVertices);

    for(uint i=0; i<nrVertices; ++i)
    {    
        glm::vec3 v = vertices[i];
        glm::vec3 n = normals[i];
        glm::vec3 t = texCoords[i];

        attrData[i].Position = v;
        attrData[i].Normal = n;
        attrData[i].Color = color;
        attrData[i].TexCoords = glm::vec4(t.x, t.y, 0.0f, 0.0f);
    }

    unique_ptr<RenderableObject> vbo(new RenderableObject);
    vbo->setData(attrData, indices, primitive);

    return vbo;
}
Esempio n. 2
0
void EC_DynamicComponent::DeserializeFromBinary(kNet::DataDeserializer& source, AttributeChange::Type change)
{
    u8 num_attributes = source.Read<u8>();
    std::vector<DeserializeData> deserializedAttributes;
    for(uint i = 0; i < num_attributes; ++i)
    {
        std::string id = source.ReadString();
        std::string typeName = source.ReadString();
        std::string value = source.ReadString();
        
        DeserializeData attrData(id.c_str(), typeName.c_str(), value.c_str());
        deserializedAttributes.push_back(attrData);
    }

    DeserializeCommon(deserializedAttributes, change);
}
Esempio n. 3
0
unique_ptr<RenderableObject> RenderableObject::sphere(float radius, 
                                                      int iterations, 
                                                      const glm::vec4 &color, 
                                                      GLenum primitive)
{
    vector<FACET3> f((int)pow(4.0, iterations));
    int n = CreateUnitSphere(f, iterations);

    vector<glm::vec3> vertices;
    vector<glm::vec3> normals;

    for(int i=0; i<n; ++i)
    {
        FACET3& facet = f[i];
        vertices.push_back(facet.p1 * radius);
        vertices.push_back(facet.p2 * radius);
        vertices.push_back(facet.p3 * radius);

        facet.p1 = glm::normalize(facet.p1);
        facet.p2 = glm::normalize(facet.p2);
        facet.p3 = glm::normalize(facet.p3);
        normals.push_back(facet.p1);
        normals.push_back(facet.p2);
        normals.push_back(facet.p3);
    }

    uint nrVertices = vertices.size();
    vector<RenderableObject::Vertex> attrData(nrVertices);

    for(uint i=0; i<nrVertices; ++i)
    {    
        glm::vec3 v = vertices[i];
        glm::vec3 n = normals[i];

        attrData[i].Position = v;
        attrData[i].Normal = n;
        attrData[i].Color = color;
    }

    unique_ptr<RenderableObject> vbo(new RenderableObject);
    vbo->setData(attrData, primitive);

    return vbo;
}
Esempio n. 4
0
unique_ptr<RenderableObject> RenderableObject::quadLines(int startX, 
                                                         int startY, 
                                                         int width, 
                                                         int height, 
                                                         const glm::vec4 &color)
{
    glm::vec3 mi(startX, startY, 0.0f);
    glm::vec3 ma(startX + width, startY + height, 0.0f);

    vector<glm::vec3> vertices;
    vector<glm::vec3> normals;

    float d = 0.1;

    vertices.push_back(glm::vec3(mi.x, mi.y, d));
    vertices.push_back(glm::vec3(mi.x, ma.y, d));

    vertices.push_back(glm::vec3(mi.x, ma.y, d));
    vertices.push_back(glm::vec3(ma.x, ma.y, d));

    vertices.push_back(glm::vec3(ma.x, ma.y, d));
    vertices.push_back(glm::vec3(ma.x, mi.y, d));

    vertices.push_back(glm::vec3(ma.x, mi.y, d));
    vertices.push_back(glm::vec3(mi.x, mi.y, d));

    uint nrVertices = vertices.size();
    vector<RenderableObject::Vertex> attrData(nrVertices);

    for(uint i=0; i<nrVertices; ++i)
    {    
        glm::vec3 v = vertices[i];

        attrData[i].Position = v;
        attrData[i].Color = color;
    }

    unique_ptr<RenderableObject> vbo(new RenderableObject);
    vbo->setData(attrData, GL_LINES);

    return vbo;
}
Esempio n. 5
0
unique_ptr<RenderableObject> RenderableObject::box(const glm::vec3 &mi, 
                                                   const glm::vec3 &ma, 
                                                   const glm::vec4 &color, 
                                                   GLenum primitive)
{
    vector<glm::vec3> vertices;
    vector<glm::vec3> normals;

    // Face 1
    vertices.push_back(glm::vec3(mi.x, ma.y, mi.z));
    vertices.push_back(glm::vec3(mi.x, ma.y, ma.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, ma.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, mi.z));

    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, 1.0f, 0.0f));

    // Face 2
    vertices.push_back(glm::vec3(mi.x, mi.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, mi.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, mi.y, ma.z));
    vertices.push_back(glm::vec3(mi.x, mi.y, ma.z));

    normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f));
    normals.push_back(glm::vec3(0.0f, -1.0f, 0.0f));    

    // Face 3
    vertices.push_back(glm::vec3(mi.x, mi.y, mi.z));
    vertices.push_back(glm::vec3(mi.x, ma.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, mi.y, mi.z));

    normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, -1.0f));

    // Face 4
    vertices.push_back(glm::vec3(mi.x, mi.y, ma.z));
    vertices.push_back(glm::vec3(ma.x, mi.y, ma.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, ma.z));
    vertices.push_back(glm::vec3(mi.x, ma.y, ma.z));

    normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f));
    normals.push_back(glm::vec3(0.0f, 0.0f, 1.0f));

    // Face 5
    vertices.push_back(glm::vec3(mi.x, mi.y, mi.z));
    vertices.push_back(glm::vec3(mi.x, mi.y, ma.z));
    vertices.push_back(glm::vec3(mi.x, ma.y, ma.z));
    vertices.push_back(glm::vec3(mi.x, ma.y, mi.z));

    normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(-1.0f, 0.0f, 0.0f));

    // Face 6
    vertices.push_back(glm::vec3(ma.x, mi.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, mi.z));
    vertices.push_back(glm::vec3(ma.x, ma.y, ma.z));
    vertices.push_back(glm::vec3(ma.x, mi.y, ma.z));

    normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f));
    normals.push_back(glm::vec3(1.0f, 0.0f, 0.0f));

    // Indices
    vector<GLuint> indices ={
        0, 1, 2,
        0, 2, 3,
        4, 5, 6,
        4, 6, 7,
        8, 9, 10,
        8, 10, 11,
        12, 13, 14,
        12, 14, 15
    };

    uint nrVertices = vertices.size();
    vector<RenderableObject::Vertex> attrData(nrVertices);

    for(uint i=0; i<nrVertices; ++i)
    {    
        glm::vec3 v = vertices[i];
        glm::vec3 n = normals[i];

        attrData[i].Position = v;
        attrData[i].Normal = n;
        attrData[i].Color = color;
    }

    unique_ptr<RenderableObject> vbo(new RenderableObject);
    vbo->setData(attrData, indices, primitive);

    return vbo;
}