Exemplo n.º 1
0
	void _drawGridPlane(void)
	{
		Ogre::ManualObject* gridPlane = mSceneMgr->createManualObject("GridPlane");
		Ogre::SceneNode* gridPlaneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("GridPlaneNode");

		Ogre::MaterialPtr gridPlaneMaterial = Ogre::MaterialManager::getSingleton().create("GridPlanMaterial", "General");
		gridPlaneMaterial->setReceiveShadows(false);
		gridPlaneMaterial->getTechnique(0)->setLightingEnabled(true);
		gridPlaneMaterial->getTechnique(0)->getPass(0)->setDiffuse(1, 1, 1, 0);
		gridPlaneMaterial->getTechnique(0)->getPass(0)->setAmbient(1, 1, 1);
		gridPlaneMaterial->getTechnique(0)->getPass(0)->setSelfIllumination(1, 1, 1);

		gridPlane->begin("GridPlaneMaterial", Ogre::RenderOperation::OT_LINE_LIST);
		for (int i = 0; i < 21; i++)
		{
			gridPlane->position(-500.0f, 0.0f, 500.0f - i * 50);
			gridPlane->position(500.0f, 0.0f, 500.0f - i * 50);

			gridPlane->position(-500.f + i * 50, 0.f, 500.0f);
			gridPlane->position(-500.f + i * 50, 0.f, -500.f);
		}

		gridPlane->end();

		gridPlaneNode->attachObject(gridPlane);
	}
ManualObject* ShowNormalsGenerator::buildManualObject() const
{
	if (mTriangleBuffer == NULL)
		OGRE_EXCEPT(Ogre::Exception::ERR_INVALID_STATE, "The input triangle buffer must not be null", "Procedural::ShowNormalsGenerator::buildManualObject()");
	SceneManager* sceneMgr = Ogre::Root::getSingleton().getSceneManagerIterator().begin()->second;
	if (sceneMgr == NULL)
		OGRE_EXCEPT(Ogre::Exception::ERR_INVALID_STATE, "Scene Manager must be set in Root", "Procedural::ShowNormalsGenerator::buildManualObject()");
	ManualObject* manual = sceneMgr->createManualObject();
	manual->begin("BaseWhiteNoLighting", RenderOperation::OT_LINE_LIST);
	const std::vector<TriangleBuffer::Vertex>& vertices = mTriangleBuffer->getVertices();
	for (std::vector<TriangleBuffer::Vertex>::const_iterator it = vertices.begin(); it!= vertices.end(); ++it)
	{
		manual->position(it->mPosition);
		manual->position(it->mPosition + it->mNormal * mSize);

		if (mVisualStyle == VS_ARROW)
		{
			Vector3 axis2 = it->mNormal.perpendicular();
			Vector3 axis3 = it->mNormal.crossProduct(axis2);

			manual->position(it->mPosition + it->mNormal * mSize);
			manual->position(it->mPosition + (.8f * it->mNormal  + .1f * axis2) * mSize);

			manual->position(it->mPosition + it->mNormal * mSize);
			manual->position(it->mPosition + .8f * (it->mNormal  - .1f * axis2) * mSize);

			manual->position(it->mPosition + it->mNormal * mSize);
			manual->position(it->mPosition + .8f * ( it->mNormal + .1f * axis3)* mSize);

			manual->position(it->mPosition + it->mNormal * mSize);
			manual->position(it->mPosition + .8f * (it->mNormal - .1f * axis3)* mSize);
		}
	}
	manual->end();

	return manual;
}