コード例 #1
0
ファイル: scene.cpp プロジェクト: rarietta/Volumetric-Clouds
scene::scene(string filename){
	cout << "Reading scene from " << filename << " ..." << endl;
	cout << " " << endl;
	char* fname = (char*)filename.c_str();
	fp_in.open(fname);
	if(fp_in.is_open()){
		while(fp_in.good()){
			string line;
            utilityCore::safeGetline(fp_in,line);
			if(!line.empty()){
				vector<string> tokens = utilityCore::tokenizeString(line);
				if(strcmp(tokens[0].c_str(), "MATERIAL")==0){
				    loadMaterial(tokens[1]);
				    cout << " " << endl;
				}else if(strcmp(tokens[0].c_str(), "OBJECT")==0){
				    loadObject(tokens[1]);
				    cout << " " << endl;
				}else if(strcmp(tokens[0].c_str(), "LIGHT")==0){
				    loadLight(tokens[1]);
				    cout << " " << endl;
				}else if(strcmp(tokens[0].c_str(), "VOLUME")==0){
				    loadVolume(tokens[1]);
				    cout << " " << endl;
				}else if(strcmp(tokens[0].c_str(), "CAMERA")==0){
				    loadCamera();
				    cout << " " << endl;
				}
			}
		}
	}
}
コード例 #2
0
ファイル: sceneparser.cpp プロジェクト: JulioC/Scene-Renderer
Scene *SceneParser::loadScene(KeyValues *data)
{
  Scene *scene = new Scene();

  KeyValues *key = data->firstSubKey();
  while(key) {
    const char *name = key->name();

    if(strcmp(name, "object") == 0) {
      Object *object = loadObject(key);
      if(object) {
        scene->addObject(object);
      }
      else {
        fprintf(stderr, "Failed to load Object\n");
      }
    }
    else if(strcmp(name, "light") == 0) {
      Light *light = loadLight(key);
      if(light) {
        scene->addLight(light);
      }
      else {
        fprintf(stderr, "Failed to load Light\n");
      }
    }
    else {
      fprintf(stderr, "Unknown element: %s\n", name);
    }

    key = key->nextKey();
  }


  return scene;
}
コード例 #3
0
ファイル: SceneLoader.cpp プロジェクト: miaosun/laig-072-162
bool SceneLoader::loadIllumination()
{
	int doublesided, local;
	if((illuminationElement->QueryIntAttribute("doublesided", &doublesided)) == TIXML_SUCCESS &&
		(illuminationElement->QueryIntAttribute("local", &local) == TIXML_SUCCESS))
	{
		if(doublesided==1)
			illumination.doublesided=true;
		else if(doublesided==0)
			illumination.doublesided=false;
		else
		{
			cout<<"erro: doublesided deve ter valor boleano!\n";
			system("pause");
			return false;
		}
		if(local==1)
			illumination.local=true;
		else if(local==0)
			illumination.local=false;
		else
		{
			cout<<"erro: local deve ter valor boleano!\n";
			system("pause");
			return false;
		}
		cout<<"Illumination:\n\tDoubleSided: "<<illumination.doublesided<<", Local: "<<illumination.local<<endl;
	}
	else
	{
		cout<<"Erro parsing illumination\n";
		system("pause");
		return false;
	}

	ambientElement = illuminationElement->FirstChildElement("ambient");

	if(ambientElement!=NULL)
	{
		if(ambientElement->QueryFloatAttribute("r", &illumination.ambient[0]) == TIXML_SUCCESS &&
			ambientElement->QueryFloatAttribute("g", &illumination.ambient[1]) == TIXML_SUCCESS &&
			ambientElement->QueryFloatAttribute("b", &illumination.ambient[2]) == TIXML_SUCCESS &&
			ambientElement->QueryFloatAttribute("a", &illumination.ambient[3]) == TIXML_SUCCESS)
			cout<<"\tAmbient R, G, B, A: "<<illumination.ambient[0]<<", "<<illumination.ambient[1]<<", "<<illumination.ambient[2]<<", "<<illumination.ambient[3]<<endl;
		else
		{
			cout<<"Erro parsing ambiente de illumination\n";
			system("pause");
			return false;
		}
	}
	else
	{
		cout<<"problema com ambient de illumination\n";
		system("pause");
		return false;
	}

	backgroundElement = illuminationElement->FirstChildElement("background");
	if(backgroundElement!=NULL)
	{
		if(backgroundElement->QueryFloatAttribute("r", &illumination.backgroud[0]) == TIXML_SUCCESS &&
			backgroundElement->QueryFloatAttribute("g", &illumination.backgroud[1]) == TIXML_SUCCESS &&
			backgroundElement->QueryFloatAttribute("b", &illumination.backgroud[2]) == TIXML_SUCCESS &&
			backgroundElement->QueryFloatAttribute("a", &illumination.backgroud[3]) == TIXML_SUCCESS)
			cout<<"\tBackground R, G, B, A: "<<illumination.backgroud[0]<<", "<<illumination.backgroud[1]
			<<", "<<illumination.backgroud[2]<<", "<<illumination.backgroud[3]<<endl;
		else
		{
			cout<<"Erro parsing background de illumination\n";
			system("pause");
			return false;
		}
	}
	else
	{
		cout<<"Erro parsing background de illumination\n";
		system("pause");
		return false;
	}	

	TiXmlElement *luzes=illuminationElement->FirstChildElement("lights");
	lightsElement=luzes->FirstChildElement("light");
	int nLights = 0;
	while(lightsElement!=NULL)
	{
		if(nLights == global.maxlights)
		{
			cout<<"Ja chegou limite de maxLights\n";
			system("pause");
			return false;
		}
		else if(strcmp(lightsElement->Value(), "light") == 0)
			loadLight();
		else
		{
			cout<<"Erro parsing light de lights de illumination\n";
			system("pause");
			return false;
		}

		lightsElement = lightsElement->NextSiblingElement();
		nLights++;
	}
	cout<<endl;
	return true;
}
コード例 #4
0
ファイル: WorldState.cpp プロジェクト: joshandrews/cs314
void WorldState::loadLights()
{
    for (unsigned int i = 0; i < lights.size(); i++)
        loadLight(i);
}
コード例 #5
0
/**
 * http://cse.csusb.edu/tongyu/courses/cs420/notes/lighting.php
 * Sombreado por medio de la técnica Gouraud Shading.
 */
