LLVector4a LLDriverParam::getVertexDistortion(S32 index, LLPolyMesh *poly_mesh) { LLVector4a sum; sum.clear(); for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ ) { LLDrivenEntry* driven = &(*iter); sum.add(driven->mParam->getVertexDistortion( index, poly_mesh )); } return sum; }
const LLVector4a &LLDriverParam::getAvgDistortion() { // It's not actually correct to take the average of averages, but it good enough here. LLVector4a sum; sum.clear(); S32 count = 0; for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ ) { LLDrivenEntry* driven = &(*iter); sum.add(driven->mParam->getAvgDistortion()); count++; } sum.mul( 1.f/(F32)count); mDefaultVec = sum; return mDefaultVec; }
LLCamera LLSpatialBridge::transformCamera(LLCamera& camera) { LLCamera ret = camera; LLXformMatrix* mat = mDrawable->getXform(); const LLVector4a& center = mat->getWorldMatrix().getRow<3>(); LLQuaternion2 invRot; invRot.setConjugate( LLQuaternion2(mat->getRotation()) ); LLVector4a delta; delta.load3(ret.getOrigin().mV); delta.sub(center); LLVector4a lookAt; lookAt.load3(ret.getAtAxis().mV); LLVector4a up_axis; up_axis.load3(ret.getUpAxis().mV); LLVector4a left_axis; left_axis.load3(ret.getLeftAxis().mV); delta.setRotated(invRot, delta); lookAt.setRotated(invRot, lookAt); up_axis.setRotated(invRot, up_axis); left_axis.setRotated(invRot, left_axis); if (!delta.isFinite3()) { delta.clear(); } ret.setOrigin(LLVector3(delta.getF32ptr())); ret.setAxes(LLVector3(lookAt.getF32ptr()), LLVector3(left_axis.getF32ptr()), LLVector3(up_axis.getF32ptr())); return ret; }