[2.1] Convert Aabb to AxisAlignedBox

Problems building or running the engine, queries about how to use features etc.
Post Reply
123iamking
Gremlin
Posts: 152
Joined: Sat Aug 12, 2017 4:16 pm
x 4

[2.1] Convert Aabb to AxisAlignedBox

Post by 123iamking »

It's seem that Aabb is a replacement of AxisAlignedBox (see this article Good bye AxisAlignedBox, Hello Aabb)
But AxisAlignedBox is still remained in Ogre 2.1.
So I got this problem: I want to simple raycast a plane
1st, Create plane (If there is a way to create direct plane in Ogre 2.1 please teach me how, I absolutely need it)

Code: Select all

/*Create plane*/
		float nPlaneCx;
		float nPlaneCy;
		float nPlaneX;
		float nPlaneY;
		nPlaneCx = nPlaneCy = 300;
		nPlaneX = 0;
		nPlaneY = 0;
		Ogre::v1::MeshManager::getSingleton().createPlane("MyPlane",
			Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
			Ogre::Plane(Ogre::Vector3::UNIT_Y, 1.0f), nPlaneCx, nPlaneCy,
			1, 1, true, 1, 8.1f, 8.12f, Ogre::Vector3::UNIT_Z,
			Ogre::v1::HardwareBuffer::HBU_STATIC,
			Ogre::v1::HardwareBuffer::HBU_STATIC);

		Ogre::v1::MeshPtr v1Mesh;
		Ogre::MeshPtr v2Mesh;

		v1Mesh = Ogre::v1::MeshManager::getSingleton().load(
			"MyPlane", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME,
			Ogre::v1::HardwareBuffer::HBU_STATIC, Ogre::v1::HardwareBuffer::HBU_STATIC);

		//Create a v2 mesh to import to, with a different name (arbitrary).
		v2Mesh = Ogre::MeshManager::getSingleton().createManual(
			"Plane", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

		v2Mesh->importV1(v1Mesh.get(), true, true, true);

		//Free memory
		v1Mesh->unload();
		Ogre::v1::MeshManager::getSingleton().remove("MyPlane");

		m_pItemPlane = m_pScnMgr->createItem(
			"Plane", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
			Ogre::SCENE_STATIC);
		m_pItemPlane->setDatablock("Rocks");

		Ogre::HlmsManager *hlmsManager = mGraphicsSystem->getRoot()->getHlmsManager();
		Ogre::Hlms *hlms = hlmsManager->getHlms(Ogre::HLMS_PBS);
		Ogre::HlmsPbsDatablock *datablock = static_cast<Ogre::HlmsPbsDatablock*>(
			hlms->getDatablock("Rocks"));

		for (size_t i = Ogre::PBSM_DIFFUSE; i <= Ogre::PBSM_ROUGHNESS; ++i)
		{
			Ogre::HlmsSamplerblock samplerblock;
			samplerblock.mU = Ogre::TAM_WRAP;
			samplerblock.mV = Ogre::TAM_WRAP;
			datablock->setSamplerblock(static_cast<Ogre::PbsTextureTypes>(i), samplerblock);
		}

		m_pNodePlane = m_pScnMgr->getRootSceneNode(Ogre::SCENE_STATIC)->
			createChildSceneNode(Ogre::SCENE_STATIC);
		m_pNodePlane->setPosition(nPlaneX, -3.6, nPlaneY);
		m_pNodePlane->attachObject(m_pItemPlane);
Now ray cast the plane

Code: Select all

             void EmptyProjectGameState::mousePressed(const SDL_MouseButtonEvent &arg, Ogre::uint8 id)
	     {
		int width = mGraphicsSystem->getRenderWindow()->getWidth();
		int height = mGraphicsSystem->getRenderWindow()->getHeight();

		Ogre::Real mouseX = (Ogre::Real)arg.x / (Ogre::Real)width;
		Ogre::Real mouseY = (Ogre::Real)arg.y / (Ogre::Real)height;
		Ogre::Ray ray = m_pCam->getCameraToViewportRay(mouseX, mouseY);
		
		Ogre::Aabb box = m_pItemPlane->getWorldAabb();
		Ogre::AxisAlignedBox oldBox = box; //Error, need convert here :(
		ray.intersects(oldBox);
So is there anyway I can convert Ogre::Aabb to Ogre::AxisAlignedBox so that I can use it in some functions?

Any input is appreciated :)
Last edited by 123iamking on Thu Nov 16, 2017 3:20 pm, edited 2 times in total.
123iamking
Gremlin
Posts: 152
Joined: Sat Aug 12, 2017 4:16 pm
x 4

Re: [2.1] Convert Aabb to AxisAlignedBox

Post by 123iamking »

wait a minute, with this code

Code: Select all

mCorners[0] = mMinimum;
            mCorners[1].x = mMinimum.x; mCorners[1].y = mMaximum.y; mCorners[1].z = mMinimum.z;
            mCorners[2].x = mMaximum.x; mCorners[2].y = mMaximum.y; mCorners[2].z = mMinimum.z;
            mCorners[3].x = mMaximum.x; mCorners[3].y = mMinimum.y; mCorners[3].z = mMinimum.z;            

            mCorners[4] = mMaximum;
            mCorners[5].x = mMinimum.x; mCorners[5].y = mMaximum.y; mCorners[5].z = mMaximum.z;
            mCorners[6].x = mMinimum.x; mCorners[6].y = mMinimum.y; mCorners[6].z = mMaximum.z;
            mCorners[7].x = mMaximum.x; mCorners[7].y = mMinimum.y; mCorners[7].z = mMaximum.z;
And this code

Code: Select all

        Aabb retVal;
        retVal.mCenter      = (max + min) * 0.5f;
        retVal.mHalfSize = (max - min) * 0.5f;
So base on the second code, the convert should be like

Code: Select all

		Ogre::Aabb box = m_pItemPlane->getWorldAabb();
		Ogre::AxisAlignedBox oldBox;
		oldBox.setMinimum(box.mCenter - box.mHalfSize);
		oldBox.setMaximum(box.mHalfSize + box.mCenter);
User avatar
Kohedlo
Orc
Posts: 435
Joined: Fri Nov 27, 2009 3:34 pm
Location: Ukraine, Sumy
x 32
Contact:

Re: [2.1] Convert Aabb to AxisAlignedBox

Post by Kohedlo »

there is example that need invert

Code: Select all

Ogre::AxisAlignedBox convertAabbV2tiV1(Ogre::Aabb aabbv2)
{
	Ogre::AxisAlignedBox aabbv1 = Ogre::AxisAlignedBox(
		aabbv2.getMinimum(),
		aabbv2.getMaximum()
		);
	return aabbv1;
}
c++ game developer.
current project: Imperial Game Engine 2.5
Image
Post Reply