int main(int argc, char* argv[])
{
	// Crear una ventana de 750x750 pixels.
	int cw = 750;
	int ch = 750;

	cg_init(cw, ch, NULL);

	// Actualizar la pantalla:
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glMatrixMode(GL_PROJECTION);
	glViewport(0,0,cw, ch);
	glFrustum(-1,1,-1,1,1,1000);

	//Habilito la iluminación del pipeline estático de OpenGL.
	glEnable(GL_LIGHTING);
    glEnable(GL_DEPTH_TEST);

    // GL_LIGHT0
    Vec4 *vec4La0 = vec4Contructor(0.10f, 0.10f, 0.10f, 1.0f);
    Vec4 *vec4Ld0 = vec4Contructor(1.0f, 1.0f, 1.0f, 1.0f);
    Vec4 *vec4Ls0 = vec4Contructor(1.0f, 1.0f, 1.0f, 1.0f);
    Vec4 *vec4Lp0 = vec4Contructor(1.0f, 1.0f, 1.0f, 0.0f);
    loadLight(GL_LIGHT0, vec4La0, vec4Ld0, vec4Lp0, vec4Ls0);

    // GL_LIGHT1
    Vec4 *vec4La1 = vec4Contructor(0.5f,0.5f,0.5f,1.0f);
    Vec4 *vec4Ld1 = vec4Contructor(0.5f, 0.3f, 0.2f, 1.0f);
    Vec4 *vec4Ls1 = vec4Contructor(1.0f,1.0f,1.0f,1.0f);
    Vec4 *vec4Lp1 = vec4Contructor(1.0f, 1.0f, 1.0f, 0.0f);
    loadLight(GL_LIGHT1, vec4La1, vec4Ld1, vec4Lp1, vec4Ls1);
//    GLfloat spot_direction[] = { -1.0, -1.0, 0.0 };
//    glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);
//    glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);
//    glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);
//    glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);
//    glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
//    glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);

    // GL_LIGHT2
    Vec4 *vec4La2 = vec4Contructor( 0.2f, 0.2f, 0.2f, 1.0f);
    Vec4 *vec4Ld2 = vec4Contructor(0.8f, 0.8f, 0.8, 1.0f );
    Vec4 *vec4Lp2 = vec4Contructor(-1.5f, 1.0f, -4.0f, 1.0f );
    Vec4 *vec4Ls2 = vec4Contructor(0.5f, 0.5f, 0.5f, 1.0f );
    loadLight(GL_LIGHT2, vec4La2, vec4Ld2, vec4Lp2, vec4Ls2);


    // TODO, GL_LIGHT3, GL_LIGHT4, GL_LIGHT5, GL_LIGHT6, GL_LIGHT7

    Obj* obj = obj_load("../Models/knight.obj");

	float ang = 0.0f;
	float pitch = 0.0f;
	float ang_vel = 1.0f;

	char done = 0;
	char wireframe = 0;
	char gourandShading = 0;
	char bfc = 0;
	char zbuff = 1;
    char enableLight0 = 0;
    char enableLight1 = 0;
    char enableLight2 = 0;
    char enableLight3 = 0;
    char enableLight4 = 0;
    char enableLight5 = 0;
    char enableLight6 = 0;
    char enableLight7 = 0;
	unsigned char key_pressed[1024];
	memset(key_pressed, 0, 1024);

	while (!done)
	{
		SDL_Event event;
		while(SDL_PollEvent(&event))
		{
			switch (event.type)
			{
				case SDL_KEYDOWN:
					key_pressed[event.key.keysym.sym] = 1;

					if (event.key.keysym.sym == SDLK_z)
					{
						zbuff = !zbuff;
						if(zbuff)
							glEnable(GL_DEPTH_TEST);
						else
							glDisable(GL_DEPTH_TEST);
						break;
					}
					else if (event.key.keysym.sym == SDLK_b)
					{
						bfc = !bfc;
						if(bfc)
						{
							glEnable(GL_CULL_FACE);
							glCullFace(GL_BACK);
							glFrontFace(GL_CW);
						}
						else
							glDisable(GL_CULL_FACE);
						break;
					}
					else if (event.key.keysym.sym == SDLK_m)
					{
						wireframe = !wireframe;
						if(wireframe)
							glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
						else
							glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
						break;
					}
                    else if (event.key.keysym.sym == SDLK_g)
                    {
                        gourandShading = !gourandShading;
                        if(gourandShading)
                            glShadeModel(GL_FLAT);
                        else
                            glShadeModel(GL_SMOOTH);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_0)
                    {
                        enableLight0 = !enableLight0;
                        if(enableLight0) glEnable(GL_LIGHT0);
                        else glDisable(GL_LIGHT0);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_1)
                    {
                        enableLight1 = !enableLight1;
                        if(enableLight1) glEnable(GL_LIGHT1);
                        else glDisable(GL_LIGHT1);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_2)
                    {
                        enableLight2 = !enableLight2;
                        if(enableLight2) glEnable(GL_LIGHT2);
                        else glDisable(GL_LIGHT2);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_3)
                    {
                        enableLight3 = !enableLight3;
                        if(enableLight3) glEnable(GL_LIGHT3);
                        else glDisable(GL_LIGHT3);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_4)
                    {
                        enableLight4 = !enableLight4;
                        if(enableLight4) glEnable(GL_LIGHT4);
                        else glDisable(GL_LIGHT4);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_5)
                    {
                        enableLight5 = !enableLight5;
                        if(enableLight5) glEnable(GL_LIGHT5);
                        else glDisable(GL_LIGHT5);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_6)
                    {
                        enableLight6 = !enableLight6;
                        if(enableLight6) glEnable(GL_LIGHT6);
                        else glDisable(GL_LIGHT6);
                        break;
                    }
                    else if (event.key.keysym.sym == SDLK_7)
                    {
                        enableLight7 = !enableLight7;
                        if(enableLight7) glEnable(GL_LIGHT7);
                        else glDisable(GL_LIGHT7);
                        break;
                    }
					else if (event.key.keysym.sym != SDLK_ESCAPE)
						break;
				case SDL_QUIT :
					done = 1;
					break;
				case SDL_KEYUP:
					key_pressed[event.key.keysym.sym] = 0;

			}
		}

		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
		glTranslatef(0.0f, 0.0f, -50.0f);
		glRotatef(pitch, 1.0f, 0.0f, 0.0f);
		glRotatef(ang, 0.0f, 1.0f, 0.0f);
		glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);

		if(key_pressed[SDLK_RIGHT]) ang += ang_vel;
		if(key_pressed[SDLK_LEFT]) ang -= ang_vel;
		if(key_pressed[SDLK_UP]) pitch += ang_vel;
		if(key_pressed[SDLK_DOWN]) pitch -= ang_vel;

		glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
		obj_render(obj);
		cg_repaint();
	}

	// Liberar recursos:

    obj_free(obj);
	cg_close();

	return 0;
}