示例#1
0
void TeapotWorld::Init(shared_ptr<Renderer> renderer)
{
    renderer->AddShader("full", "full");
    renderer->AddShader("skybox", "skybox");

    renderer->SetUniform("full|full", 1, 1.f); // specular
    renderer->SetUniform("full|full", 2, 128.f); // shininess

    shared_ptr<Buffer> cubeVertexBuffer = make_shared<Buffer>();

    cubeVertexBuffer->SetData(cubeVerts, 108);

    shared_ptr<Object> c = make_shared<Object>();
    c->AttachBuffer(0, cubeVertexBuffer);

    cube_ = make_shared<RenderObject>();
    cube_->object = c;
    cube_->program = "skybox|skybox";
    cube_->transformation = Matrix::Scale(30, 12, 30);
    cube_->colour[0] = cube_->colour[1] = cube_->colour[2] = 1;
    cube_->textureBindings.insert(make_pair(0, "environment"));

    shared_ptr<Buffer> teapotVertexBuffer = make_shared<Buffer>();
    shared_ptr<Buffer> teapotNormalBuffer = make_shared<Buffer>();

    teapotVertexBuffer->SetData(teapot_verts, 22176);
    teapotNormalBuffer->SetData(teapot_normals, 22176);

    shared_ptr<Object> o = make_shared<Object>();
    o->AttachBuffer(0, teapotVertexBuffer);
    o->AttachBuffer(1, teapotNormalBuffer);

    for (unsigned int i = 0; i < 50; ++i)
    {
        auto teapot = make_shared<RenderObject>();
        teapot->object = o;
        teapot->program = "full|full";
        teapot->colour[0] = RandF(0, 1);
        teapot->colour[1] = RandF(0, 1);
        teapot->colour[2] = RandF(0, 1);
        teapot->textureBindings.insert(make_pair(0, "environment"));
        teapots_.push_back(teapot);

        rotation_.push_back(Vector(RandF(0, PI), RandF(0, PI), RandF(0, PI)));
        position_.push_back(Vector(RandF(-5, 5), RandF(-2, 2), RandF(-5, 5)));
        reflectiveness_.push_back(RandF(0, 1));
    }

    vector<string> environment = { "posx.jpg", "negx.jpg", "posy.jpg", "negy.jpg", "posz.jpg", "negz.jpg" };
    renderer->AddCubeTexture("environment", environment);
}
示例#2
0
void SwarmWorld::Init(shared_ptr<Renderer> renderer)
{
    renderer->AddShader("basic", "basic");
    renderer->AddShader("skybox", "skybox");

    shared_ptr<Buffer> boidVertexBuffer = make_shared<Buffer>();
    boidVertexBuffer->SetData(boidVerts, 27);

    shared_ptr<Object> o = make_shared<Object>();
    o->AttachBuffer(0, boidVertexBuffer);

    bird_ = make_shared<RenderObject>();
    bird_->object = o;
    bird_->program = "basic|basic";
    bird_->colour[0] = bird_->colour[1] = bird_->colour[2] = 0.f;

    for (unsigned int i = 0; i < NUM_BOIDS; ++i)
    {
        Boid b;
        b.id = i;
        b.position = Vector(RandF(-4, 4), RandF(-4, 4), RandF(-4, 4));
        b.velocity = Vector(RandF(-0.01f, 0.01f), RandF(-0.01f, 0.01f), RandF(-0.01f, 0.01f));

        boids_.push_back(b);
        anims_.push_back(RandF(0, 1));
    }

    ermergerd_ = 0;

    shared_ptr<Buffer> skyboxVertexBuffer = make_shared<Buffer>();
    skyboxVertexBuffer->SetData(cubeVerts, 108);
    shared_ptr<Object> skyboxObject = make_shared<Object>();
    skyboxObject->AttachBuffer(0, skyboxVertexBuffer);

    skybox_ = make_shared<RenderObject>();
    skybox_->object = skyboxObject;
    skybox_->program = "skybox|skybox";
    skybox_->textureBindings.insert(make_pair(0, "skybox"));

    vector<string> skyboxFilenames = { "posx.jpg", "negx.jpg", "posy.jpg", "negy.jpg", "posz.jpg", "negz.jpg" };
    renderer->AddCubeTexture("skybox", skyboxFilenames);

    renderer->SetCameraPosition(Vector(0, -3, 7));
    renderer->SetCameraLookAt(Vector(0, 0, 0));

    glDisable(GL_CULL_FACE);
}