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(); }
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(); }
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(); }