Exemplo n.º 1
0
	PxGeometry& Camera::getPixelFrustum(FDreal pixelXSize, FDreal pixelYSize) {
		
		if (pixelFrustum.isValid()) {
			return pixelFrustum;
		}

		Vector3 proj1(-pixelXSize / 2, -pixelYSize / 2, 1);
		Vector3 proj2(-pixelXSize / 2, pixelYSize / 2, 1);
		Vector3 proj3(pixelXSize / 2, -pixelYSize / 2, 1);
		Vector3 proj4(pixelXSize / 2, pixelYSize / 2, 1);

		fdmath::Matrix44 projInverse;
		fdmath::gluInvertMatrix44(projection, projInverse);

		FDreal len = -100.0f;
		Vector3 view1 = projInverse.transform(proj1).getNormalized() * len;
		Vector3 view2 = projInverse.transform(proj2).getNormalized() * len;
		Vector3 view3 = projInverse.transform(proj3).getNormalized() * len;
		Vector3 view4 = projInverse.transform(proj4).getNormalized() * len;

		static const PxVec3 convexVerts[] = {PxVec3(0,0,0), view1, 
				view2, view3, view4};

		PhysicsSystem* physics = FreeThread__getWorld().
				getSystem<PhysicsSystem>();

		PxConvexMeshDesc convexDesc;
		convexDesc.points.count     = 5;
		convexDesc.points.stride    = sizeof(PxVec3);
		convexDesc.points.data      = convexVerts;
		convexDesc.flags            = PxConvexFlag::eCOMPUTE_CONVEX;
		convexDesc.vertexLimit      = 256;

		PxDefaultMemoryOutputStream buf;
		if (!physics->cooking->cookConvexMesh(convexDesc, buf)) {
			FD_THROW(GenericException("Unable to cook convex pixel mesh!"));
		}
		PxDefaultMemoryInputData input(buf.getData(), buf.getSize());
		PxConvexMesh* convexMesh = physics->physics->createConvexMesh(input);

		pixelFrustum = PxConvexMeshGeometry(convexMesh);

		return pixelFrustum;
	}
Exemplo n.º 2
0
int main ()
{
	SingleParticle2dx::ConfigContainer* config = SingleParticle2dx::ConfigContainer::Instance();
	
	int n = config->getParticleSize();
	
	config->setProjectionMethod(4);
	config->setCacheProjections(false);
	config->setParallelProjection(false);
	config->setProjectionMaskingMethod(0);
	config->setRefinementMethod(0);
	config->setTrialAngleGenerator(4);
	config->setBackprojectionMethod(0);
	config->setLPProjectionRadius(n);
	
	SingleParticle2dx::DataStructures::Reconstruction3d rec3d(n,n,n);
	
	SingleParticle2dx::Utilities::UtilityFunctions::generateInitialModelForInitRef(rec3d);
	
	rec3d.scale(1/1.34);
	
	SingleParticle2dx::Utilities::UtilityFunctions::setProgressBar( 33 );
	
	SingleParticle2dx::DataStructures::ParticleContainer c_dummy;
	rec3d.forceProjectionPreparation(c_dummy);
	
	SingleParticle2dx::DataStructures::Projection2d proj1(n,n);
	SingleParticle2dx::DataStructures::Projection2d proj2(n,n);
	SingleParticle2dx::DataStructures::Projection2d proj3(n,n);
	
	SingleParticle2dx::DataStructures::Orientation o1(0,0,0);
	SingleParticle2dx::DataStructures::Orientation o2(0,90,0);
	SingleParticle2dx::DataStructures::Orientation o3(0,90,90);
	
	rec3d.calculateProjection(o1, proj1);
	rec3d.calculateProjection(o2, proj2);
	rec3d.calculateProjection(o3, proj3);
	
	if(config->getShowSights())
	{	
		proj1.setMidddleTarget();
		proj2.setMidddleTarget();
		proj3.setMidddleTarget();
	}
	
	SingleParticle2dx::Utilities::UtilityFunctions::setProgressBar( 66 );
	
	std::string cont_folder_name = config->getContainerName() + "/Div_output/";
	std::string filename_p1 = cont_folder_name + "init_topview.mrc";
	std::string filename_p2 = cont_folder_name + "init_sideview1.mrc";
	std::string filename_p3 = cont_folder_name + "init_sideview2.mrc";
	
	proj1.writeToFile(filename_p1);
	proj2.writeToFile(filename_p2);
	proj3.writeToFile(filename_p3);
	
	SingleParticle2dx::Utilities::UtilityFunctions::generateImageOutput(filename_p1, "Top View", config->getScriptName(), false, false);
	SingleParticle2dx::Utilities::UtilityFunctions::generateImageOutput(filename_p2, "Side View X", config->getScriptName(), false, false);
	SingleParticle2dx::Utilities::UtilityFunctions::generateImageOutput(filename_p3, "Side View Y", config->getScriptName(), false, false);
	
	rec3d.writeToFile(config->getContainerName() + "/Rec_3d/Init3DFromMRC.map");
	SingleParticle2dx::Utilities::UtilityFunctions::generateImageOutput(config->getContainerName() + "/Rec_3d/Init3DFromMRC.map", "Initial 3D Reference", config->getScriptName(), true, true);
	
	SingleParticle2dx::Utilities::UtilityFunctions::setProgressBar( 100 );
	
	return 0;
}