Exemple #1
0
	bool RenderEngine::init()
	{
		if ( !mEffect.loadFromSingleFile( "Shader/MVPiece") )
			return false;

		locDirX = mEffect.getParamLoc( "dirX" );
		locDirZ = mEffect.getParamLoc( "dirZ" );
		locLocalScale = mEffect.getParamLoc( "localScale" );

		{
			MeshLoader loader;

			if ( !MeshUtility::createCube( mMesh[ MESH_BOX ] , 0.5f ) ||
				!MeshUtility::createUVSphere( mMesh[ MESH_SPHERE ] , 0.3 , 10 , 10 ) ||
				!MeshUtility::createPlane( mMesh[ MESH_PLANE ] , Vector3(0.5,0,0) ,Vector3(1,0,0) , Vector3(0,1,0) , 0.5 , 1 ) )
				return false;

			for( int i = 0 ; i < ARRAY_SIZE( gMeshInfo ) ; ++i )
			{
				MeshInfo const& info = gMeshInfo[i];
				FixString< 256 > path = "Mesh/";
				path += info.name; path += ".obj";
				if ( !loader.load( mMesh[ info.id ] , path ) )
					return false;
			}
		}


		glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
		glEnable( GL_CULL_FACE );
		glEnable( GL_DEPTH_TEST );


		return true;
	}
		CComplexModelSceneNode::CComplexModelSceneNode(CSceneManager *sceneManager, string filename, string texture)
		{
			//mesh =  new CMesh(filename);
			MeshLoader *msl = new MeshLoader;
			mesh = msl->loadMesh(ASSETS::MODEL(filename));
			this->sceneManager = sceneManager;
			this->texture =  texture;
			reset();
		}
int main(void)
{
	if(!glfwInit())
		return -1;

	window = glfwCreateWindow(windowWidth, windowHeight, "Simple Render", NULL, NULL);
	glfwMakeContextCurrent(window);

	if( window == NULL )
	{
		fprintf( stderr, "Failed to open GLFW window.\n" );
		glfwTerminate();
		return -1;
	}
	
	//glewExperimental = GL_TRUE; 
	if (glewInit() != GLEW_OK) {
		fprintf(stderr, "Failed to initialize GLEW\n");
		return -1;
	}
	glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);

	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL); 

	glClearColor(0.4f,0.5f,1.0f,1.0f);	
	
	MeshLoader* meshLoader = new MeshLoader();
	Camera camera(window, (float)windowWidth/windowHeight, vec2(windowWidth/2, windowHeight/2));
	DirectionLight dirLight;
	Scene* scene = new Scene(windowWidth, windowHeight, "Scene.json", meshLoader);

	ColorFrameBufferObj defaultFBO(windowWidth, windowHeight);
	map<string, GLuint> textures;
	textures["colorTex"] = defaultFBO.getTextureID();

	Mesh* quad = meshLoader->loadMesh("Quad.obj");
	Bloom bloom(windowWidth, windowHeight, quad);
	ImageEffect tiltShift(windowWidth, windowHeight, quad, (new ImageMaterial("TiltShift.glsl"))->getID());
	bloom.setImageEffect(&tiltShift);

	while (glfwWindowShouldClose(window) == 0 && glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS)
	{
		scene->render(camera, dirLight, defaultFBO);
		bloom.process(textures);
		camera.update();
		dirLight.updatePosition();
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

	glfwTerminate();
	return 0;
}
Exemple #4
0
    /**
        Loads data from mesh files located in the folder specified in the
        geometry parameters (command line parameter --mesh-folder)
    */
    void _loadMeshFolder()
    {
#ifdef BRAYNS_USE_ASSIMP
        GeometryParameters& geometryParameters =
            _parametersManager->getGeometryParameters();
        const boost::filesystem::path& folder =
            geometryParameters.getMeshFolder( );
        BRAYNS_INFO << "Loading meshes from " << folder << std::endl;
        MeshLoader meshLoader;
        size_t meshIndex = 0;

        boost::filesystem::directory_iterator endIter;
        if( boost::filesystem::exists(folder) &&
            boost::filesystem::is_directory(folder))
        {
            for( boost::filesystem::directory_iterator dirIter( folder );
                 dirIter != endIter; ++dirIter )
            {
                if( boost::filesystem::is_regular_file(dirIter->status( )))
                {
                    const std::string& filename = dirIter->path( ).string( );
                    BRAYNS_INFO << "- " << filename << std::endl;
                    ScenePtr scene = _engine->getScene();
                    MeshContainer MeshContainer =
                    {
                        scene->getTriangleMeshes(), scene->getMaterials(),
                        scene->getWorldBounds()
                    };
                    if(!meshLoader.importMeshFromFile(
                        filename, MeshContainer, MQ_FAST, NO_MATERIAL ))
                    {
                        BRAYNS_ERROR << "Failed to import " <<
                        filename << std::endl;
                    }
                    ++meshIndex;
                }
            }
        }
#endif
    }
