Exemplo n.º 1
0
void RoadGraphRenderer::renderArea(const AbstractArea& area, float height) {
	std::vector<RenderablePtr> renderables;
	renderables.push_back(RenderablePtr(new Renderable(GL_LINE_STIPPLE, 3.0f)));
	renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));

	Vertex v;

	v.color[0] = 0.0f;
	v.color[1] = 0.0f;
	v.color[2] = 1.0f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;

	for (int i = 0; i < area.polyline().size(); i++) {
		v.location[0] = area.polyline()[i].x();
		v.location[1] = area.polyline()[i].y();
		v.location[2] = height;
		renderables[0]->vertices.push_back(v);
		renderables[1]->vertices.push_back(v);
	}

	v.location[0] = area.polyline()[0].x();
	v.location[1] = area.polyline()[0].y();
	v.location[2] = height;
	renderables[0]->vertices.push_back(v);

	render(renderables);
}
Exemplo n.º 2
0
void Renderer::renderPolyline(const Polyline2D& polyline, GLenum lineType, float height) {
    std::vector<RenderablePtr> renderables;
    renderables.push_back(RenderablePtr(new Renderable(lineType, 3.0f)));
    renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));

    Vertex v;
    v.color[0] = 0.0f;
    v.color[1] = 0.0f;
    v.color[2] = 1.0f;
    v.normal[0] = 0.0f;
    v.normal[1] = 0.0f;
    v.normal[2] = 1.0f;

    // add lines
    for (int i = 0; i < polyline.size(); i++) {
        v.location[0] = polyline[i].x();
        v.location[1] = polyline[i].y();
        v.location[2] = height;

        renderables[0]->vertices.push_back(v);
        renderables[1]->vertices.push_back(v);
    }

    render(renderables);
}
Exemplo n.º 3
0
/**
 * 与えられたポリゴンに基づいて、閉じた領域を描画する。
 * ただし、ポリゴンデータ自体は、閉じていなくて良い。
 */
