예제 #1
0
void Game::Init() {
	srand(time(0));
	m_isRunning = true;

	lightObj = GameObjectPtr(new GameObject());
	lightObj->Init();
	lightObj->AddComponent(Component::T_DirectionalLight);
	lightObj->DirectionalLight()->m_Color = vec4(1, 0.5, 0.5, 0.4);
	lightObj->Transform()->position = vec3(10, 10, 0);
	
	cameraObj = GameObjectPtr(new GameObject());
	cameraObj->Init();
	cameraObj->AddComponent(Component::T_PerspectiveCamera);
	cameraObj->PerspectiveCamera()->CalcProjMatrix();
	cameraObj->Transform()->position = vec3(100, 300, 0);
	GLRenderer::Instance().SetMainCamera(cameraObj->PerspectiveCamera());

	MaterialPtr testMat = SceneManager::Instance().CreateMaterial("DeferredPrepass");
    ShaderPtr shader = AssetManager::Instance().GetShader("deferred/Diffuse.shader");
	testMat->SetShaderProgram(shader);
	
	MaterialPtr bumpMat = SceneManager::Instance().CreateMaterial("DeferredPrepassBump");
    ShaderPtr bumpShader = AssetManager::Instance().GetShader("deferred/DiffuseNormal.shader");
	bumpMat->SetShaderProgram(bumpShader);

	boxObj = GameObjectPtr(new GameObject());
	boxObj->Init();
	boxObj->AddComponent(Component::T_MeshRenderer);
	boxObj->MeshRenderer()->SetMesh(AssetManager::Instance().GetMesh("meshes/de_dust2.obj"));
	boxObj->MeshRenderer()->SetMaterial(testMat);
	boxObj->Transform()->position = vec3(0, 0, 0);
	boxObj->MeshRenderer()->SetDiffuseMapTexture(AssetManager::Instance().GetTexture2D("meshes/test.tga"));
	boxObj->MeshRenderer()->SetNormalMapTexture(AssetManager::Instance().GetTexture2D("meshes/box_normal.tga"));
	boxObj->MeshRenderer()->SetTextureScale(vec2(1, 1));
	boxObj->AddComponent(Component::T_RigidBody);
	RigidBodyPtr bodyPtr = boxObj->RigidBody();
	CRigidBody* body = (CRigidBody*)(bodyPtr.get());
	body->InitializeStaticMesh();
	//body->InitializeStatic(PhysicsManager::Instance().CreateStaticMesh(AssetManager::Instance().GetMesh("meshes/de_dust2.obj")));

	PhysicsBoxPtr boxShape = PhysicsManager::Instance().CreateBoxShape(vec3(10, 10, 10));
	for(int i=0; i<32; i++) {
		boxObj = GameObjectPtr(new GameObject());
		boxObj->Init();
		char buf[256];
		sprintf(buf, "Box #%i", i);
		boxObj->Name(std::string(buf));
		boxObj->AddComponent(Component::T_MeshRenderer);
		boxObj->MeshRenderer()->SetMesh(AssetManager::Instance().GetMesh("meshes/bumpbox.obj"));
		if(i%2 == 0) {
			boxObj->MeshRenderer()->SetMaterial(testMat);
		} else {
			boxObj->MeshRenderer()->SetMaterial(bumpMat);
		}
		boxObj->MeshRenderer()->SetDiffuseMapTexture(AssetManager::Instance().GetTexture2D("meshes/test.tga"));
		boxObj->Transform()->position = vec3(0, 15+30*i, 0);
		boxObj->Transform()->scale = vec3(10, 10, 10);
	
		boxObj->AddComponent(Component::T_PointLight);
		boxObj->PointLight()->SetRadius(45.f);
		boxObj->PointLight()->m_Color = vec4(0.5f+float(rand()%1000)*0.001f*0.5f, 0.5f+float(rand()%1000)*0.001f*0.5f, 0.5f+float(rand()%1000)*0.001f*0.5f, 5);
		boxObj->AddComponent(Component::T_RigidBody);
		RigidBodyPtr boxBodyPtr = boxObj->RigidBody();
		CRigidBody* boxBody = (CRigidBody*)(boxBodyPtr.get());
		boxBody->InitializeDynamic(10.f, boxShape);
	}
}