当前位置: 首页>>代码示例>>C++>>正文


C++ Hit::intersection方法代码示例

本文整理汇总了C++中Hit::intersection方法的典型用法代码示例。如果您正苦于以下问题:C++ Hit::intersection方法的具体用法?C++ Hit::intersection怎么用?C++ Hit::intersection使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Hit的用法示例。


在下文中一共展示了Hit::intersection方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: quantityIntersected

float Cylindre::quantityIntersected(const qglviewer::Vec& _depart, const qglviewer::Vec& _arrivee, float _light_radius) const
{
	// On va construire un cylindre de taille br=br+rlr/2, tr = tr+rlr/2, h = h +rlr/2
	// on va créer un rayon d'origine depart et de direction arrivee - depart 
	// et vérifier si ce rayon intersecte les cylindres
	float penombre;


	Cylindre cylindre_penombre;
	cylindre_penombre.setTopRadius(topradius()+_light_radius/2);
	cylindre_penombre.setBottomRadius(bottomradius()+_light_radius/2);
	cylindre_penombre.setHeight(height()+_light_radius/2);
	
	Disque* disque_top = new Disque(cylindre_penombre.topradius());
	Disque* disque_bottom = new Disque(cylindre_penombre.bottomradius());

	disque_bottom->setMaterial(cylindre_penombre.material());
	disque_top->setMaterial(cylindre_penombre.material());

	Frame* frame_topdisque = new Frame();
	*frame_topdisque = cylindre_penombre.frame();
	frame_topdisque->setPosition(frame_topdisque->position()+Vec(0.0,0.0,cylindre_penombre.height()));
	disque_top->setFrame(*frame_topdisque);
	disque_bottom->setFrame(frame());	

	
	cylindre_penombre.setBottomDisque(disque_bottom);
	cylindre_penombre.setTopDisque(disque_top);

	Ray ray;
	Vec dir = (_arrivee-_depart);
	dir = dir / (dir.norm());
	ray.setStart(_depart);
	ray.setDirection(dir);

	Hit hit;

	if (this->intersect(ray,hit))
	{
		penombre = 1;
	}
	else
	{
		if (cylindre_penombre.intersect(ray,hit))
		{
			Vec I = hit.intersection();
			I = cylindre_penombre.frame().coordinatesOf(I);
			penombre = I.z/cylindre_penombre.height();		
		}
		else
		{			
			penombre = 0;
		}
	}

	return penombre;
}
开发者ID:RemiFusade2,项目名称:RayTracer,代码行数:57,代码来源:cylindre.cpp

示例2: computeUV

void Cylindre::computeUV(Hit& hit) const
{

	float u,v;
	qglviewer::Vec inter = hit.intersection();
	u = atan2(inter.y,inter.x);
	// mettre sur [0 1] 
	if ( u < 0 ){
		u = u + 2*M_PI;
	}
	u = u/(2*M_PI);
	
	v = inter.z/height();
	hit.setCoord(u,v);
}
开发者ID:RemiFusade2,项目名称:RayTracer,代码行数:15,代码来源:cylindre.cpp

示例3: displayIntersectionDebug

void Cylindre::displayIntersectionDebug(const Ray& ray,
				      Hit& hit,
				      const qglviewer::Vec& O,
				      const qglviewer::Vec& I,
				      float t) const{
	std::cout << "\nINTERSECTION du cylindre :" << std::endl;
	std::cout << *this << std::endl;
	
	std::cout << "Avec le rayon :" << std::endl;
	std::cout << ray << std::endl;

	std::cout << "TEMPS  : " << hit.time() << std::endl;
	std::cout << "Point d'intersection : " << hit.intersection() << std::endl;
	std::cout << "O  : " << O << std::endl;
	std::cout << "I  : " << I << std::endl;
	std::cout << "t : " << t << std::endl;
}
开发者ID:RemiFusade2,项目名称:RayTracer,代码行数:17,代码来源:cylindre.cpp


注:本文中的Hit::intersection方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。