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


C++ Point3::Unify方法代码示例

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


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

示例1: WriteToFile

//[-------------------------------------------------------]
//[ Private virtual PLSceneNode functions                 ]
//[-------------------------------------------------------]
void PLSceneCellPortal::WriteToFile(XmlElement &cSceneElement, const String &sApplicationDrive, const String &sApplicationDir)
{
	// Add scene node
	XmlElement *pNodeElement = new XmlElement("Node");
	pNodeElement->SetAttribute("Class", GetClassName());
	pNodeElement->SetAttribute("Name",  GetName());

	// Write position, rotation, scale, bounding box and flags
	WriteToFilePosRotScaleBoxFlags(*pNodeElement);

	// Target cell
	pNodeElement->SetAttribute("TargetCell", m_sTargetCell);

	// [TODO] Check this again, within the Dungeon-Demo scene, this test fails for one portal...
	// Check cell-portal direction and write a warning into the log if the direction looks wrong
	float             fDot       = 0.0f;
	PLSceneContainer *pContainer = GetContainer();
	if (pContainer) {
		// Get world space direction vector from cell-portal to owner cell
		Point3 vDir = pContainer->GetWorldSpaceCenter() - m_vCenter;
		vDir.Unify();

		// Check whether the cell-portal looks into the owner cell
		fDot = DotProd(m_vNormal, vDir);
		if (fDot < 0.0f)
			g_pLog->LogFLine(PLLog::Warning, "%s: The cell-portal doesn't look INTO the cell (%s) it is in!!", GetIGameNode()->GetName(), pContainer->GetName().GetASCII());
	}

	// Vertices
	std::vector<Point3>::size_type nNumOfVertices = m_lstVertices.size();
	String sVertices;
	if (fDot < 0.0f && g_SEOptions.bCorrectPortals) {
		// Invert vertex order
		for (std::vector<Point3>::size_type i=nNumOfVertices; i>0; i--) {
			const Point3 &vVertex = m_lstVertices[i-1];
			if (i)
				sVertices += String::Format("%f %f %f ", vVertex.x, vVertex.y, vVertex.z);
			else
				sVertices += String::Format("%f %f %f",  vVertex.x, vVertex.y, vVertex.z);
		}
	} else {
		for (std::vector<Point3>::size_type i=0; i<nNumOfVertices; i++) {
			const Point3 &vVertex = m_lstVertices[i];
			if (i < nNumOfVertices-1)
				sVertices += String::Format("%f %f %f ", vVertex.x, vVertex.y, vVertex.z);
			else
				sVertices += String::Format("%f %f %f", vVertex.x, vVertex.y, vVertex.z);
		}
	}
	pNodeElement->SetAttribute("Vertices", sVertices);

	// Write flexible variables
	WriteVariables(*pNodeElement);

	// Write modifiers
	WriteModifiers(*pNodeElement, sApplicationDrive, sApplicationDir);

	// Link node element
	cSceneElement.LinkEndChild(*pNodeElement);
}
开发者ID:ByeDream,项目名称:pixellight,代码行数:63,代码来源:PLSceneCellPortal.cpp


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