//! Gets all triangles which have or may have contact with a 3d line. // new version: from user Piraaate void COctreeTriangleSelector::getTriangles(triangle3df* triangles, SINT32 arraySize, SINT32& outTriangleCount, const line3df& line, const Matrix4* transform) const { #if 0 AxisAlignedBox box(line.start); box.addInternalPoint(line.end); // TODO: Could be optimized for line a little bit more. COctreeTriangleSelector::getTriangles(triangles, arraySize, outTriangleCount, box, transform); #else Matrix4 mat(Matrix4::ZERO); Vector3 vectStartInv(line.start), vectEndInv(line.end); if (SceneNode) { mat = SceneNode->getAbsoluteTransformation(); //mat.makeInverse(); mat = Matrix4::IDENTITY; //mat.transformVect(vectStartInv, line.start); //mat.transformVect(vectEndInv, line.end); vectStartInv = mat.transformAffine(line.start); vectEndInv = mat.transformAffine(line.end); } line3d<FLOAT32> invline(vectStartInv, vectEndInv); //mat.makeIdentity(); mat = Matrix4::IDENTITY; if (transform) mat = (*transform); if (SceneNode) mat = SceneNode->getAbsoluteTransformation() * mat;//mat *= SceneNode->getAbsoluteTransformation(); SINT32 trianglesWritten = 0; if (Root) getTrianglesFromOctree(Root, trianglesWritten, arraySize, invline, &mat, triangles); outTriangleCount = trianglesWritten; #endif }
//! Gets all triangles which have or may have contact with a 3d line. // new version: from user Piraaate void COctreeTriangleSelector::getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount, const core::line3d<f32>& line, const core::matrix4* transform) const { #if 0 core::aabbox3d<f32> box(line.start); box.addInternalPoint(line.end); // TODO: Could be optimized for line a little bit more. COctreeTriangleSelector::getTriangles(triangles, arraySize, outTriangleCount, box, transform); #else core::matrix4 mat ( core::matrix4::EM4CONST_NOTHING ); core::vector3df vectStartInv ( line.start ), vectEndInv ( line.end ); if (SceneNode) { mat = SceneNode->getAbsoluteTransformation(); mat.makeInverse(); mat.transformVect(vectStartInv, line.start); mat.transformVect(vectEndInv, line.end); } core::line3d<f32> invline(vectStartInv, vectEndInv); mat.makeIdentity(); if (transform) mat = (*transform); if (SceneNode) mat *= SceneNode->getAbsoluteTransformation(); s32 trianglesWritten = 0; if (Root) getTrianglesFromOctree(Root, trianglesWritten, arraySize, invline, &mat, triangles); outTriangleCount = trianglesWritten; #endif }