示例#1
0
bool Dlite::ComputeShortestPath(LocalMap &map)
{
    while (OPEN.top_key_less_than(CalculateKey(*start)) || start->rhs != start->g) {
        ++number_of_steps;
        Node* current = OPEN.get();\
        Key old_key = current->key;
        Key new_key = CalculateKey(*current);
        if (old_key < new_key) {
            current->key = new_key;
            OPEN.put(current);
        } else if (current->g > current->rhs) {
            current->g = current->rhs;
            OPEN.pop();
            for (auto elem : GetSuccessors(current, map)) {
                if (elem->point != map.goal && elem->rhs > current->g + GetCost(elem->point, current->point, map)) {
                    elem->parent = current;
                    elem->rhs = current->g + GetCost(elem->point, current->point, map);
                }
                UpdateVertex(elem); // !!!<-apparently OK
            }
        } else {
            //double old_g = current->g;
            current->g = std::numeric_limits<double>::infinity();
            std::vector<Node* > succ = GetSuccessors(current, map);
            succ.push_back(current);
            for (auto elem : succ) {
                if (elem->point != map.goal && elem->parent->point == current->point) {
                    Node min_val = GetMinPredecessor(elem, map);
                    elem->rhs = min_val.rhs;
                    if(min_val.parent)
                        elem->parent = min_val.parent;
                }
                UpdateVertex(elem);
            }
        }
        /*if(current->parent) {
            std::cout << current->point << "g " << current->g << " rhs" << current->rhs <<
                  current->parent->point << std::endl;
        }  */   //std::cout << OPEN.top_key().k1 << std::endl;
        //OPEN.print_elements();

    }
    if (start->rhs != std::numeric_limits<double>::infinity()) {
        current_result.pathfound = true;
        current_result.numberofsteps = number_of_steps;
        current_result.nodescreated = NODES.size();
        //std::cout << start->rhs << std::endl;
        //MakePrimaryPath(start);
        //current_result.lppath = &path;
        //map.PrintPath(curpath);
        //for (auto elem : curpath) path.push_back(elem);
        return true;
    } else {
        current_result.pathfound = false;
        current_result.pathlength = 0;
        return false;
    }
    return false;
}
示例#2
0
      /// <summary>Encodes a byte array</summary>
      /// <param name="buffer">Buffer to encode</param>
      /// <param name="length">Length of buffer</param>
      /// <param name="streamPos">Stream position matching the first buffer element to be encoded</param>
      void  CatalogStream::Encode(byte* buffer, DWORD length, DWORD  streamPos)
      {
         byte key = CalculateKey(streamPos);

         // Encode buffer
         for (DWORD i = 0; i < length; i++)
            buffer[i] ^= key++;
      }
示例#3
0
void Dlite::UpdateVertex(Node* u)
{
    if (!(u->IsConsistent())) {
        u->key = CalculateKey(*u);
        //std::cout << "key: "<< u->key.k1 << " " << u->key.k2 << " " << u->point << std::endl;
        OPEN.put(u); //check if it is already there
    } else {
        OPEN.remove_if(u);
    }
}
示例#4
0
DWORD CalculateDemoKey::DoCalculateDemoKey(char* folder)
{    
  DWORD dwCrc32_dxf = 0xD5452A29;
  DWORD dwCrc32_rct = 0x33CAEEBF;
  DWORD dwCrc32_pgm = 0x6E5415D4;
  DWORD dwCrc32_mdb = 0x6A0696B1;
  DWORD dwCrc32_trn = 0x4F4AEE74;
  DWORD dwCrc32_dat = 0xDF3297AC;

  DWORD multiplier_dxf = 0x2BAE3564;
  DWORD multiplier_rct = 0x76777938;
  DWORD multiplier_pgm = 0x2DCD0605;
  DWORD multiplier_mdb = 0xEFA6BF10;
  DWORD multiplier_trn = 0xBD367A8F;
  DWORD multiplier_dat = 0xD4F8A26A;

  CalculateKey(folder, ".dxf", multiplier_dxf, dwCrc32_dxf);
  CalculateKey(folder, ".rct", multiplier_rct, dwCrc32_rct);
  CalculateKey(folder, ".pgm", multiplier_pgm, dwCrc32_pgm);
  CalculateKey(folder, ".mdb", multiplier_mdb, dwCrc32_mdb);
  CalculateKey(folder, ".trn", multiplier_trn, dwCrc32_trn);
  CalculateKey(folder, ".dat", multiplier_dat, dwCrc32_dat);

  return   dwCrc32_dxf * multiplier_dxf
         ^ dwCrc32_rct * multiplier_rct
         ^ dwCrc32_pgm * multiplier_pgm
         ^ dwCrc32_mdb * multiplier_mdb
         ^ dwCrc32_trn * multiplier_trn
         ^ dwCrc32_dat * multiplier_dat;
}
CompositorPtr HDRCompositor::Create(void)
{

	m_Compositor = CompositorManager::getSingleton().create("HDR", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
	
	m_HDRTechnique = m_Compositor->createTechnique();

	m_HDRTechnique->setCompositorLogicName("HDR");
	CompositionTechnique::TextureDefinition *texdef = m_HDRTechnique->createTextureDefinition("Scene");
	texdef->refTexName = "mrt_output";
	texdef->refCompName="gbuffer";
//	texdef->scope=Ogre::CompositionTechnique::TextureScope::TS_GLOBAL;
	//render scene
//	CreateTextureDef("Scene",0,0,PF_FLOAT16_RGB);
		
//	CompositionTargetPass *tp = m_HDRTechnique->createTargetPass();
//	tp->setInputMode(CompositionTargetPass::IM_PREVIOUS);

//	tp->setOutputName("Scene");

	RenderDownSample();

    CalculateLuminance();
	
	CalculateKey();

	if(m_GlareType || m_StarType)
	{
		BrightPass();
	
		if(m_GlareType)
			BuildGlare();

		if(m_StarType)
			BuildStar();
	}

	if(m_ToneMapper == TM_REINHARDLOCAL)
		BuildScales();

	FinalRendering();

	return m_Compositor;
}
示例#6
0
void lcLight::UpdatePosition(lcStep Step)
{
	mPosition = CalculateKey(mPositionKeys, Step);
	mTargetPosition = CalculateKey(mTargetPositionKeys, Step);
	mAmbientColor = CalculateKey(mAmbientColorKeys, Step);
	mDiffuseColor = CalculateKey(mDiffuseColorKeys, Step);
	mSpecularColor = CalculateKey(mSpecularColorKeys, Step);
	mAttenuation = CalculateKey(mAttenuationKeys, Step);
	mSpotCutoff = CalculateKey(mSpotCutoffKeys, Step);
	mSpotExponent = CalculateKey(mSpotExponentKeys, Step);

	if (IsPointLight())
	{
		mWorldLight = lcMatrix44Identity();
		mWorldLight.SetTranslation(-mPosition);
	}
	else
	{
		lcVector3 FrontVector(mTargetPosition - mPosition);
		lcVector3 UpVector(1, 1, 1);

		if (fabs(FrontVector[0]) < fabs(FrontVector[1]))
		{
			if (fabs(FrontVector[0]) < fabs(FrontVector[2]))
				UpVector[0] = -(UpVector[1] * FrontVector[1] + UpVector[2] * FrontVector[2]);
			else
				UpVector[2] = -(UpVector[0] * FrontVector[0] + UpVector[1] * FrontVector[1]);
		}
		else
		{
			if (fabs(FrontVector[1]) < fabs(FrontVector[2]))
				UpVector[1] = -(UpVector[0] * FrontVector[0] + UpVector[2] * FrontVector[2]);
			else
				UpVector[2] = -(UpVector[0] * FrontVector[0] + UpVector[1] * FrontVector[1]);
		}

		mWorldLight = lcMatrix44LookAt(mPosition, mTargetPosition, UpVector);
	}
}
示例#7
0
void Dlite::Initialize(LocalMap &map)
{
    Km = 0;
    Node start_node = Node(map.start);
    start_point = map.start;
    Node goal_node = Node(map.goal);
    goal_node.rhs = 0;
    goal_node.g = std::numeric_limits<double>::infinity();
    goal_node.key = CalculateKey(goal_node);
    NODES[vertex(map.goal, map.height)] = goal_node;
    goal = &(NODES.find(vertex(map.goal, map.height))->second);

    start_node.g = std::numeric_limits<double>::infinity();
    start_node.rhs = std::numeric_limits<double>::infinity();

    NODES[vertex(map.start, map.height)] = start_node;
    start = &(NODES.find(vertex(map.start, map.height))->second);

    OPEN.resize(map.height);
    OPEN.put(goal);
}