Automated merge with https://bitbucket.org/davep/mesh-asset-deprecation
commit
fe67bd7cfa
|
|
@ -5250,54 +5250,7 @@ LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LL
|
|||
mParams = sInstance->mDecompParams;
|
||||
|
||||
//copy out positions and indices
|
||||
if (mdl)
|
||||
{
|
||||
U16 index_offset = 0;
|
||||
U16 tri[3] ;
|
||||
|
||||
mPositions.clear();
|
||||
mIndices.clear();
|
||||
mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ;
|
||||
mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ;
|
||||
|
||||
//queue up vertex positions and indices
|
||||
for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = mdl->getVolumeFace(i);
|
||||
if (mPositions.size() + face.mNumVertices > 65535)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (U32 j = 0; j < face.mNumVertices; ++j)
|
||||
{
|
||||
mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr()));
|
||||
for(U32 k = 0 ; k < 3 ; k++)
|
||||
{
|
||||
mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ;
|
||||
mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ;
|
||||
}
|
||||
}
|
||||
|
||||
updateTriangleAreaThreshold() ;
|
||||
|
||||
for (U32 j = 0; j+2 < face.mNumIndices; j += 3)
|
||||
{
|
||||
tri[0] = face.mIndices[j] + index_offset ;
|
||||
tri[1] = face.mIndices[j + 1] + index_offset ;
|
||||
tri[2] = face.mIndices[j + 2] + index_offset ;
|
||||
|
||||
if(isValidTriangle(tri[0], tri[1], tri[2]))
|
||||
{
|
||||
mIndices.push_back(tri[0]);
|
||||
mIndices.push_back(tri[1]);
|
||||
mIndices.push_back(tri[2]);
|
||||
}
|
||||
}
|
||||
|
||||
index_offset += face.mNumVertices;
|
||||
}
|
||||
}
|
||||
assignData(mdl) ;
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::setStatusMessage(const std::string& msg)
|
||||
|
|
|
|||
|
|
@ -438,54 +438,7 @@ LLFloaterModelWizard::DecompRequest::DecompRequest(const std::string& stage, LLM
|
|||
mParams = sInstance->mDecompParams;
|
||||
|
||||
//copy out positions and indices
|
||||
if (mdl)
|
||||
{
|
||||
U16 index_offset = 0;
|
||||
U16 tri[3] ;
|
||||
|
||||
mPositions.clear();
|
||||
mIndices.clear();
|
||||
mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ;
|
||||
mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ;
|
||||
|
||||
//queue up vertex positions and indices
|
||||
for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = mdl->getVolumeFace(i);
|
||||
if (mPositions.size() + face.mNumVertices > 65535)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (U32 j = 0; j < face.mNumVertices; ++j)
|
||||
{
|
||||
mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr()));
|
||||
for(U32 k = 0 ; k < 3 ; k++)
|
||||
{
|
||||
mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ;
|
||||
mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ;
|
||||
}
|
||||
}
|
||||
|
||||
updateTriangleAreaThreshold() ;
|
||||
|
||||
for (U32 j = 0; j+2 < face.mNumIndices; j += 3)
|
||||
{
|
||||
tri[0] = face.mIndices[j] + index_offset ;
|
||||
tri[1] = face.mIndices[j + 1] + index_offset ;
|
||||
tri[2] = face.mIndices[j + 2] + index_offset ;
|
||||
|
||||
if(isValidTriangle(tri[0], tri[1], tri[2]))
|
||||
{
|
||||
mIndices.push_back(tri[0]);
|
||||
mIndices.push_back(tri[1]);
|
||||
mIndices.push_back(tri[2]);
|
||||
}
|
||||
}
|
||||
|
||||
index_offset += face.mNumVertices;
|
||||
}
|
||||
}
|
||||
assignData(mdl) ;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1323,35 +1323,7 @@ LLMeshUploadThread::DecompRequest::DecompRequest(LLModel* mdl, LLModel* base_mod
|
|||
mThread = thread;
|
||||
|
||||
//copy out positions and indices
|
||||
if (mdl)
|
||||
{
|
||||
U16 index_offset = 0;
|
||||
|
||||
mPositions.clear();
|
||||
mIndices.clear();
|
||||
|
||||
//queue up vertex positions and indices
|
||||
for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = mdl->getVolumeFace(i);
|
||||
if (mPositions.size() + face.mNumVertices > 65535)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (U32 j = 0; j < face.mNumVertices; ++j)
|
||||
{
|
||||
mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr()));
|
||||
}
|
||||
|
||||
for (U32 j = 0; j < face.mNumIndices; ++j)
|
||||
{
|
||||
mIndices.push_back(face.mIndices[j]+index_offset);
|
||||
}
|
||||
|
||||
index_offset += face.mNumVertices;
|
||||
}
|
||||
}
|
||||
assignData(mdl) ;
|
||||
|
||||
mThread->mFinalDecomp = this;
|
||||
mThread->mPhysicsComplete = false;
|
||||
|
|
@ -3610,6 +3582,62 @@ void LLPhysicsDecomp::run()
|
|||
mDone = true;
|
||||
}
|
||||
|
||||
void LLPhysicsDecomp::Request::assignData(LLModel* mdl)
|
||||
{
|
||||
if (!mdl)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
U16 index_offset = 0;
|
||||
U16 tri[3] ;
|
||||
|
||||
mPositions.clear();
|
||||
mIndices.clear();
|
||||
mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ;
|
||||
mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ;
|
||||
|
||||
//queue up vertex positions and indices
|
||||
for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = mdl->getVolumeFace(i);
|
||||
if (mPositions.size() + face.mNumVertices > 65535)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (U32 j = 0; j < face.mNumVertices; ++j)
|
||||
{
|
||||
mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr()));
|
||||
for(U32 k = 0 ; k < 3 ; k++)
|
||||
{
|
||||
mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ;
|
||||
mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ;
|
||||
}
|
||||
}
|
||||
|
||||
updateTriangleAreaThreshold() ;
|
||||
|
||||
for (U32 j = 0; j+2 < face.mNumIndices; j += 3)
|
||||
{
|
||||
tri[0] = face.mIndices[j] + index_offset ;
|
||||
tri[1] = face.mIndices[j + 1] + index_offset ;
|
||||
tri[2] = face.mIndices[j + 2] + index_offset ;
|
||||
|
||||
if(isValidTriangle(tri[0], tri[1], tri[2]))
|
||||
{
|
||||
mIndices.push_back(tri[0]);
|
||||
mIndices.push_back(tri[1]);
|
||||
mIndices.push_back(tri[2]);
|
||||
}
|
||||
}
|
||||
|
||||
index_offset += face.mNumVertices;
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
void LLPhysicsDecomp::Request::updateTriangleAreaThreshold()
|
||||
{
|
||||
F32 range = mBBox[1].mV[0] - mBBox[0].mV[0] ;
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ public:
|
|||
LLVector3 mBBox[2] ;
|
||||
F32 mTriangleAreaThreshold ;
|
||||
|
||||
void assignData(LLModel* mdl) ;
|
||||
void updateTriangleAreaThreshold() ;
|
||||
bool isValidTriangle(U16 idx1, U16 idx2, U16 idx3) ;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue