| 64 | } |
| 65 | |
| 66 | glm::mat4 plot_impl::computeTransformMat(const glm::mat4 pView, const glm::mat4 pOrient) |
| 67 | { |
| 68 | static const glm::mat4 MODEL = glm::rotate(glm::mat4(1.0f), -glm::radians(90.f), glm::vec3(0,1,0)) * |
| 69 | glm::rotate(glm::mat4(1.0f), -glm::radians(90.f), glm::vec3(1,0,0)); |
| 70 | |
| 71 | float xRange = mRange[1] - mRange[0]; |
| 72 | float yRange = mRange[3] - mRange[2]; |
| 73 | float zRange = mRange[5] - mRange[4]; |
| 74 | |
| 75 | float xDataScale = std::abs(xRange) < 1.0e-3 ? 1.0f : 2/(xRange); |
| 76 | float yDataScale = std::abs(yRange) < 1.0e-3 ? 1.0f : 2/(yRange); |
| 77 | float zDataScale = std::abs(zRange) < 1.0e-3 ? 1.0f : 2/(zRange); |
| 78 | |
| 79 | float xDataOffset = (-mRange[0] * xDataScale); |
| 80 | float yDataOffset = (-mRange[2] * yDataScale); |
| 81 | float zDataOffset = (-mRange[4] * zDataScale); |
| 82 | |
| 83 | glm::vec3 scaleVector(xDataScale, yDataScale, zDataScale); |
| 84 | |
| 85 | glm::vec3 shiftVector = glm::vec3(-1 + xDataOffset, -1 + yDataOffset, -1 + zDataOffset); |
| 86 | |
| 87 | return pView * pOrient * MODEL * glm::scale(glm::translate(IDENTITY, shiftVector), scaleVector); |
| 88 | } |
| 89 | |
| 90 | void plot_impl::bindDimSpecificUniforms() |
| 91 | { |