C++ (Qt)std::vector<Vec3> CPolySDS::CalcVerNormals( const std::vector<Vec3> & pos ) const{ std::vector<Vec3> dst(pos.size()); for (size_t i = 0; i < mNorIndex.size(); i += mNumVerPerFace) { Vec3 faceN = GetFaceNormal(&mNorIndex[i], mNumVerPerFace, pos); for (size_t j = 0; j < mNumVerPerFace; ++j) dst[mNorIndex[i + j]] += faceN; } // ну и далее вектор посылается на видеокарту
C++ (Qt)GetFaceNormal(&mNorIndex[i], mNumVerPerFace, pos)
C++ (Qt)Vec3 GetFaceNormal(...){return Vec3();}
std::vector<Vec3> CPolySDS::CalcVerNormals( const std::vector<Vec3> & pos, size_t startIndx, size_t endIndx) const{ std::vector<Vec3> dst(pos.size()); for (size_t i = startIndx; i < endIndx; i += mNumVerPerFace) ......}// На каждом ядре запуститьCalcVerNormals(pos, 0, mNorIndex.size() / 4);CalcVerNormals(pos, (mNorIndex.size() / 4) + 1 , (mNorIndex.size() / 4) * 2);// и т.д.
58% съедается на цикле.