コード例 #1
0
ファイル: main.cpp プロジェクト: Tigrolik/Computer_graphics
// draw objects with geometry shader defined by points
void draw_objects(const Shader& shad, const GLuint option) {
    // number of objects (quads)
    constexpr GLuint n {100};
    shad.use();

    GLuint vao{}, vbo{};
    if (option == 0) {
        gen_objects(vao, vbo, quad_vertices(), 5, 2);
        const auto offset_arr = offsets_array(n);
        const auto idx = shad.id();
        for (GLuint i {0}; i < n; ++i) {
            const GLint loc = glGetUniformLocation(idx,
                    std::string{"offsets_arr[" + std::to_string(i) + "]"}.
                    c_str());
            glUniform2f(loc, offset_arr[i].x, offset_arr[i].y);
        }
    } else {
        GLuint inst_vbo {gen_instance_buf(offsets_array(n))};
        gen_objects_base(vao, vbo, quad_vertices(), 5, 2);
        set_instance_data(inst_vbo);
    }

    glBindVertexArray(vao);
    glDrawArraysInstanced(GL_TRIANGLES, 0, 6, n);
    glBindVertexArray(0);
}
コード例 #2
0
ファイル: Tree.cpp プロジェクト: Blade83x2/Game_13w33
void Tree::Create(const std::vector<sf::Vector3f>& tile_vertices)
{
    if(tile_vertices.size() != 4)
    {
        throw std::invalid_argument("tile_vertices must have 4 elements");
    }

    sf::Vector3f mid_point((tile_vertices[0].x + tile_vertices[2].x) / 2.0,
                           (tile_vertices[0].y + tile_vertices[2].y) / 2.0,
                           (tile_vertices[0].z + tile_vertices[2].z) / 2.0);
    std::vector<sf::Vector3f> quad_vertices(4);
    this->quads.resize(4);
    quad_vertices[0] = tile_vertices[0];
    quad_vertices[1] = mid_point;
    quad_vertices[2] = mid_point + sf::Vector3f(0.0, 0.0, 1.0);
    quad_vertices[3] = tile_vertices[0] + sf::Vector3f(0.0, 0.0, 1.0);
    this->quads[0].create(quad_vertices);
    quad_vertices[0] = tile_vertices[1];
    quad_vertices[1] = mid_point;
    quad_vertices[2] = mid_point + sf::Vector3f(0.0, 0.0, 1.0);
    quad_vertices[3] = tile_vertices[1] + sf::Vector3f(0.0, 0.0, 1.0);
    this->quads[1].create(quad_vertices);
    quad_vertices[0] = tile_vertices[2];
    quad_vertices[1] = mid_point;
    quad_vertices[2] = mid_point + sf::Vector3f(0.0, 0.0, 1.0);
    quad_vertices[3] = tile_vertices[2] + sf::Vector3f(0.0, 0.0, 1.0);
    this->quads[2].create(quad_vertices);
    quad_vertices[0] = tile_vertices[3];
    quad_vertices[1] = mid_point;
    quad_vertices[2] = mid_point + sf::Vector3f(0.0, 0.0, 1.0);
    quad_vertices[3] = tile_vertices[3] + sf::Vector3f(0.0, 0.0, 1.0);
    this->quads[3].create(quad_vertices);
    this->type = rand() % 2;
}