| 64 | } |
| 65 | |
| 66 | glm::mat4 vector_field_impl::computeModelMatrix(const glm::mat4& pOrient) |
| 67 | { |
| 68 | float xRange = mRange[1] - mRange[0]; |
| 69 | float yRange = mRange[3] - mRange[2]; |
| 70 | float zRange = mRange[5] - mRange[4]; |
| 71 | |
| 72 | float xDataScale = std::abs(xRange) < 1.0e-3 ? 0.0f : 4/(xRange); |
| 73 | float yDataScale = std::abs(yRange) < 1.0e-3 ? 0.0f : 4/(yRange); |
| 74 | float zDataScale = std::abs(zRange) < 1.0e-3 ? 0.0f : 4/(zRange); |
| 75 | |
| 76 | float xDataOffset = (-mRange[0] * xDataScale); |
| 77 | float yDataOffset = (-mRange[2] * yDataScale); |
| 78 | float zDataOffset = (-mRange[4] * zDataScale); |
| 79 | |
| 80 | glm::vec3 scaleVector(xDataScale, -1.0f * yDataScale, zDataScale); |
| 81 | |
| 82 | glm::vec3 shiftVector(-(mRange[0]+mRange[1])/2.0f, |
| 83 | -(mRange[2]+mRange[3])/2.0f, |
| 84 | -(mRange[4]+mRange[5])/2.0f); |
| 85 | shiftVector += glm::vec3(xDataOffset, yDataOffset, zDataOffset); |
| 86 | |
| 87 | return glm::translate(glm::scale(pOrient, scaleVector), shiftVector); |
| 88 | } |
| 89 | |
| 90 | vector_field_impl::vector_field_impl(const uint pNumPoints, const forge::dtype pDataType, const int pD) |
| 91 | : mDimension(pD), mNumPoints(pNumPoints), mDataType(pDataType), |