Ejemplo n.º 1
0
void Scene::CreateTestScene()
{
    Material* lambert1 = new LambertMaterial(glm::vec3(1, 0, 0));
    Material* lambert2 = new LambertMaterial(glm::vec3(0, 1, 0));

    Cube* c = new Cube();
    c->material = lambert1;
    c->transform = Transform(glm::vec3(1,0,0), glm::vec3(40,20,45), glm::vec3(1,1,1));
    c->create();
    c->setBBox();
    this->objects.append(c);

    Sphere* s = new Sphere();
    s->material = lambert2;
    s->transform = Transform(glm::vec3(-1,0,0), glm::vec3(30,50,30), glm::vec3(1,2,1));
    s->create();
    s->setBBox();
    this->objects.append(s);

    unsigned int w = 400, h = 400;
    camera = Camera(w, h);
    camera.near_clip = 0.1f;
    camera.far_clip = 100.0f;
    camera.create();
    film = Film(w, h);
}
Ejemplo n.º 2
0
int main(int argc, char** argv) {
    Engine* engine = new Engine();
    if(!engine->init()) {
        std::cout << "Engine initialization failed\n";
        return 1;
    }

    engine->getShaderManager()->createProgram("mainShader", "Shaders/VertexShader.glsl", "Shaders/FragmentShader.glsl");
    GLuint program = engine->getShaderManager()->getProgram("mainShader");
    if(program == 0) {
        std::cout << "Program initialization failed\n";
        return 2;
    }
    engine->getSceneManager()->setProgram(program);

    Skybox* skybox = new Skybox();
    skybox->create(40.0f);
    skybox->setRotation(glm::vec3(0.0f, 180.0f, 0.0f));
    skybox->addMaterial(0, "Resources/Copyrighted/skybox1.png", 1.0f, 0.0f, 0.0f, 0.0f, engine->getTextureLoader());
    engine->getModelManager()->setModel("skybox", skybox);

    Cuboid* floorBox = new Cuboid();
    floorBox->create(40.0f, 1.0f, 40.0f, glm::vec4(0.24f, 0.267f, 0.337f, 1.0f));
    floorBox->setPosition(glm::vec3(0.0f, -8.0f, 0.0f));
    engine->getModelManager()->setModel("floorBox", floorBox);

    glm::vec3 sunPosition(-8.7f, 20.0f, 11.1f);
    engine->getSceneManager()->addLight(0, sunPosition, glm::vec3(1.0), 1.0f, 0.0, 0.0);
    Sphere* sun = new Sphere();
    sun->create(1.2f, 16, 16, glm::vec4(1.0f, 1.0f, 0.9f, 1.0f));
    sun->setBaseMaterial(1.0f, 0.0f, 0.0f, 0.0f);
    sun->setPosition(sunPosition);
    engine->getModelManager()->setModel("sun", sun);

    glm::vec3 lampPosition(8.0f, -1.0f, 5.0f);
    engine->getSceneManager()->addLight(1, lampPosition, glm::vec3(4.0f, 1.0f, 1.0f), 1.0f, 0.003f, 0.0005f);
    Sphere* lamp = new Sphere();
    lamp->create(0.3f, 16, 16, glm::vec4(1.0f, 0.2f, 0.2f, 1.0f));
    lamp->setBaseMaterial(1.0f, 0.0f, 0.0f, 0.0f);
    lamp->setPosition(lampPosition);
    engine->getModelManager()->setModel("lamp", lamp);

    Eel* eel = new Eel();
    eel->create(10.0f, 0.5f, 16);
    eel->setPosition(glm::vec3(0.0f, 0.0f, 0.0f));
    eel->addMaterial(0, "Resources/Copyrighted/scales1_2.png", 0.05f, 0.6f, 3.5f, 12.0f, engine->getTextureLoader());
    eel->addMaterial(1, "Resources/Textures/sphere_dots.png", 0.25f, 0.4f, 0.7f, 1.0f, engine->getTextureLoader());
    eel->addNormalMap("Resources/Copyrighted/scales1-normal3.png", engine->getTextureLoader());
    engine->getModelManager()->setModel("eel", eel);

    Sphere* sphere = new Sphere();
    sphere->create(1.0f, 24, 48);
    sphere->setPosition(glm::vec3(0.0f, -2.0f, 14.0f));
    sphere->setRotation(glm::vec3(30.0f, 0.0f, 0.0f));
    sphere->setRotationSpeed(glm::vec3(0.0f, 20.0f, 0.0f));
    sphere->addMaterial(0, "Resources/Textures/sphere1.bmp", 0.02f, 0.3f, 2.5f, 15.0f, engine->getTextureLoader());
    sphere->addMaterial(1, "Resources/Textures/sphere_dots.png", 0.02f, 0.8f, 1.0f, 1.0f, engine->getTextureLoader());
    sphere->addNormalMap("Resources/Copyrighted/fish-normal.bmp", engine->getTextureLoader());
    engine->getModelManager()->setModel("sphere", sphere);

    engine->run();

    delete engine;
    return 0;
}
Ejemplo n.º 3
0
	void OnCreate() {


		// important: call base class to load extensions
		GLWindowEx::OnCreate();

		// does this driver support multitexture?
		_bHaveMultitex = glex::Supports( "GL_ARB_multitexture" );
		if (!_bHaveMultitex) {
			// warn the user if multitexture not supported
			App::MsgPrintf("GL_ARB_multitexture NOT found");
		}

		// if it supports multitexture, turn it on
		_bMultitex = _bHaveMultitex;


		// clear window first: it might take a moment before image loads
		glClear(GL_COLOR_BUFFER_BIT);
		SwapBuffers();

		// load image
		_images[0].Load("left.bmp");
		_images[1].Load("right.bmp");
		_images[2].Load("top.bmp");
		_images[3].Load("bottom.bmp");
		_images[4].Load("front.bmp");
		_images[5].Load("back.bmp");
		_images[6].Load("checker3.bmp");
		_images[7].Load("star.bmp");

		glGenTextures(8, &_textures[0]);

		// build 2D mip-maps from image
		for (int i = 0; i<7;i++) {
			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
			glBindTexture(GL_TEXTURE_2D, _textures[i]);
			_images[i].gluBuild2DMipmaps();
			_images[i].Free();
		};

		// last star texture
		glBindTexture(GL_TEXTURE_2D, _textures[7]);
		 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
		 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
		_images[7].gluBuild2DMipmaps();
		_images[7].Free();


		// set the projection required
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glFrustum(-1.0f, +1.0f, -1.0f, +1.0f, 1.0f, +30.0f);
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();

		glViewport(0,0, Width(), Height());
		glEnable(GL_DEPTH_TEST);

		// set the background clear colour to black
		glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		// set the shade model to smooth (Gouraud shading)
		glShadeModel(GL_SMOOTH);

		// remove back faces
		glEnable(GL_CULL_FACE);

		_material1.create(Color::black(), Color(0.9f,0.9f,0.9f,1.0f));
		_material2.create(Color::black(), Color(0.7f,0.7f,0.7f,0.5f));
		_material3.create(Color::black(), Color::black(), Color::yellow());

		// setup some lights (ambient is turned off on all lights)
		_light1.create(0, Color::black(), Color(0.5f,0.5f,0.5f,1.0f)); 
		_light2.create(1, Color::black(), Color(0.5f,0.5f,0.5f,1.0f)); 
		_light3.create(2, Color::black(), Color(0.5f,0.5f,0.0f,1.0f));
		_light4.create(3, Color::black(), Color(0.5f,0.5f,0.5f,1.0f)); 
		_light5.create(4, Color::black(), Color(0.5f,0.5f,0.5f,1.0f)); 


		// turn the global ambient off by setting it to zero
		glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Color::black().rgba());

		_light3.setPosition(Vector4f(0.0,5.0,-3.0,1.0));
		// Turn on the lights
		_light1.apply();
		_light2.apply();
		_light3.apply();
		_light4.apply();
		_light5.apply();

		// setup the two spheres
		_sphere1.create(0.1f, 10, 10, false);
		_sphere2.create(1.0f, 20, 20, true);

		_cameraAngle = 15.0;
		_cameraPosition = -5.0;
		_cameraRotation = 0.0;
		_fullscreen = false;

	}