コード例 #1
0
void GridRenderer::init(ShaderProgram* prog)
{
    _vbo = make_resource<VBO>(getResourceManager(),
                              "P");
    _vbo->overrideIndex(getResourceManager()->geometryCache()->getIndexForAttribute("P"));
    _vbo->bind();
    prog->bindAttributeLocation(_vbo.get());

    VertexList verts;

    for(int x = 0; x <= _xres; x++) {
        float nx = ((float)x) / _xres;
        nx *= 2;
        nx -= 1;

        verts.emplace_back(nx * _width / 2, - (_height / 2), 0);
        verts.emplace_back(nx * _width / 2, (_height / 2), 0);
    }

    for(int y = 0; y <= _yres; y++) {
        float ny = ((float)y) / _yres;
        ny *= 2;
        ny -= 1;

        verts.emplace_back(- _width / 2, ny * _height / 2, 0);
        verts.emplace_back(_width / 2, ny * _height / 2, 0);
    }

    _vbo->data(verts);
    _vbo->setPointer();
}
コード例 #2
0
void SphereRenderer::init(ShaderProgram* prog)
{
    if(_vbo) {
        _vbo->bind();
        _vbo->setPointer();
        return;
    }
    _vbo = make_resource<VBO>(getResourceManager(),
                              "P");
    _vbo->overrideIndex(getResourceManager()->geometryCache()->getIndexForAttribute("P"));
    _ibo = make_resource<IBO>(getResourceManager());
    _vbo->bind();
    _ibo->bind();
    prog->bindAttributeLocation(_vbo.get());

    auto polygons = std::make_shared<PolygonList>();

    VertexList verts;

    verts.emplace_back(0, 1, 0);
    verts.emplace_back(0, -1, 0);
    for(int i=1; i < _u_segments; i++) {
        float u = float(i) / _u_segments;
        float circle_radius = sin(PI * u);
        float height = cos(PI * u);
        for(int j=0; j <= _v_segments; j++) {
            float pni = 2 * PI * float(j) / _v_segments;
            verts.emplace_back(sin(pni) * circle_radius,
                               height,
                               cos(pni) * circle_radius);
        }
    }

    for(uint i = 2; i < _v_segments + 1; i += 3) {
        polygons->emplace_back(Polygon{(i + 1) % _v_segments, i, 0});
        uint offset = (_u_segments - 1) * _v_segments + 2;
        //polygons->emplace_back(Polygon{1, i + offset, i+1 + offset});
    }

    _ibo->data(polygons);
    _vbo->data(verts);
    _vbo->setPointer();
}
コード例 #3
0
void SinglePointRenderer::init(ShaderProgram* prog)
{
    if(_vbo) {
        _vbo->bind();
        _vbo->setPointer();
        return;
    }
    _vbo = make_resource<VBO>(getResourceManager(),
                              "P");
    _vbo->overrideIndex(getResourceManager()->geometryCache()->getIndexForAttribute("P"));
    _vbo->bind();
    prog->bindAttributeLocation(_vbo.get());

    VertexList verts;
    verts.emplace_back(0, 0, 0);
    _vbo->data(verts);
    _vbo->setPointer();
}