Exemple #5
0
int main(int argc, char* argv[])
{
  int ret = ERROR_FAILURE;

  if (argc < 2)
  {
    printf("please input as this format: <mesh type> <meshfile> [meshfiledump] \n");
    return ERROR_FAILURE;
  }

  char *mtype = argv[1];
  char *file_name = argv[2];
  char *file_name_dump = NULL;
  if (argc > 2)
    file_name_dump = argv[3];

  // load the mesh file
  Mesh mesh;
  MeshLoader *mloader = NULL;
  if (strcmp(mtype, "exII") == 0) mloader = new ExodusIIReader();
  else if (strcmp(mtype, "h2d") == 0) mloader = new H2DReader();
  else if (strcmp(mtype, "h2d-str") == 0) {
    // load the file into a string
    FILE *file = fopen(file_name , "rb");
    error_if(file == NULL, "unable to open file '%s'", file_name);

    // obtain file size:
    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    rewind(file);

    // allocate memory to contain the whole file:
    char *buffer = (char *) malloc (sizeof(char) * size);
    error_if(buffer == NULL, "memory error");

    // copy the file into the buffer:
    size_t result = fread(buffer, 1, size, file);
    error_if(result != size, "reading error");

    fclose(file);

    //
    H2DReader *hloader = new H2DReader();
    hloader->load_str(buffer, &mesh);
    ret = dump_compare(mesh, file_name_dump);
    delete hloader;
    free(buffer);
    return ret;
  }
  else if (strcmp(mtype, "h2d-old") == 0) {
    H2DReader *hloader = new H2DReader();
    hloader->load_old(file_name, &mesh);
    ret = dump_compare(mesh, file_name_dump);
    delete hloader;
    return ret;
  }
  else {
    error("unknown mesh loader type");
  }

  if (mloader->load(file_name, &mesh))
  {
    ret = dump_compare(mesh, file_name_dump);
  }
  else
  {
    error("failed");
    ret = ERROR_FAILURE;
  }

  delete mloader;

  return ret;
}
Exemple #6
0
//---------------------------------------------------------------------------
void Init()
{
  backbuffer = new Buffer(windowSize.x, windowSize.y);

  float lumScale = 1.f;
  Color ballDiffuse(0.1f, 0.4f, 0.4f);
  Color ballSpec(0.2f, 0.2f, 0.2f);
  Color ballEmit(0.75f, 0.75f, 0.75f);

  Color planeDiffuse(0.5, 0, 0);
  Color planeSpec(0.1f, 0.1f, 0.1f);
  ballEmit = lumScale * ballEmit;
  Color zero(0, 0, 0);

#define LOAD_MESH 0

#if LOAD_MESH
  MeshLoader loader;
  loader.Load("gfx/crystals_flat.boba");

  for (const protocol::MeshBlob* meshBlob : loader.meshes)
  {
    for (u32 i = 0; i < meshBlob->numIndices; i += 3)
    {
      u32 idx0 = meshBlob->indices[i + 0];
      u32 idx1 = meshBlob->indices[i + 1];
      u32 idx2 = meshBlob->indices[i + 2];

      Vector3 p0 = { meshBlob->verts[idx0 * 3 + 0], meshBlob->verts[idx0 * 3 + 1], meshBlob->verts[idx0 * 3 + 2] };
      Vector3 p1 = { meshBlob->verts[idx1 * 3 + 0], meshBlob->verts[idx1 * 3 + 1], meshBlob->verts[idx1 * 3 + 2] };
      Vector3 p2 = { meshBlob->verts[idx2 * 3 + 0], meshBlob->verts[idx2 * 3 + 1], meshBlob->verts[idx2 * 3 + 2] };

      tris.push_back({ p0, p1, p2 });
    }
  }

#else
#if 1
  int numBalls = 10;
  for (u32 i = 0; i < numBalls; ++i)
  {
    float angle = i * 2 * Pi / numBalls;
    Geo* g = new Sphere(Vector3(10 * cosf(angle), 0, 30 + 10 * sinf(angle)), 2);
    if (i & 1)
      g->material = new Material(ballDiffuse, ballSpec, zero);
    else
      g->material = new Material(ballDiffuse, ballSpec, ballEmit);
    objects.push_back(g);
  }

  Geo* center = new Sphere(Vector3(0, 50, 30), 15);

  center->material = new Material(ballDiffuse, zero, ballEmit);
  objects.push_back(center);
#else
  {
    Geo* g = new Sphere(Vector3(-10, 10, 30), 7);
    g->material = new Material(ballDiffuse, ballSpec, ballEmit);
    objects.push_back(g);
  }

  {
    Geo* g = new Sphere(Vector3(0, 0, 30), 5);
    g->material = new Material(ballDiffuse, ballSpec, zero);
    objects.push_back(g);
  }

  {
    Geo* g = new Sphere(Vector3(10, 0, 30), 2);
    g->material = new Material(ballDiffuse, ballSpec, zero);
    objects.push_back(g);
  }
#endif

  Geo* plane = new Plane(Vector3(0, 1, 0), 0);
  plane->material = new Material(planeDiffuse, planeSpec, zero);
  objects.push_back(plane);

  for (Geo* g : objects)
  {
    if (g->material->emissive.Max3() > 0)
      emitters.push_back(g);
  }
#endif

}