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);
}
Esempio n. 2
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);
}
Esempio n. 3
0
void ModelRenderer::renderSetup(const Setup& setup,
    const glm::mat4& projectionMat,
    const glm::mat4& viewMat,
    const glm::mat4& worldMat)
{
    const AnimationFrame& frame = setup.placementFrames.back();

    for(uint32_t i = 0; i < setup.models.size(); i++)
    {
        const Location& location = frame.locations[i];
        const glm::vec3& scale = setup.scales[i];

        glm::mat4 subWorldMat = glm::translate(glm::mat4{}, location.position) * glm::mat4_cast(location.rotation) * glm::scale(glm::mat4(), scale);

        renderOne(setup.models[i],
            projectionMat,
            viewMat,
            worldMat * subWorldMat);
    }
}
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);
}
Esempio n. 5
0
void Renderer::render(std::vector<RenderablePtr>& renderables) {
    for (int i = 0; i < renderables.size(); i++) {
        renderOne(renderables[i]);
    }
}
Esempio n. 6
0
void ModelRenderer::render(const glm::mat4& projectionMat, const glm::mat4& viewMat)
{
    program_.use();

    LandcellManager& landcellManager = Core::get().landcellManager();
    ObjectManager& objectManager = Core::get().objectManager();

    glm::vec3 cameraPosition = Core::get().camera().position();
    glUniform4f(program_.getUniform("cameraPosition"),
        static_cast<GLfloat>(cameraPosition.x),
        static_cast<GLfloat>(cameraPosition.y),
        static_cast<GLfloat>(cameraPosition.z), 1.0f);

    // first pass, render solid objects and collect objects that need depth sorting
    depthSortList_.clear();

    for(auto& pair : objectManager)
    {
        Object& object = *pair.second;

        if(!object.model())
        {
            continue;
        }

        int dx = object.landcellId().x() - landcellManager.center().x();
        int dy = object.landcellId().y() - landcellManager.center().y();

        glm::vec3 blockPosition{dx * Land::kBlockSize, dy * Land::kBlockSize, 0.0};

        glm::mat4 rotateMat = glm::mat4_cast(object.location().rotation);
        glm::mat4 translateMat = glm::translate(glm::mat4{}, blockPosition + object.location().position);
        glm::mat4 worldMat = translateMat * rotateMat;

        renderOne(object.model(), projectionMat, viewMat, worldMat);
    }

    for(auto& pair : landcellManager)
    {
        int dx = pair.first.x() - landcellManager.center().x();
        int dy = pair.first.y() - landcellManager.center().y();

        glm::mat4 blockTransform = glm::translate(glm::mat4{}, glm::vec3{dx * Land::kBlockSize, dy * Land::kBlockSize, 0.0});

        for(const StaticObject& staticObject : pair.second->staticObjects())
        {
            renderOne(staticObject.resource, projectionMat, viewMat, blockTransform * staticObject.transform);
        }
    }

    // second pass, sort and render objects that need depth sorting
    sort(depthSortList_.begin(), depthSortList_.end(), CompareByDepth{});

    for(const DepthSortedModel& depthSortedModel : depthSortList_)
    {
        renderModel(*depthSortedModel.model,
            projectionMat,
            viewMat,
            depthSortedModel.worldMat,
            /*firstPass*/ false);
    }
}