void Renderer::renderArea(const Polygon2D& area, GLenum lineType, const QColor& color, float height) {
    std::vector<RenderablePtr> renderables;
    renderables.push_back(RenderablePtr(new Renderable(lineType, 3.0f)));
    renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));

    Vertex v;

    v.color[0] = color.redF();
    v.color[1] = color.greenF();
    v.color[2] = color.blueF();
    v.color[3] = color.alphaF();
    v.normal[0] = 0.0f;
    v.normal[1] = 0.0f;
    v.normal[2] = 1.0f;

    for (int i = 0; i < area.size(); i++) {
        v.location[0] = area[i].x();
        v.location[1] = area[i].y();
        v.location[2] = height;
        renderables[0]->vertices.push_back(v);
        renderables[1]->vertices.push_back(v);
    }

    v.location[0] = area[0].x();
    v.location[1] = area[0].y();
    v.location[2] = height;
    renderables[0]->vertices.push_back(v);

    render(renderables);
}
Exemplo n.º 4
0
void RoadGraphRenderer::renderPolyline(std::vector<QVector2D>& polyline, float height) {
	std::vector<RenderablePtr> renderables;
	renderables.push_back(RenderablePtr(new Renderable(GL_LINE_STRIP, 3.0f)));
	renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));
	
	Vertex v;
	v.color[0] = 0.0f;
	v.color[1] = 0.0f;
	v.color[2] = 1.0f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;

	// add lines
	for (int i = 0; i < polyline.size(); i++) {
		v.location[0] = polyline[i].x();
		v.location[1] = polyline[i].y();
		v.location[2] = height;

		renderables[0]->vertices.push_back(v);
		renderables[1]->vertices.push_back(v);
	}

	render(renderables);
}
Exemplo n.º 5
0
void RoadGraphRenderer::renderVoronoiDiagram(VoronoiDiagram& vd, float height) {
	std::vector<RenderablePtr> renderables;
	renderables.push_back(RenderablePtr(new Renderable(GL_LINES, 3.0f)));
	renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));

	Vertex v;
	v.color[0] = 0.0f;
	v.color[1] = 0.7f;
	v.color[2] = 0.7f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;
	v.location[2] = height;

	// add voronoi edges
	RoadEdgeIter ei, eend;
	for (boost::tie(ei, eend) = boost::edges(vd.edges.graph); ei != eend; ++ei) {
		if (!(vd.edges.graph[*ei]->valid)) continue;

		RoadVertexDesc src = boost::source(*ei, vd.edges.graph);
		RoadVertexDesc tgt = boost::target(*ei, vd.edges.graph);

		v.location[0] = vd.edges.graph[src]->pt.x();
		v.location[1] = vd.edges.graph[tgt]->pt.y();

		renderables[0]->vertices.push_back(v);
	}

	// add voronoi points
	for (int i = 0; i < vd.points.size(); i++) {
		v.location[0] = vd.points[i].x();
		v.location[1] = vd.points[i].y();

		if (vd.groups[i] == 0) {
			v.color[0] = 1.0f;
			v.color[1] = 0.0f;
			v.color[2] = 0.0f;
		} else {
			v.color[0] = 0.0f;
			v.color[1] = 0.0f;
			v.color[2] = 1.0f;
		}

		renderables[1]->vertices.push_back(v);
	}

	render(renderables);
}
Exemplo n.º 6
0
void SimpleFlatTerrain::generateMesh() {
	renderables.clear();

	renderables.push_back(RenderablePtr(new Renderable(GL_QUADS)));

	Vertex v;
	v.color[0] = 233.0f / 255.0f;
	v.color[1] = 229.0f / 255.0f;
	v.color[2] = 220.0f / 255.0f;
	v.color[3] = 1.0f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;

	v.location[0] = -width/2;
	v.location[1] = -depth/2;
	v.location[2] = elevation;
	renderables[0]->vertices.push_back(v);

	v.location[0] = width/2;
	v.location[1] = -depth/2;
	renderables[0]->vertices.push_back(v);

	v.location[0] = width/2;
	v.location[1] = depth/2;
	renderables[0]->vertices.push_back(v);

	v.location[0] = -width/2;
	v.location[1] = depth/2;
	renderables[0]->vertices.push_back(v);

	modified = false;
}
Exemplo n.º 7
0
void RoadGraph::generateMesh() {
	if (!modified) return;

	renderables.clear();

	renderables.push_back(RenderablePtr(new Renderable(GL_TRIANGLES)));
	renderables.push_back(RenderablePtr(new Renderable(GL_POINTS, 10.0f)));

	// road edge
	RoadEdgeIter ei, eend;
	for (boost::tie(ei, eend) = boost::edges(graph); ei != eend; ++ei) {
		if (!graph[*ei]->valid) continue;

		RoadEdgePtr edge = graph[*ei];

		float height;
		switch (edge->type) {
		case RoadEdge::TYPE_HIGHWAY:
			height = highwayHeight;
			break;
		case RoadEdge::TYPE_BOULEVARD:
			height = avenueHeight;
			break;
		case RoadEdge::TYPE_AVENUE:
			height = avenueHeight;
			break;
		case RoadEdge::TYPE_STREET:
			height = avenueHeight;
			break;
		}

		QColor color = graph[*ei]->color;
		QColor bgColor = graph[*ei]->bgColor;

		// draw the border of the road segment
		if ((showHighways && edge->type == RoadEdge::TYPE_HIGHWAY) || (showBoulevard && edge->type ==  RoadEdge::TYPE_BOULEVARD) || (showAvenues && edge->type ==  RoadEdge::TYPE_AVENUE) || (showLocalStreets && edge->type ==  RoadEdge::TYPE_STREET)) {
			addMeshFromEdge(renderables[0], edge, widthBase * (1.0f + curbRatio), bgColor, height * 0.5f);
			addMeshFromEdge(renderables[0], edge, widthBase, color, height);
		}
	}

	modified = false;
}
Exemplo n.º 8
0
void RoadGraphRenderer::renderPoint(const QVector2D& pt, float height) {
	RenderablePtr renderable = RenderablePtr(new Renderable(GL_POINTS, 10.0f));

	Vertex v;

	v.location[0] = pt.x();
	v.location[1] = pt.y();
	v.location[2] = height;
	v.color[0] = 0.0f;
	v.color[1] = 0.0f;
	v.color[2] = 1.0f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;

	renderable->vertices.push_back(v);

	renderOne(renderable);
}
Exemplo n.º 9
0
void Renderer::renderPoint(const QVector2D& pt, const QColor& color, float height) {
    RenderablePtr renderable = RenderablePtr(new Renderable(GL_POINTS, 10.0f));

    Vertex v;

    v.location[0] = pt.x();
    v.location[1] = pt.y();
    v.location[2] = height;
    v.color[0] = color.redF();
    v.color[1] = color.greenF();
    v.color[2] = color.blueF();
    v.color[3] = color.alphaF();
    v.normal[0] = 0.0f;
    v.normal[1] = 0.0f;
    v.normal[2] = 1.0f;

    renderable->vertices.push_back(v);

    renderOne(renderable);
}
Exemplo n.º 10
0
void Renderer::renderConcave(Polygon2D& polygon, const QColor& color, float height) {
    std::vector<RenderablePtr> renderables;
    renderables.push_back(RenderablePtr(new Renderable(GL_TRIANGLES)));

    if (polygon.size() < 3) return;

    Vertex v;
    v.color[0] = color.redF();
    v.color[1] = color.greenF();
    v.color[2] = color.blueF();
    v.color[3] = color.alphaF();
    v.normal[0] = 0.0f;
    v.normal[1] = 0.0f;
    v.normal[2] = 1.0f;

    std::vector<Polygon2D> trapezoids = polygon.tessellate();

    for (int i = 0; i < trapezoids.size(); ++i) {
        if (trapezoids[i].size() < 3) continue;

        for (int j = 1; j < trapezoids[i].size() - 1; ++j) {
            v.location[0] = trapezoids[i][0].x();
            v.location[1] = trapezoids[i][0].y();
            v.location[2] = height;
            renderables[0]->vertices.push_back(v);

            v.location[0] = trapezoids[i][j].x();
            v.location[1] = trapezoids[i][j].y();
            v.location[2] = height;
            renderables[0]->vertices.push_back(v);

            v.location[0] = trapezoids[i][j+1].x();
            v.location[1] = trapezoids[i][j+1].y();
            v.location[2] = height;
            renderables[0]->vertices.push_back(v);
        }
    }

    render(renderables);
}
Exemplo n.º 11
0
void RoadGraphRenderer::renderDenseArea(const AbstractArea& area, float height) {
	RenderablePtr renderable = RenderablePtr(new Renderable(GL_POINTS, 10.0f));

	Vertex v;
	v.color[0] = 1.0f;
	v.color[1] = 0.0f;
	v.color[2] = 0.0f;
	v.normal[0] = 0.0f;
	v.normal[1] = 0.0f;
	v.normal[2] = 1.0f;

	for (int y = -10000; y <= 10000; y+=10) {
		for (int x = -10000; x<= 10000; x+=10) {
			if (area.contains(QVector2D(x, y))) {
				v.location[0] = x;
				v.location[1] = y;
				v.location[2] = height;
				renderable->vertices.push_back(v);
			}
		}
	}

	renderOne(renderable);
}
Exemplo n.º 12
0
void Entity::addRenderable(Renderable* r) {
	this->addRenderable(RenderablePtr(r));
}