//------------------------------------------------------------------------
	/// <TODO: insert function description here>
	/// @return bool <TODO: insert return value description here>
	bool TerrainCollisionShape::_rebuildFromCachedData()
	{
		//assert(mVertexBuf && mFaceBuf);

		Opcode::OPCODECREATE opcc;
		_prepareOpcodeCreateParams(opcc);
		opcModel.Build(opcc);

		calculateSize();

		return true;
	}
//------------------------------------------------------------------------
/// <TODO: insert function description here>
/// @return bool <TODO: insert return value description here>
bool TerrainCollisionShape::_refitToCachedData()
{
  assert(mVertexBuf);

  // rebuild tree
  if (!opcModel.Refit()) {
    LogManager::getSingleton().logMessage("OgreOpcode::TerrainCollisionShape::_refitToCachedData(): OPCODE Quick refit not possible with the given tree type.");
    // Backup plan -- rebuild full tree
    opcMeshAccess.SetPointers(0, (IceMaths::Point*)mVertexBuf);
    Opcode::OPCODECREATE opcc;
    _prepareOpcodeCreateParams(opcc);
    opcModel.Build(opcc);
  }

  calculateSize();

  return true;
}
예제 #3
0
	//------------------------------------------------------------------------
	/// <TODO: insert function description here>
	/// @param [in, out]  ent Entity *    <TODO: insert parameter description here>
	/// @return bool <TODO: insert return value description here>
	bool BoxCollisionShape::load(SceneNode* scnNode, int height, int width, int depth)
	{
		assert(!mVertexBuf && !mFaceBuf);

		mParentNode = scnNode;
		
		// Set up the 8 corners of the cube
		float top     =  height; 
		float bottom  = -height;
		float front   = -width; 
		float back    =  width; 
		float left    = -depth; 
		float right   =  depth; 

		numVertices = 8;
		numFaces = 12;
		mVertexBuf = new float[numVertices*3];
		mFaceBuf = new size_t[numFaces*3];

		mVertexBuf[0] = left;
		mVertexBuf[1] = bottom;
		mVertexBuf[2] = front;
		mVertexBuf[3] = right;
		mVertexBuf[4] = bottom;
		mVertexBuf[5] = front;
		mVertexBuf[6] = left;
		mVertexBuf[7] = top;
		mVertexBuf[8] = front;
		mVertexBuf[9] = right;
		mVertexBuf[10] = top;
		mVertexBuf[11] = front;
		mVertexBuf[12] = left;
		mVertexBuf[13] = bottom;
		mVertexBuf[14] = back;
		mVertexBuf[15] = right;
		mVertexBuf[16] = bottom;
		mVertexBuf[17] = back;
		mVertexBuf[18] = left;
		mVertexBuf[19] = top;
		mVertexBuf[20] = back;
		mVertexBuf[21] = right;
		mVertexBuf[22] = top;
		mVertexBuf[23] = back;

		int leftbottomfront   = 1; 
		int rightbottomfront  = 0; 
		int lefttopfront      = 3; 
		int righttopfront     = 2;
		int leftbottomback    = 5;
		int rightbottomback   = 4; 
		int lefttopback       = 7;
		int righttopback      = 6; 
		//int leftbottomfront   = 0; 
		//int rightbottomfront  = 1; 
		//int lefttopfront      = 2; 
		//int righttopfront     = 3;
		//int leftbottomback    = 4;
		//int rightbottomback   = 5; 
		//int lefttopback       = 6;
		//int righttopback      = 7; 

		// Left faces
		mFaceBuf[0] = lefttopfront;
		mFaceBuf[1] = lefttopback;
		mFaceBuf[2] = leftbottomback;
		mFaceBuf[3] = leftbottomback;
		mFaceBuf[4] = leftbottomfront;
		mFaceBuf[5] = lefttopfront;
		// Front faces
		mFaceBuf[6] = lefttopfront;
		mFaceBuf[7] = leftbottomfront;
		mFaceBuf[8] = rightbottomfront;
		mFaceBuf[9] = rightbottomfront;
		mFaceBuf[10] = righttopfront;
		mFaceBuf[11] = lefttopfront;
		// Right faces
		mFaceBuf[12] = righttopback;
		mFaceBuf[13] = righttopfront;
		mFaceBuf[14] = rightbottomfront;
		mFaceBuf[15] = rightbottomfront;
		mFaceBuf[16] = rightbottomback;
		mFaceBuf[17] = righttopback;
		// Back faces
		mFaceBuf[18] = leftbottomback;
		mFaceBuf[19] = lefttopback;
		mFaceBuf[20] = righttopback;
		mFaceBuf[21] = righttopback;
		mFaceBuf[22] = rightbottomback;
		mFaceBuf[23] = leftbottomback;
		// Top faces
		mFaceBuf[24] = righttopfront;
		mFaceBuf[25] = righttopback;
		mFaceBuf[26] = lefttopback;
		mFaceBuf[27] = lefttopback;
		mFaceBuf[28] = lefttopfront;
		mFaceBuf[29] = righttopfront;
		// Bottom faces
		mFaceBuf[30] = leftbottomfront;
		mFaceBuf[31] = leftbottomback;
		mFaceBuf[32] = rightbottomback;
		mFaceBuf[33] = rightbottomback;
		mFaceBuf[34] = rightbottomfront;
		mFaceBuf[35] = leftbottomfront;

		//numVertices = 4;
		//numFaces = 2;
		//mVertexBuf = new float[numVertices*3];
		//mFaceBuf = new int[numFaces*3];
		//
		//mVertexBuf[0] = -size;
		//mVertexBuf[1] = 0;
		//mVertexBuf[2] = -size;
		//mVertexBuf[3] = -size;
		//mVertexBuf[4] = 0;
		//mVertexBuf[5] = size;
		//mVertexBuf[6] = size;
		//mVertexBuf[7] = 0;
		//mVertexBuf[8] = size;
		//mVertexBuf[9] = size;
		//mVertexBuf[10] = 0;
		//mVertexBuf[11] = -size;

		//mFaceBuf[0] = 0;
		//mFaceBuf[1] = 1;
		//mFaceBuf[2] = 2;
		//mFaceBuf[3] = 0;
		//mFaceBuf[4] = 2;
		//mFaceBuf[5] = 3;

		opcMeshAccess.SetNbTriangles(numFaces);
		opcMeshAccess.SetNbVertices(numVertices);
		opcMeshAccess.SetPointers((IceMaths::IndexedTriangle*)mFaceBuf, (IceMaths::Point*)mVertexBuf);
		//opcMeshAccess.SetStrides(sizeof(int) * 3, sizeof(float) * 3);

		assert(mVertexBuf && mFaceBuf);

		Opcode::OPCODECREATE opcc;
		_prepareOpcodeCreateParams(opcc);
		opcModel.Build(opcc);

		calculateSize();

		mParentNode->getWorldTransforms(&mFullTransform);
		//mFullTransform = mParentNode->_getFullTransform();

		return true;
	}